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


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

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

  • 订阅主题
  • 添加到设备组

RT也可以过期/更改。

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

  1. 我是否必须取消订阅旧令牌并将新令牌订阅到主题?
  2. 我是否必须删除旧令牌并将新令牌添加到设备组?
  3. 是否可以获取有关令牌的设备组/主题的信息?
  4. 我可以多次向设备组添加令牌吗?
  5. 我可以多次为主题订阅令牌吗?
  6. 多个订阅/添加相同令牌会导致接收重复消息

对不起,这是很多问题,但我想,对于那些经历过这个问题的人来说,应该是馅饼;)


6505
2018-02-15 11:13


起源

如何维护每个用户的RT列表?我有一个问题,因为我知道RT是移动的。 - Hernan Humaña


答案:


  1. 我是否必须取消订阅旧令牌并将新令牌订阅到主题?

AFAIK,您不必取消订阅旧令牌,因为它将被FCM本身丢弃。对于新令牌,是的,您必须订阅您需要的主题。通常的事情是在Android中完成的 subscribeToTopic() 在 onTokenRefreshed()


  1. 我是否必须删除旧令牌并将新令牌添加到设备组?

是。您必须处理设备组消息传递的映射/关系。看到我的回答 这里。这与主题不同。令牌将无效,但将作为相应注册密钥的注册令牌列表的一部分保留。

这就是为什么有可能获得一个 NotRegistred 如果您发送到设备组,其中一个令牌出错。 :)


  1. 是否可以获取有关令牌的设备组/主题的信息?

对于设备组消息(与#2相同),开发人员(您)必须自己管理这些详细信息。对于主题,您可以使用 InstanceID API。具体来说,设置 details 参数来 true

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


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

Ahmm。是。你的意思是 相同 令牌?如果是这样,我还没有尝试过。在添加之前,还可以在客户端进行一些检查。


  1. 我可以多次为主题订阅令牌吗?

如果你的意思是重新订阅,那么是的。如果您的意思是重复请求订阅,我认为结果仍然会成功。尽管如此,行为没有变化。


  1. 多个订阅/添加相同令牌会导致接收重复消息吗?

测试出来了。您不会收到重复主题订阅的重复消息,也不会向设备组添加相同的令牌。似乎FCM忽略了订阅/添加注册令牌的请求,如果它已经订阅/添加到设备组。


9
2018-02-15 11:35



PS:这是很多问题。 - AL.
感谢你的帮助,AL。你是对的,问题4和5听起来有点奇怪。我真正想知道的是,如果我可以盲目地向主题或设备组添加令牌而不检查,是否已经添加了令牌。 - Ralf Bokelberg
我将在上面提到第六个问题 - Ralf Bokelberg
@RalfBokelberg查看我对Q#6的更新答案。 - AL.
非常感谢@AL。 - Ralf Bokelberg