当用户在聊天中收到另一个用户的新消息时,如何创建通知?

时间:2019-07-15 09:33:09

标签: java android firebase-realtime-database android-notifications

我在Android应用程序中聊天。通过此聊天,我的应用程序中的用户可以通过文本相互通信。

当一个用户(“ Zoey”)向另一个用户(“ Fred”)发送消息时,我希望Fred能够收到有关此消息的通知,即使在Zoey发送消息时,Fred设备上的应用程序已关闭。

我试图创建一种服务,该服务基本上假定每次对数据库引用的更改完成后都进行监听。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
      //     Toast.makeText(getApplicationContext(),"service  created: "+staticUSERNAME,Toast.LENGTH_LONG).show();
        databaseReference =  FirebaseDatabase.getInstance().getReference().child("Notifications");
        notificationManager = NotificationManagerCompat.from(this);
        createNotificationChannels();
        addUserStateListener();
           Toast.makeText(getApplicationContext(),"service  started ",Toast.LENGTH_LONG).show();

        //add5();
        return START_STICKY;
    }

    private void addUserStateListener() {
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Toast.makeText(getApplicationContext(), "DATE CHANGED.", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };
        databaseReference.addValueEventListener(valueEventListener);

    }

2 个答案:

答案 0 :(得分:0)

我建议您使用Firebase Cloud Messaging。

https://firebase.google.com/docs/cloud-messaging

这将确保在App处于后台时将通知发送。 如果您使用某项服务,但系统杀死了该应用程序,则在这种情况下,该服务将无法再次启动,并且通知也不会传递给用户。

这是我的经验。经过长时间的服务尝试,我通过FCM提出了一个解决方案,对我来说这很完美。

答案 1 :(得分:0)

该函数的工作方式是侦听数据库中任何状态的变化。

基本上,您会聆听所需参考中的更改,如果更改了参考,则会启动一个功能,该功能将使用发送方和接收方的电话令牌ID并生成通知负载。

要更好地理解,请检查此

fcm-notifications

例如,在您的用例中,我会这样做

首先,我向用户发送一条消息,然后将其发布到Firebase数据库中时,我触发一个获取发件人令牌ID的函数,并发送并触发一个获取该消息并将其发送给接收者令牌ID的函数,如下所示:通知有效载荷。

接收消息的用户不需要在前台运行该应用程序,它可以在后台运行或被杀死(请确保连接到fcm的应用程序的服务保持运行)