如何使用Java GCM API在Android设备上获取失败推送通知的注册ID

时间:2017-09-18 10:49:20

标签: java android google-cloud-messaging

我使用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的类型,它包含所有设备的推送ID,在此处发送通知。

问题是,结果不包含故障推送ID或任何设备标识,以便我可以识别哪个设备未收到通知。 注意: - 我不想逐个发送通知

回应 - 结果

  

MulticastResult(multicast_id = 7588781423174816193,总= 5,成功= 1,失败= 4,canonical_ids = 0,结果:   [[errorCode = NotRegistered],[   messageId = 0:1505731620878025%f02bfbe47eeff668],[   errorCode = NotRegistered],[errorCode = NotRegistered],[   errorCode = NotRegistered]]

,它不包含任何注册ID或其他内容,以便我可以在db中识别设备。

请建议, 在此先感谢。

1 个答案:

答案 0 :(得分:0)

响应告诉你推送ID失败。

在你的例子中:

[[ errorCode=NotRegistered ], 
 [ messageId=0:1505731620878025%f02bfbe47eeff668 ], 
 [ errorCode=NotRegistered ],
 [ errorCode=NotRegistered ], 
 [ errorCode=NotRegistered ]]

您可以看到第1,第3,第4和第5个推送ID失败。由于您应该知道在请求中发送了推送ID的顺序,因此您应该知道哪些推送ID失败。

以下是documentation

的相关示例
  

以下是6位收件人的JSON结果(ID 4,8,15,16,23和42)   分别)成功处理3条消息,1条规范   返回了注册令牌,还有3个错误:

     

{“multicast_id”:216,“成功”:3,“失败”:3,“canonical_ids”:1,“结果”:[
      {“message_id”:“1:0408”},
      {“error”:“Unavailable”},
      {“error”:“InvalidRegistration”},
      {“message_id”:“1:1516”},
      {“message_id”:“1:2342”,“registration_id”:“32”},
      {“error”:“NotRegistered”}]}

     

在这个例子中:

     
      
  • 第一条消息:成功,不是必需的。
  •   
  • 第二条消息:应重新发送(注册令牌8)。
  •   
  • 第三条消息:有一个不可恢复的错误(可能是数据库中的值已损坏)。
  •   
  • 第四条信息:成功,没有必要。
  •   
  • 第五条消息:成功,但应在服务器数据库中更新注册令牌(从23到32)。
  •   
  • 第六条消息:应从服务器数据库中删除注册令牌(42),因为该应用程序已从中卸载   设备
  •