【问题标题】:Chat application - Sender gets notification聊天应用程序 - 发件人收到通知
【发布时间】:2019-07-27 19:18:46
【问题描述】:

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

我使用 Cloud Functions 和 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);

});

问题 如果用户订阅了某个主题并发送了一条消息,那么同一用户也会收到通知。如何防止发送消息的用户收到通知?

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

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

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

    • 通知消息会在您的应用处于非活动状态时由系统自动显示,并在应用处于活动状态时传递到您的应用代码。
    • 数据消息不会由系统自动显示,而是始终传递到您的应用程序代码。

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

    【讨论】:

      【解决方案2】:

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

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

      然后当你显示通知栏时

      获取消息并将其拆分如下,然后将消息如下所示

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        • 2018-11-14
        • 1970-01-01
        • 2017-01-23
        相关资源
        最近更新 更多