2013年4月26日金曜日

GCMで「Canonical Registration ID」を出すには?

Google Cloud Messaging(以下GCM)で「Canonical Registration ID」(以下canonicalRegId)を出すにはどうしたらいいのか?

ドキュメントによると、「アプリケーションのアップデート」や「バックアップとリストア」などにより、GCMサーバーに同じデバイスで複数のRegistration ID(以下regId)が割り振られる場合があり、その場合にcanonicalRegIdが出るようなんだけど・・・

原文:GCM Advanced Topics | Android Developers

訳文:4. GCM 上級者向けトピックス - ソフトウェア技術ドキュメントを勝手に翻訳

「バックアップとリストア」というのはOSのことだろうと思うので簡単に試すことはできない。

一方、開発中に「アプリケーションのアップデート」は何度もしているが、regIdが変わったことはない。アプリをアンインストールして再インストールした時もregIdが変わったことはない。

じゃあ、いつ変わるのか?

アプリでGCMRegistrar.unregister()した後、GCMRegistrar.register()するとregIdが変わる。

その後、コンテンツサーバー側で次のようにするとcanonicalRegIdが取れる。

Result result = sender.send(message, regId, 5);
String canonicalRegId = result.getCanonicalRegistrationId();

琴線探査: GCMで「Canonical Registration ID」が取れるようになったら古い「Registration ID」は即無効になるのか?