我正在考虑使用Firebase云消息在移动和浏览器应用程序之间实现消息传递,我有几个问题,文档似乎没有回答。
为了能够接收消息,您需要注册令牌(RT)。消息可以发送到RT、主题或设备组notification_key
。也可以使用RT:
- 直接
- 订阅某个主题
- 添加到设备组
RT也可能过期/更改。
在我的应用程序中,我为每个用户维护一个RT列表。现在,当RT改变时:
- 我必须取消订阅旧令牌并订阅主题的新令牌吗
- 我必须删除旧令牌并将新令牌添加到设备组吗
- 是否可以获取有关令牌的设备组/主题的信息
- 我可以多次向设备组添加令牌吗
- 我可以多次订阅主题的令牌吗
- 同一令牌的多次订阅/添加是否会导致接收到重复的消息
对不起,有很多问题,但我想,对于经历过这一切的人来说,这应该是馅饼;)
- 我必须取消订阅旧令牌并订阅主题的新令牌吗
AFAIK,您不必取消订阅旧代币,因为它将被FCM自己丢弃。对于新的令牌,是的,您必须将其订阅到您需要的主题。通常(在Android中)通过在onTokenRefreshed()
中设置subscribeToTopic()
来完成。
- 我必须删除旧令牌并将新令牌添加到设备组吗
是。您必须处理设备组消息的映射/关系。请在此处查看我的答案。这与主题不同。该令牌将无效,但将作为相应注册密钥的注册令牌列表的一部分保留。
这就是为什么如果您发送到设备组,其中一个令牌可能会收到NotRegistred
错误。:)
- 是否可以获取有关令牌的设备组/主题的信息
对于设备组消息(与#2相同),开发人员(您)必须自己管理这些详细信息。对于主题,可以使用InstanceID API。具体来说,将details
参数设置为true
:
[可选]布尔
details
:将此查询参数设置为true
,以获取可用的IID令牌详细信息,包括与此令牌关联的设备的连接信息和FCM或GCM主题订阅信息(如果有)。如果未指定,则默认为false
。
- 我可以多次向设备组添加令牌吗
Ahmm。对你是指相同的令牌吗?如果是的话,我还没有试过。在添加之前,不妨先在客户端进行一些检查。
- 我可以多次订阅主题的令牌吗
如果您的意思是重新订阅,那么是的。如果你的意思是重复请求订阅,我认为结果仍然是成功的。但行为没有变化。
- 同一令牌的多次订阅/添加会导致收到重复消息吗
对其进行了测试。您不会收到重复主题订阅和向设备组添加相同令牌的重复消息。如果FCM已经订阅/添加到设备组,那么它似乎会忽略订阅/添加注册令牌的请求。