Firebase云消息传递 - 管理注册令牌

32

我正在考虑使用Firebase云消息传递实现移动应用程序和浏览器应用程序之间的消息传递,有一些问题文档似乎没有回答。

为了能够接收消息,您需要一个注册令牌(RT)。 消息可以发送到RT、主题或设备组notification_key。RT也可以被用于:

  • 直接使用
  • 订阅主题
  • 添加到设备组中

RT也可能会过期/更改。

在我的应用程序中,我正在维护每个用户的RT列表。 现在,当RT更改时:

  1. 我是否需要取消订阅旧令牌并订阅新令牌以进行主题订阅?
  2. 我是否需要将旧的令牌删除并将新的令牌添加到设备组中?
  3. 是否可以获取与令牌相关的设备组/主题信息?
  4. 是否可以多次将令牌添加到设备组?
  5. 是否可以多次订阅同一令牌的主题?
  6. 多次订阅/添加相同令牌是否会导致接收重复的消息?

对不起,这是很多问题,但我想,对于已经经历过这一点的人来说,这应该是小意思;)


如何为每个用户维护一个RT列表?我有一个问题,因为我理解RT是针对移动设备的。 - Hernan Humaña
1个回答

33
我需要翻译以下文本:“Do I have to unsubscribe the old token and subscribe the new token to topics?” 据我所知,您不必取消订阅旧的标记,因为它将被 FCM 自动丢弃。对于新的标记,是的,您需要将其订阅到所需的主题。通常情况下(在Android中),通过在onTokenRefreshed()中使用subscribeToTopic()来完成此操作。请注意保留HTML标签。
  1. 我是否需要删除旧令牌并将新令牌添加到设备组中?

是的。您需要处理设备组消息的映射/关系。请参见我的答案 这里。这与主题不同。令牌将被作废,但将作为相应注册密钥的注册令牌列表的一部分保留。

这就是为什么在向设备组发送消息时,有可能会收到一个NotRegistred错误的原因。 :)


  • 是否可以获取有关令牌的设备组/主题信息?
  • 对于设备组消息(与#2相同),开发人员(您)必须自己管理这些细节。 对于主题,您可以使用InstanceID API。 具体来说,请将details参数设置为true

    [可选] 布尔值details:将此查询参数设置为true以获取可用的IID令牌详细信息,包括连接信息和与此令牌相关联的设备的FCM或GCM主题订阅信息(如果有)。 如果未指定,则默认为false


    1. 我可以将令牌添加到设备组多次吗?

    啊,可以。你是指 同一个 令牌吗?如果是,请在添加之前在客户端进行一些检查。


    如果您是指重新订阅,则可以。如果您是指重复请求订阅,则我认为结果仍将成功。但行为不会有任何更改。
    如果订阅/添加相同的令牌,是否会收到重复的消息?
    已经测试过了。无论是重复主题订阅还是将相同的令牌添加到设备组中,您都不会收到重复的消息。似乎 FCM 会忽略订阅/添加注册令牌的请求,如果它已经被订阅或添加到设备组中。

    10
    那是很多问题。 - AL.
    感谢您的帮助,AL。 您是正确的,问题4和5听起来有点奇怪。 我真正想知道的是,如果我可以盲目地向主题或设备组添加令牌,而不检查该令牌是否已经被添加。 - Ralf Bokelberg
    我会在前面加上第六个问题。 - Ralf Bokelberg
    非常感谢 @AL。 - Ralf Bokelberg

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接