聊天应用-发件人收到通知

时间:2019-07-27 09:58:41

标签: android firebase firebase-cloud-messaging

我正在开发一个android聊天应用程序,该聊天室中有用户可以用来编写消息的聊天室。在聊天室中,他们可以选择订阅该室。目的是在将新消息添加到会议室时接收推送通知。

我已经通过Cloud Functions and Topics实现了此功能。这是我的代码:

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

});

问题 如果用户已订阅主题并发送消息,则该用户也将收到通知。如何防止发送邮件的用户收到通知?

2 个答案:

答案 0 :(得分:1)

没有任何方法可以禁止向主题中的一个令牌发送消息。您可以将消息发送到主题,也可以不将其发送到主题。

您所能做的就是禁止在客户端上显示消息。为此,重要的是要了解不同的message types that FCM supports

    如果您的应用程序未激活,
  • 通知消息将由系统自动显示,如果应用程序处于激活状态,则会将其传递给您的应用程序代码。
  • 数据消息永远不会自动显示在系统中,并且始终传递给您的应用程序代码。

因此,要完全控制看到消息的人,可以使用数据消息。但对于聊天应用程序,您也可以考虑使用通知消息,因为在您发送通知时,用户经常会使用该应用程序发送消息。但是,可能存在一些极端情况,因此,如果这些情况妨碍了您:发送数据消息,并触发使用您自己的应用程序代码显示通知。

答案 1 :(得分:1)

您可以使用分隔符(如下面的示例)简单地在邮件中发送隐藏的userID

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

然后在显示通知栏时

获取消息并像下面一样拆分它,然后如下所示放置消息

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

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