![](/img/trans.png)
[英]How to show custom UI for firebase notification when the app is in background?
[英]How to show notification when user app run in background?
我在 android 工作室中使用 firebase 创建了一个聊天应用程序,我的所有活动都正常工作,期待我的后台通知,我想要的是,当其他用户发送消息以及用户看不见消息和应用程序在后台运行时,用户会收到通知。 我会试试这个,但是当用户聊天(看到消息)和用户应用程序在后台运行(未看到消息)时,我都会收到通知
这是我的代码
apiService= Client.getClient("https://fcm.googleapis.com/").create(APIService.class);
userref =to.getStringExtra("id");
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
sendmsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String textmsg=inputmsg.getText().toString();
if(!textmsg.equals("")){
String rand=randomString(10);
sendmessage(firebaseUser.getUid(),userref,textmsg,currentDate,currenttime,rand);
getnotifiactions(rand);
}
else{
Toast.makeText(chatscreen.this, "ENTER SOMETHING TO SEND ", Toast.LENGTH_SHORT).show();
}
inputmsg.setText("");
}
});
private void sendmessage(String sender,String receiver,String message,String currentd_d ,String currenttime,String no){
DatabaseReference reference1= FirebaseDatabase.getInstance().getReference();
HashMap<String,Object> hashMap=new HashMap<>();
hashMap.put("sender",sender);
hashMap.put("receiver",receiver);
hashMap.put("message",message);
hashMap.put("date",currentd_d);
hashMap.put("time",currenttime);
hashMap.put("isseen",false);
hashMap.put("msgid",no);
reference1.child("Chats").push().setValue(hashMap);
}
private void seenmessage(String userid)
{
reference= FirebaseDatabase.getInstance().getReference("Chats");
seenlisterner=reference.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot)
{
for(DataSnapshot dataSnapshot:snapshot.getChildren())
{
Chat cht=dataSnapshot.getValue(Chat.class);
if(cht.getReceiver().equals(firebaseUser.getUid()) && cht.getSender().equals(userid) )
{
HashMap<String,Object> hashMap=new HashMap<>();
hashMap.put("isseen",true);
dataSnapshot.getRef().updateChildren(hashMap);
} } }
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error)
{
}
}); }
这是通知方法和调用
private void getnotifiactions(String msgid) {
reference= FirebaseDatabase.getInstance().getReference();
Query query = reference.child("Chats").orderByChild("msgid").equalTo(msgid);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
for(DataSnapshot ds:snapshot.getChildren()) {
Chat ct=ds.getValue(Chat.class);
if(ct.getIsseen().equals(true)){
Toast.makeText(chatscreen.this, "Online", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(chatscreen.this, "OFFLINE", Toast.LENGTH_SHORT).show();
sendnotification(ct.getReceiver(), ct.getMessage());}
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
}
private void sendnotification(String receiver, String msg) {
DatabaseReference tokens=FirebaseDatabase.getInstance().getReference("Token");
Query query=tokens.orderByKey().equalTo(receiver);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot:snapshot.getChildren()){
String fuserid=firebaseUser.getUid();
Token token=dataSnapshot.getValue(Token.class);
Data data=new Data(firebaseUser.getUid(),R.mipmap.ic_launcher," "+msg,"New MESSAGES",userref);
Sender sender=new Sender(data,token.getToken());
apiService.sendNotification(sender).enqueue(new Callback<Myresponse>() {
@Override
public void onResponse(Call<Myresponse> call, Response<Myresponse> response) {
if(response.code()==200){
if(response.body().success != 1){
Toast.makeText(chatscreen.this,"Failed", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(Call<Myresponse> call, Throwable t) {
}
});
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
}
我只希望在用户应用程序在后台运行时收到通知,而不是在用户与其他用户聊天时收到通知。 有谁知道如何解决这个问题? 请帮我 !
如果您使用FirebaseCloudMessaging
接收推送通知,您应该知道当应用在后台时应用不会收到消息。 检查这个文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.