如何使用 Java GCM API 在 android 设备上获取失败推送通知的注册 ID
Posted
技术标签:
【中文标题】如何使用 Java GCM API 在 android 设备上获取失败推送通知的注册 ID【英文标题】:How to get registration id of failure push notification on android device using Java GCM API 【发布时间】:2017-09-18 10:49:19 【问题描述】:我使用 GCM API 在 Java 中实现了以下代码,以便在 android 设备上发送通知。
Sender sender = new Sender(GCM_API_KEY);
Message.Builder builder = new Message.Builder();
builder.collapseKey(collpaseKey);
builder.timeToLive(TTL_HOURS * 3600);
if (data != null)
for (PushData messageData : data)
builder.addData(messageData.getKey(), messageData.getValue());
if (StreamType.CALL == type)
for (PushData pushData : message)
builder.addData(pushData.getKey(), pushData.getValue());
Message msg = builder.build();
try
System.out.println(msg.toString());
MulticastResult result = sender.send(msg, pushId, MAX_RETRY);
log.infof("result %s", result.toString());
return true;
这里pushId是List的类型,里面包含了所有设备的push id,在那个时候,要发送通知。
问题是,结果不包含失败推送 ID 或任何设备标识,以便我可以识别哪个设备没有收到通知。 注意:- 我不想一一发送通知
响应 - 结果
MulticastResult(multicast_id=7588781423174816193,total=5,success=1,failure=4,canonical_ids=0,结果: [[错误代码=未注册],[ messageId=0:1505731620878025%f02bfbe47eeff668], [ 错误代码=未注册],[错误代码=未注册],[ errorCode=未注册]]
其中不包含任何注册 ID 或其他内容,以便我可以在 db 中识别设备。
请建议, 提前致谢。
【问题讨论】:
【参考方案1】:响应间接告诉您推送 ID 失败。
在你的例子中:
[[ errorCode=NotRegistered ],
[ messageId=0:1505731620878025%f02bfbe47eeff668 ],
[ errorCode=NotRegistered ],
[ errorCode=NotRegistered ],
[ errorCode=NotRegistered ]]
您可以看到第 1、3、4 和 5 次推送 ID 失败。由于您应该知道您在请求中发送推送 ID 的顺序,因此您应该知道哪些推送 ID 失败。
这是来自documentation 的相关示例:
以下是 6 个收件人(ID 4、8、15、16、23 和 42)的 JSON 结果 分别)成功处理了 3 条消息,1 条规范消息 注册令牌返回,3 个错误:
"multicast_id": 216, "success": 3, "failure": 3, "canonical_ids": 1, "results": [ "message_id": "1:0408" , “错误”:“不可用”, “错误”:“无效注册”, "message_id": "1:1516" , "message_id": "1:2342", "registration_id": "32" , “错误”:“未注册” ]
在这个例子中:
第一条消息:成功,不需要。 第二条消息:应该重新发送(到注册令牌 8)。 第三条消息:出现不可恢复的错误(可能数据库中的值已损坏)。 第四条消息:成功,不需要任何东西。 第五条消息:成功,但是注册令牌应该在服务器数据库中更新(从 23 到 32)。 第六条消息:注册令牌 (42) 应从服务器数据库中删除,因为应用程序已从 设备。
【讨论】:
以上是关于如何使用 Java GCM API 在 android 设备上获取失败推送通知的注册 ID的主要内容,如果未能解决你的问题,请参考以下文章
GCM 通知 setAutoCancel(true) 在 Android 5.1.1 中不起作用