【问题标题】:android GCM get original id of canonical idandroid GCM获取规范ID的原始ID
【发布时间】:2012-12-19 17:44:17
【问题描述】:

我正在尝试向某些 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 是正确的,但我应该将哪些原始 id 替换为 3?为每个注册的 id 发送每条消息将是一种浪费。我在 Stackoverflow (GCM and id handling) 上阅读了一篇文章,为 Java 服务器解决了这个问题,但我的不是 (RoR)。

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

【问题讨论】:

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


    【解决方案1】:

    正如您链接到的帖子中所述,这完全基于响应列表中的位置。因此,当您获得规范 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

    【讨论】:

    • 啊,我没有考虑只包含“message_id”的条目,所以我正在考虑对我的 6 条目请求进行 4 条目响应。你的第一个列表为我做了。谢谢。
    • 第一次发送前如何过滤正确的“registration_id”?否则,在第一种情况下,服务器仍然发送三个重复的消息,并且只有在收到服务器响应后才会清除重复消息。
    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多