【问题标题】:Why is Firebase FCM notifications sent even to the sender of the message为什么 Firebase FCM 通知甚至发送给消息的发件人
【发布时间】:2018-09-11 05:14:16
【问题描述】:

就像在 whatsapp 中一样,如果我向其他人发送消息,他们会通过推送通知获得通知,并且不会发送相同的推送通知,因为我是发件人。 在 firebase 中,无论您是否是发件人,您都会收到您甚至发送的消息的推送通知。如果我是发件人,我如何能够向除我以外的其他人发送通知?

我正在使用 Firebase Cloud 功能发送推送通知。

【问题讨论】:

  • 这肯定是您发送通知的方式有问题。
  • 哇,云函数,好吧,只要放一个名称字段(在 pojo 类中)来区分有效负载数据(接收模型)上是否有你的名字......不是 Firebase 问题
  • @Rigan:我在下面写了一个答案,说明为什么它会这样工作。但更有可能的是,您有一些特定的代码,您想跳过它为其发送消息的用户。在这种情况下,如果您在发送消息的问题中显示代码,我们可以提供最好的帮助。我建议阅读 how to create a minimal, complete, verifiable example 以获得有关如何获得代码相关问题帮助的详细说明。

标签: android firebase firebase-cloud-messaging


【解决方案1】:

我假设您问题中的“发件人”指的是您应用的用户,并且您正在实施用户对用户的消息传递。这通常通过让您的应用调用服务器,然后使用 FCM API 发送消息来实现:

+--------+          +------------+          +----------+
| Sender |   --->   | App Server |   --->   | Receiver |
+--------+          +------------+    |     +----------+
                                      |
                                      |     +----------+
                                      +->   | Receiver |
                                            +----------+

Firebase 客户端消息传递对发送消息的用户没有隐含的了解。 设备发送消息是一个服务器端 API,它以管理员权限运行。它不是作为特定用户运行的,因此即使它想要也不能跳过该特定用户。

如果您想跳过发送给特定用户,您需要将有关该用户的信息传递到调用 FCM API 以发送消息的代码,然后跳过用户 ID里面的代币。假设您在 Node 服务器中使用 Firebase Admin SDK 发送消息,代码可能如下所示:

var UIDs = ["uid1", "uid2", "uid3"];
var TOKENS = { "uid1": "token1", "uid2": "token2", "uid3": "token3" };

function sendMessage(messageText, senderUid) {
  UIDs.forEach(function(recipientUid) {
    if (recipientUid !== senderUid) {       
      var message = {
        notification: {
          title: 'Message from '+senderUid,
          body: messageText
        },
        token: TOKENS[recipientUID
      };

      admin.messaging().send(message)
        .then((response) => {
          console.log('Successfully sent message:', response);
        })
        .catch((error) => {
          console.log('Error sending message:', error);
        });
    }
  });
}

【讨论】:

  • 本文中的术语token指的是设备注册令牌(有时也称为实例ID令牌),它标识特定设备上的特定应用程序。此类令牌用于确定将消息发送到何处。有关这方面的更多示例,请参阅有关向单个设备发送消息的 FCM 文档:firebase.google.com/docs/cloud-messaging/admin/…
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 2022-08-22
  • 2022-08-16
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
相关资源
最近更新 更多