聊天应用程序 - 发件人获取通知



我正在开发一个Android聊天应用程序,其中有聊天室用户可以用来写消息。在聊天室内,他们可以选择订阅该房间。这样做的目的是在将新消息添加到房间中时接收推送通知。

我已经通过云功能和主题制作了此功能。这是我的代码:

exports.pushNotification = functions.database.ref('/messages/{pushId}/{id}').onCreate((change, context) => {
const pushId = context.params.pushId;
const originalText = change.val();
const payload = {
    notification: {
        title: originalText.message,
        body: originalText.sender,
        sound: "default"
    },
};
const options = {
    priority: "high",
    timeToLive: 60 * 60 * 24
};

return admin.messaging().sendToTopic(pushId, payload, options);
});

问题如果用户被订阅了一个主题,并发送一条消息,该消息还会收到通知。如何阻止用户发送消息的通知?

无法抑制一个主题中的一个令牌。您可以将消息发送到主题,也可以不发送到主题。

您可以做的是抑制在客户端上显示消息。为此,重要的是要了解FCM支持的不同消息类型:

  • notificaton消息如果您的应用不活动,系统会自动显示,如果应用程序处于活动状态,则将其传递到您的应用程序代码。
  • 数据消息系统从未自动显示,并始终将其交付到您的应用程序代码。

因此,要完全控制 See 消息,您可以使用数据消息。但是,在聊天应用程序的情况下,您也可以考虑使用通知消息,因为在发送通知时,用户通常会使用该应用程序发送消息。不过,那里可能有一些边缘情况,因此,如果这些情况妨碍了您:发送数据消息,并触发您自己的应用程序代码的通知。

您可以使用某些分隔符在消息中简单地发送隐藏的userID,例如以下示例

notification: {
        title: originalText.message+ '____'+userID,
        body: originalText.sender,
        sound: "default"
    }

然后在显示通知栏时

获取消息并像下面的那样将其拆分,然后输入消息如下所示

String message = mMessage.split("____")[0];

现在在通知栏中显示message而不是mMessage

最新更新