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

时间:2017-04-19 18:48:25

标签: android firebase firebase-cloud-messaging

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

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

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

我该怎么办?

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

另外,管理令牌刷新的情况有什么好办法?

1 个答案:

答案 0 :(得分:6)

  

我知道在每个成员取消注册后该组被删除但我不知道注册ID以手动取消注册。我该怎么办?

当您向设备组发送消息时,您会收到包含successfailure参数的回复。 “失败”的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()),那么要做的就是找到用户拥有的旧令牌并将其替换为新令牌,将更改应用到重要位置(这也是映射设备组)。

另请参阅我的回答herehere。一些细节可能会有所帮助。