Google Cloud Messaging不会返回Canonical ID

时间:2012-10-07 23:11:30

标签: google-cloud-messaging

我故意将我的应用程序多次注册到GCM以测试规范ID概念,但云并没有将它返回给我。请参阅下面的我的服务器日志,它是相同的设备,我可以在Android日志中看到它收到消息四次。但我从来没有得到谷歌的典型身份,我误解了什么?

[INFO  com.bipper.filters.PushUpdatesFilter] method: POST  childId: 13  has pending updates: true  url: /mybipperapi/do/parents/1/children/13/usagelimits

[INFO  com.bipper.services.gcm.GcmSenderService] registrationId: APA91bHQIWguRXvpVrg7Xh1nOsUqqbephClS9KkuuFf0eg3fkfgjkmvi1o-0WaSwWWdWwqXw9e3X80OsZwdINr1ufBjEXQJ5om48lL6q8bH3Vrlaf5U11FbyzQdVvzGy-3QBqahc_nMh9FeiL2sBzU0KPGG3y9xtYg

[INFO  com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679774901%d3cfcce76e2555b5 ]


[INFO  com.bipper.services.gcm.GcmSenderService] registrationId: APA91bE9Vl_qijVdpFTqlJXA2OHyaF2cjKaCi8ZvNrD5r2woNs_TSuJgVuxn7RIF3pef6vdtd2MMV1TrWnusbGPXy4uWT4KJBhuAoAYgCjbXJduv-oz13_xICIKYOZTAFH2OpuC8E1Hw65KN6N4QukxG0W4Zor8jSg

[INFO  com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679857971%d3cfcce76e2555b5 ]


[INFO  com.bipper.services.gcm.GcmSenderService] registrationId: APA91bEzQag9HBPbrR0wtaSuR3HA5NV795ZuDzxwQJVnQfc2r1lDv0gUXxc6GikUJDWMiUSge-b0BS1Tz2yIr8flpBqmAdpgQnatvP19PVm9zd8PopE51T-NJkfqqX65oPfKkx93Os7qS8_-IokjbyNIOK5FDCsrAQ

[INFO  com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679940798%d3cfcce76e2555b5 ]


[INFO  com.bipper.services.gcm.GcmSenderService] registrationId: APA91bG_nVU-8VM9JSbTlxjAuseJ4LZG75BOoP5kd85garpcW698w4uwGWCy3dkUt3pXiXWhAV-KLPuEr-vw4_yARwjma2U46KXjmEoBwkTaVNi9t5M4sKRtqaKGZTcsaoa_Ng4EenVw41QFTi2At75946WR3Qu7jQ

[INFO  com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650680044947%d3cfcce76e2555b5 ]

[WARN  com.bipper.filters.PushUpdatesFilter] results has size 4, this is fishy

[INFO  com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679774901%d3cfcce76e2555b5 ]
[INFO  com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679857971%d3cfcce76e2555b5 ]
[INFO  com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679940798%d3cfcce76e2555b5 ]
[INFO  com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650680044947%d3cfcce76e2555b5 ]

文档(link)说:

  

Canonical ID

     

在服务器端,只要应用程序运行良好,   一切都应该正常工作。但是,如果应用程序中存在错误   触发同一设备的多次注册,可能很难   协调状态,你可能会得到重复的消息。

     

GCM可以轻松提供名为“规范注册ID”的工具   从这些情况中恢复。定义了规范注册ID   是您的申请所要求的最后一次注册的ID。   这是服务器在向邮件发送邮件时应使用的ID   设备

     

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

2 个答案:

答案 0 :(得分:0)

从GCM解析结果时,您必须手动检查它是否返回canonicalId。

String canonicalRegId = result.getCanonicalRegistrationId();

然后,您必须确保使用此新ID来推送设备。

答案 1 :(得分:0)

根据Google docs

  

当纯文本请求成功(HTTP状态代码200)时,   响应体包含键或值对形式的1或2行。   第一行始终可用,其内容为id = ID   发送消息或错误= GCM错误代码。第二行,如果有的话,   具有registration_id =规范ID的格式。 第二行(包含规范ID)是   可选,只有在第一行不是错误时才能发送。

  • 如果存在规范ID,pgratton是正确的,您将需要解析结果并使用 result.getCanonicalRegistrationId();

  • 获取结果
  • 即使在推送后收到成功响应,规范ID也可以为null。在大多数情况下,它将为null,这意味着您推送的令牌是正常的,无需替换它。当令牌发生变化时(例如,在Google刷新令牌的情况下),如果我们仍然使用我们的旧令牌,我猜您会在您的回复中收到规范ID,您必须在其中替换旧令牌

  • 如果您的推送也返回了失败响应,则规范ID将不会出现在响应中。