旧的或新的注册ID都不是规范的

时间:2015-08-26 13:10:29

标签: android google-cloud-messaging

我在旧版本的数据库1中有两个注册ID,它使用gcm.register(),而新版本使用instanceID.getToken

我向两个属于同一设备的注册ID发送了一个幽灵通知。这就是我得到的。 旧注册ID(使用gcm.register生成应用更新之前)

{
"multicast_id": 0000000,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
    {
    "message_id": "0:1f9fd7ecd"
    }]
}

新注册ID(应用更新后,使用instanceID.getToken生成):

{
"multicast_id": 0000000,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
    {
    "message_id": "0:8ccf9fd7ecd"
    }]
}

如何删除或更新旧的注册ID? 请帮忙!现在,由于这个原因,我无法发送通知。因为它会发送双重/重复通知。

编辑(2015-09-19): Google已承认此问题,并正在努力解决此问题。 https://github.com/google/gcm/issues/94

2 个答案:

答案 0 :(得分:0)

您没有收到任何规范ID ...相反,您只收到了唯一的 message_id

  

如果您尝试使用旧的注册令牌发送消息,GCM将照常处理请求,但它将在响应的registration_id字段中包含规范ID。确保使用此规范ID替换存储在服务器中的注册令牌,因为最终旧注册令牌将停止工作。

来自:https://developers.google.com/cloud-messaging/registration#canonical-ids

canonical_ids 字段表示结果中规范ID的数量。结果数组包含指示每个 registration_id 的对象,如果出现错误,则使用可选的规范ID 来显示消息ID。

您只需在相应的结果中更新注册ID,即包含 registration_id 字段(这是规范ID)。结果与请求中的 registration_ids 的顺序相同。这就是您如何将结果映射到请求的注册ID。

请查看此文档示例,例如:

{ "multicast_id": 216,
  "success": 3,
  "failure": 3,
  "canonical_ids": 1,
  "results": [
    { "message_id": "1:0408" },
    { "error": "Unavailable" },
    { "error": "InvalidRegistration" },
    { "message_id": "1:1516" },
    { "message_id": "1:2342", "registration_id": "32" },
    { "error": "NotRegistered"}
  ]
}

来自:https://developers.google.com/cloud-messaging/http#example-responses

答案 1 :(得分:0)

这是gcm中的一个错误,现已修复。

现在,如果我向旧gcm id发送通知,它会将新的注册ID作为canoncial id返回。

来源:https://github.com/google/gcm/issues/94