我正在尝试向某些Android设备发送推送更新。他们中的一些人同时拥有一个新的身份证,所以我谷歌告诉我有规范的ID。从我阅读的文档:
如果设置了message_id,请检查registration_id:
我是否错过了某个部分,或者如果您向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)。
有关如何解决此问题的任何想法?
答案 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#canonical和https://developer.android.com/google/gcm/gcm.html#response