9

一部の Android デバイスにプッシュ アップデートを送信しようとしています。それらのいくつかはその間に新しいIDを取得したため、Googleは正規のIDがあると教えてくれました。私が読んだドキュメントから:

message_id が設定されている場合は、registration_id を確認します。

  • registration_id が設定されている場合は、元の ID をサーバー データベースの新しい値 (正規 ID) に置き換えます。元の ID は結果の一部ではないため、リクエストで渡された registration_ids のリストから取得する必要があることに注意してください (同じインデックスを使用)。

一部が欠けていますか、それとも複数の登録 ID を Google に送信するとあいまいになりますか?

私のリクエスト(読みやすくするために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 が正しいことがわかりますが、どの元の id を 3 に置き換える必要がありますか? 登録されたすべての 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 を 3 の ID に更新する必要があります。つまり、登録リストは次のようになります。

[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 に答える