我知道在每个成员注销后该组就会被删除,但我不知道手动注销它们的注册 ID。我能做些什么?
当您向设备组发送消息时,您将收到包含以下内容的响应:success
and failure
参数。0
`failure 的值意味着我们在 FCM 服务器中正确排队的消息。
如果有失败的消息,失败的注册令牌列表将出现在响应中,其中建议重试发送消息。参考docs https://firebase.google.com/docs/cloud-messaging/android/device-group#sending_downstream_messages_to_device_groups:
向设备组发送下游消息
向设备组发送消息与向单个设备发送消息非常相似。将 to 参数设置为设备组的唯一通知键。看消息类型 https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages有关负载支持的详细信息。本页中的示例显示如何使用 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 个与之关联的注册令牌。该消息已成功发送至仅 1 个注册令牌。响应消息列出了未能接收消息的注册令牌:
{
"success":1,
"failure":2,
"failed_registration_ids":[
"regId1",
"regId2"
]
}
当消息无法传递到与某个关联的一个或多个注册令牌时notification_key
,应用程序服务器应在重试之间进行退避重试。
但是,在执行重试之前,您可以先验证 FCM 令牌是否仍然有效 https://stackoverflow.com/q/41552610/4625829(通过使用dry_run
或实例 ID 服务器 API)。如果显示该设备不再有效(通常NotRegistered https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes,然后您应该从设备组和应用程序服务器中删除该令牌(或将其移至垃圾箱日志或其他位置)。
另外,管理令牌刷新情况的好方法是什么?
如果令牌被刷新(通过onTokenRefresh()
),要做的事情是找到用户拥有的旧令牌并将其替换为新令牌,在重要的地方应用更改(这也是映射设备组)。
另请参阅我的回答here https://stackoverflow.com/a/42522002/4625829 and here https://stackoverflow.com/a/42248240/4625829。一些细节可能会有所帮助。