在使用Firebase和设备组时,我正在测试令牌(注册ID)更改的情况(例如重新安装应用程序后)但我的逻辑失败,因为重新安装应用程序后我无法知道以前存储的令牌。
问题是,现在我有一个设备组,其中包含两个"ghost"
注册ID,我不知道因为它们已经更改了。
我知道在每个成员取消注册后该组被删除但我不知道注册ID以手动取消注册。
我该怎么办?
有没有办法检索设备组的成员或立即删除它?
另外,管理令牌刷新的情况有什么好办法?
答案 0 :(得分:6)
我知道在每个成员取消注册后该组被删除但我不知道注册ID以手动取消注册。我该怎么办?
当您向设备组发送消息时,您会收到包含success
和failure
参数的回复。 “失败”的0
值意味着我们在FCM服务器中正确排队的邮件。
有失败的消息,失败的注册令牌列表将出现在响应中,其中建议是重试发送消息。参考docs:
将下游消息发送到设备组
向设备组发送消息与向单个设备发送消息非常相似。将to参数设置为设备组的唯一通知密钥。有关有效负载支持的详细信息,请参阅Message types。此页面中的示例显示如何将数据消息发送到HTTP和XMPP协议中的设备组。
HTTP POST请求
https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to": "aUniqueKey", "data": { "hello": "This is a Firebase Cloud Messaging Device Group Message!", } }
HTTP响应
以下是"成功的示例" -
notification_key
有2个与之关联的注册令牌,并且消息已成功发送给他们两个:{ "success": 2, "failure": 0 }
以下是"部分成功的例子" -
notification_key
有3个与之关联的注册令牌。邮件已成功发送到其中一个注册令牌。响应消息列出了未能收到消息的注册令牌:{ "success":1, "failure":2, "failed_registration_ids":[ "regId1", "regId2" ] }
如果邮件无法传递给与
notification_key
关联的一个或多个注册令牌,则应用服务器应重试,并在重试之间退回。
但是,在执行重试之前,您可以先verify if the FCM token is still valid(使用dry_run
或Instance ID Server API)。如果它显示设备不再有效(通常是NotRegistered
,则应该从设备组和App Server中删除该令牌(或将其移至垃圾日志或其他内容)。
此外,有什么方法可以管理令牌刷新的情况?
如果令牌被刷新(通过onTokenRefresh()
),那么要做的就是找到用户拥有的旧令牌并将其替换为新令牌,将更改应用到重要位置(这也是映射设备组)。