Facebook と GCM を使用するアプリを作成しています。ユーザーは複数のデバイスでアプリを使用でき、友人は Facebook ID を使用して GCM メッセージを送信できます。
私のサーバーには、facebook id を gcm id にマップするテーブルがあります。このテーブルでは facebook ID が一意である必要がないため、メッセージを複数のデバイスに送信できます。
ドキュメントでは、メッセージを送信するときにエラーを処理する次の方法を示しています。
if (result.getMessageId() != null) {
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
//CASE 1
// same device has more than on registration ID: update database
}
} else {
String error = result.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
// CASE 2
// application has been removed from device - unregister database
}
}
ではCASE 1
、登録 ID を正規の登録 ID に置き換えるように指示されています。しかし、どの登録 ID を置き換えるかをどのように知ることができますか? 受信機に 2 つのデバイスがあり、選択できる登録 ID が 2 つありますが、どちらを選択すればよいかわかりません。
ではCASE 2
、同じ問題が発生します。データベースから削除する登録 ID を知るにはどうすればよいですか?
EDIT
明確にするために、これは私が現在使用しているコードです:
List<String> gcmIds = getGCMIds(c, fbId);
if (gcmIds != null && !gcmIds.isEmpty()) {
Sender sender = new Sender(Params.GOOGLE_API_KEY);
Message message = new Message.Builder().addData("message", apiMessage.buildJSONString()).build();
MulticastResult result = sender.send(message, gcmIds, 5);
List<Result> results = result.getResults();
/* Do something with the results */
success = result.getFailure() == 0;
} else {
success = false;
}