【问题标题】:Firebase subscribe to a topic dynamicallyFirebase 动态订阅主题
【发布时间】:2020-04-14 11:44:14
【问题描述】:

我的应用程序中有一个场景,即发生某个事件,并且我有一个用户 ID/令牌列表,我需要将通知发送到所有这些 n 设备。 要使用 n 个令牌触发 fcm,n 时间将不可行 所以我应该动态创建一个主题并将这 n 个用户的设备 ID/令牌订阅到该主题。

我知道我可以从客户端应用程序执行此操作,但是否可以从后端执行此操作。 我使用 Phoenix 作为我的后端。

【问题讨论】:

  • "用n个token触发fcm,n次不可行"为什么不呢?
  • 发送一个主题消息而不是发送n个令牌不是更好吗?还是两者都具有相同的复杂性?
  • 您已经拥有令牌,因此直接发送给他们可能会更简单。
  • 好的,意味着向令牌发送 100 条消息不会比拥有 100 个订阅用户的主题产生额外的开销,对吧? @FrankvanPuffelen
  • 主题只是对这些相同标记的自动扇出。在交付级别上没有任何变化,只是 Google 的服务器在执行从主题到令牌的扇出,而不是您在自己的代码中执行。

标签: android firebase google-cloud-functions firebase-cloud-messaging


【解决方案1】:

我找到了方法,写下这个答案以防将来对其他人有所帮助

是的,如果我们有以下列表,则可以动态创建主题 valid registration tokens

如果你想生成一个主题,这是端点 url,假设你有一个用户列表-

https://iid.googleapis.com/iid/v1:batchAdd

授权标头包含-

Content-Type- application/json
Authorization- key=<your-server-key>

身体参数看起来像-

{
"to": "/topics/<topic name>",
    "registration_tokens": [
        "token1",
        "token2"
    ]
}

现在主题已经创建,

您可以使用- https://fcm.googleapis.com/fcm/send

轻松地向该主题发送消息

授权令牌与前一个相同

和身体一样-

{
"priority": "HIGH",
    "notification": {
        "title": "New Text Message",
        "image": "https://firebase.google.com/images/social.png",
        "body": "Hello how are you?"
    },
    "to": "/topics/<topic name>"
}

【讨论】:

    【解决方案2】:

    用n个token触发fcm,n次是不可行的

    使用主题本质上不会改变 FCM 消息传递的工作方式。当您使用主题时,Google 服务器会保留该主题到订阅令牌的映射。因此,当您调用 API 向主题发送消息时,Google 服务器会从该主题扇出到令牌,然后使用与您自己使用令牌调用 API 时相同的基础架构来传递消息。

    由于您已经拥有令牌,因此直接发送给他们可能会更简单,而不是创建一次性主题。

    【讨论】:

    • 但是如果有 100 个用户,那会不会效率低下,会有 100 个帖子请求与 1 个主题的帖子请求,只是询问,因为我们应该尽量减少对 Web 服务器的请求
    • 如果您向 100 个用户发送相同的消息,您可以在一个请求中传递这些令牌。这也是主题的作用。
    • 是的,这就是我想知道的,该主题消息最大限度地减少了发布请求的数量,我们应该记住这一点,对吧?
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2017-02-24
    • 2019-04-24
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多