android GCM获取规范id的原始id

时间:2012-12-19 17:44:17

标签: android push-notification google-cloud-messaging

我正在尝试向某些Android设备发送推送更新。他们中的一些人同时拥有一个新的身份证,所以我谷歌告诉我有规范的ID。从我阅读的文档:

如果设置了message_id,请检查registration_id:

  • 如果设置了registration_id,请将原始ID替换为服务器数据库中的新值(规范ID)。请注意,原始ID不是结果的一部分,因此您需要从请求中传递的registration_ids列表中获取它(使用相同的索引)。

我是否错过了某个部分,或者如果您向Google发送超过1个注册ID,这是否含糊不清?

我的请求(替换ID以提高可读性):

"{"data":{"favorite":1},"registration_ids":["1","2","3","4","5","6"]}"

Google的回复是:

{
  "multicast_id":7917175795873320166,
  "success":6,
  "failure":0,
  "canonical_ids":4,
  "results":[
    {"registration_id":"3","message_id":"m1"},
    {"message_id":"m1"},
    {"message_id":"m1"},
    {"registration_id":"3","message_id":"m1"},
    {"registration_id":"3","message_id":"m1"},
    {"registration_id":"3","message_id":"m1"}
 ]
}

据此,我知道id 3是正确的,但是我应该用3替换哪些原始id?为每个注册的ID发送每条消息都是浪费。我已经在Stackoverflow(GCM and id handling)上阅读了一篇文章,为Java服务器解决了这个问题,但我的不是(RoR)。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:15)

如您链接的帖子中所述,它全部基于响应列表中的位置。因此,当您获得规范ID时,您需要在“发送列表”的相同位置更新原始注册ID。

所以在你的例子中,结果中有4个是规范的(0,3,4,5):

[0] {"registration_id":"3","message_id":"m1"},
[1] {"message_id":"m1"},
[2] {"message_id":"m1"},
[3] {"registration_id":"3","message_id":"m1"},
[4] {"registration_id":"3","message_id":"m1"},
[5] {"registration_id":"3","message_id":"m1"}

这是你的“发送清单”:

[0] "1",
[1] "2",
[2] "3",
[3] "4",
[4] "5",
[5] "6"

根据结果,您需要将位置0,3,4,5中的注册ID更新为ID 3.这意味着您将获得如下注册列表:

[0] "3",
[1] "2",
[2] "3",
[3] "3",
[4] "3",
[5] "3"

最后:

[0] "3",
[1] "2",

另请参阅:https://developer.android.com/google/gcm/adv.html#canonicalhttps://developer.android.com/google/gcm/gcm.html#response