Firebase - 在不知道其成员的注册ID的情况下删除设备组

MaX*_*MaX 6 android firebase firebase-cloud-messaging

在使用Firebase和设备组时,我正在测试令牌(注册ID)更改的情况(例如重新安装应用程序后)但我的逻辑失败,因为在重新安装应用程序后我无法知道以前存储的令牌.

问题是,现在我有一个设备组,其中有两个"ghost"注册ID,我不知道因为它们已经改变了.

我知道在每个成员都未注册后该组被删除但我不知道注册ID以手动取消注册.

我能做什么?

有没有办法检索设备组的成员或立即删除它?

此外,有什么方法可以管理令牌刷新的情况?

AL.*_*AL. 7

我知道在每个成员都未注册后该组被删除但我不知道注册ID是否手动取消注册.我能做什么?

当您向设备组发送消息时,您将收到包含a successfailure参数的响应.0`failure的值意味着我们在FCM服务器中正确排队的消息.

它有失败的消息,失败的注册令牌列表将在响应中,建议重试发送消息.参考文档:

将下游消息发送到设备组

将消息发送到设备组与将消息发送到单个设备非常相似.将to参数设置为设备组的唯一通知密钥.请参阅消息类型以获取有效负载支持的详 此页面中的示例显示如何将数据消息发送到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!",
   }
}
Run Code Online (Sandbox Code Playgroud)

HTTP响应

以下是"成功"的示例 - notification_key有2个与之关联的注册令牌,并且消息已成功发送给它们:

{
  "success": 2,
  "failure": 0
}
Run Code Online (Sandbox Code Playgroud)

这是一个"部分成功"的例子 - notification_key有3个与之相关的注册令牌.邮件已成功发送到其中一个注册令牌.响应消息列出了未能收到消息的注册令牌:

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}
Run Code Online (Sandbox Code Playgroud)

当消息未能传递给与a关联的一个或多个注册令牌时notification_key,应用服务器应重试之间的退避重试.

但是,在执行重试之前,您可以首先验证FCM令牌是否仍然有效(通过使用dry_run或Instance ID Server API).如果它显示设备不再有效(通常NotRegistered,您应该从设备组和App Server中删除该令牌(或将其移至垃圾日志或其他内容).

此外,有什么方法可以管理令牌刷新的情况?

如果令牌被刷新(通过onTokenRefresh()),那么要做的就是找到用户拥有的旧令牌并将其替换为新令牌,在重要的地方应用更改(这也是映射设备组).

另请在此处此处查看我的答案.一些细节可能会有所帮助.