繁体   English   中英

当用户应用程序在后台运行时如何显示通知?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM