2012-10-07 39 views
3

我有意将自己的应用程序多次注册到GCM以测试规范ID概念,但云不会将其返回给我。看到我的服务器日志下面,它是同一个设备,我可以在Android日志中看到它收到消息四次。但是我从来没有从谷歌的回报中得到一个规范的身份证,我误解了什么?Google Cloud Messaging不返回Canonical ID

[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)说:

规范标识

在服务器端,只要应用程序表现良好, 一切都应该正常工作。但是,如果应用程序 中的某个错误触发了同一设备的多个注册,则可能很难与 协调状态,并且最终可能会出现重复的消息。

GCM提供了一种称为“规范注册ID”的功能,可以很容易地从这些情况中恢复出 。规范注册ID被定义为 是您的应用程序请求的最后一次注册的ID。 这是服务器在将消息发送到 设备时应使用的ID。

如果稍后尝试使用不同的注册ID 发送消息,GCM将处理该请求和往常一样,但它包括将在 响应的registration_id领域 规范注册ID。请确保使用此规范ID替换存储在您的 服务器中的注册ID,因为最终您使用的ID将会停止工作。

+0

您可以访问和发布响应JSON对象吗? – lulalala

回答

0

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

String canonicalRegId = result.getCanonicalRegistrationId(); 

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

+0

Jepp,我知道,但GCM不会在Result对象中返回任何规范的注册ID给我 –

0

作为每Google docs

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

  • 如果有一个规范的ID目前,pgratton是正确的,你将不得不分析的结果,并使用result.getCanonicalRegistrationId得到它();

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

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