谷歌云消息推送未返回规范ID

3

我故意多次向GCM注册我的应用程序,以测试规范ID概念,但云没有将其返回给我。请参见下面的服务器日志,它是同一设备,我可以在Android日志中看到它接收了四条消息。但是我从Google那里没有得到任何规范化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 ]

文档(链接)表示:

规范ID

在服务器端,只要应用程序表现良好,一切都应该正常工作。但是,如果应用程序中的错误触发了多个注册相同设备的情况,则很难对状态进行调和,最终可能会导致重复的消息。

GCM提供了一个称为“规范注册ID”的功能,可轻松从这些情况中恢复。规范注册ID被定义为应用程序请求的最后一个注册ID。这是服务器在向设备发送消息时应使用的ID。

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


你能访问并发布响应的JSON对象吗? - lulalala
2个回答

0

当您解析来自GCM的结果时,必须手动检查它是否返回了canonicalId。

String canonicalRegId = result.getCanonicalRegistrationId();

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


我知道,但是 GCM 没有在 Result 对象中返回任何规范化的注册 ID。 - Thomas Vervik

0
根据Google文档

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

  • 如果存在一个规范化的ID,那么pgratton是正确的,您将需要解析结果并使用result.getCanonicalRegistrationId();来获取它。

  • 即使在推送后收到成功响应后,规范化ID也可能为空。在大多数情况下,它将为null,这意味着您推送的令牌是OK的,没有必要替换它。当令牌发生更改(例如,在Google刷新令牌的情况下),如果我们仍然使用旧令牌进行推送,则我猜您将在响应中收到规范化ID,您必须用其替换旧令牌。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接