9

我正在尝试向某些 android 设备发送推送更新。他们中的一些人同时有了一个新的 id,所以我谷歌告诉我有规范的 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"]}"

谷歌的回应是:

{
  "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 和 id 处理)的帖子,为 Java 服务器解决了它,但我的不是(RoR)。

关于如何解决这个问题的任何想法?

4

1 回答 1

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#canonical和https://developer.android.com/google/gcm/gcm.html#response

于 2012-12-19T18:46:40.357 回答