当用户在我的聊天中收到来自其他用户的新消息时,如何创建通知



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

当用户("Zoey"(向其他用户("Fred"(发送消息时,我希望Fred收到有关该消息的通知,即使Fred设备上的应用程序在Zoey发送消息时已关闭。

我尝试创建一个服务,该服务基本上假设每次对我的数据库引用进行更改时都会侦听。

    @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);
    }

我建议您使用Firebase Cloud Messaging。

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

这将保证当应用程序在后台运行时将发送通知。如果您使用某项服务并且系统被终止,则在以下情况下,服务将无法重新启动,并且不会向用户发送通知。

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

它应该如何与侦听数据库中任何状态更改的函数一起工作。

基本上,您侦听所需引用中的更改,如果该引用发生更改,您将启动一个函数,该函数将获取发送方和接收方的电话令牌 ID 并进行通知有效负载。

为了更好地理解,请检查这个

FCM 通知

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

首先,我向用户发送一条消息,然后在将该消息发布到 Firebase 数据库时,我会触发一个函数,该函数获取发送方令牌 ID,并发送并触发一个函数,该函数获取该消息并将其作为通知有效负载发送到接收方令牌 ID。

接收消息的用户不需要将应用置于前台,它可以在后台或被终止(确保连接到 fcm 的应用的服务保持运行(

最新更新