GCM: Getting Startedガイドの最後のセクションに続いて、結果を受け取った後にいくつかの簿記を行う必要があります。
ガイドからの引用:
結果を解析し、次の場合に適切なアクションを実行する必要があります。
- メッセージが作成されたが、結果として正規の登録 ID が返された場合は、現在の登録
ID を正規の登録 ID に置き換える必要があります。- 返されたエラーが NotRegistered の場合、アプリケーションがデバイスからアンインストールされているため、その登録 ID を削除する必要があります。
これら 2 つの条件を処理するコード スニペットを次に示します。
if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // same device has more than on registration ID: update database } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { // application has been removed from device - unregister database } }
上記のガイドは、マルチキャストの場合ではなく、単一の結果を参照しています。マルチキャスト ケースの処理方法がわかりません。
ArrayList<String> devices = new ArrayList<String>();
for (String d : relevantDevices) {
devices.add(d);
}
Sender sender = new Sender(myApiKey);
Message message = new Message.Builder().addData("hello", "world").build();
try {
MulticastResult result = sender.send(message, devices, 5);
for (Result r : result.getResults()) {
if (r.getMessageId() != null) {
String canonicalRegId = r.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// same device has more than on registration ID: update database
// BUT WHICH DEVICE IS IT?
}
} else {
String error = r.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
// application has been removed from device - unregister database
// BUT WHICH DEVICE IS IT?
}
}
}
} catch (IOException ex) {
Log.err(TAG, "sending message failed", ex);
}
デバイスのリストを送信すると、結果のリストが返されます。Result オブジェクトには登録 ID は含まれませんが、最初の ID が廃止された場合は正規 ID のみが含まれます。2 つのリストが相互に関連している場合 (つまり、順序とサイズが保持されている場合) は文書化されていません。
どの結果がどのデバイスを参照しているかを確認するにはどうすればよいですか?
- アップデート
以下の別の回答にソリューションのスニペットを貼り付けました