読者です 読者をやめる 読者になる 読者になる

そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

"Google Cloud Messaging for Android"まとめ

Google I/O 2012にGoogle Cloud Messaging for Androidというセッションがあり、youtubeでも公開されています。


Google I/O 2012 - Google Cloud Messaging for Android

以下は、セッションの完全日本語訳ではなくて、私の感じた重要そうな点をピックアップしています。


Google Cloud Messaging(以降、GCM)はCloud To Messaging Device(C2MD)の後継です。GCMはバックエンドのサービスが、Androidアプリに対してメッセージを送るときの仕組みをクラウドサービスとして提供しています。


バックエンドのサービスはGCMにメッセージを送れば、GCMが各Androidデバイスのアプリにメッセージを届けてくれます。この仕組みは、バックエンドのサービスが情報の更新をAndroidデバイスに通知するような場合に適しています。各デバイスからバックエンドにポーリングするのは面倒だし、無駄な通信やバッテリーを使うことになりますからね。


最初、アプリはGCMに対して登録依頼を行うとGCMからレジストIDをもらえます。このレジストIDをバックエンドのサービスに知らせることで、アプリはバックエンドのサービスからメッセージを受け取れる状態になります。


アプリ側でバックエンドからGCM経由で送信されたメッセージを受け取るには、GCMBaseIntentServiceを実装したクラスでonMessageメソッドをオーバーライドします。


GCMはマルチキャストをサポートしていて、バックエンドのサービスは複数のデバイスのレジストIDを指定して一度のGCMへの通信で、複数のデバイスへメッセージを配信することができます。
私も気になったのですが、最後のQ&Aで質問があったとおり、ブロードキャスト、つまりレジストIDを指定せずに全部の端末にメッセージを送信することはサポートされていません
バックエンドの実装として、大量のデバイスにメッセージを送信する必要があった場合には、複数回に分けて配信するようなロジックにしておく必要がありそうです。


また、メッセージのサイズは4キロバイトが上限で、基本的には簡単なメッセージのやり取りか、イベントだけ通知して大きなデータはアプリからバックエンドのサービスに直接取りに来るような仕組みが推奨されています。


Googleの世界でのサービスなので、デバイス側に用意されるGCMフレームワークAndroidにしか対応していません。そのため、iOS版、Android版両方のアプリを提供しているアプリ提供者は、それぞれ別の仕組みを使うか、AppleGoogle以外のメッセージングのサービスを検討しないといけないですね・・・・。


参考情報
Googleが提供するGCMのドキュメントはここから行ける。Getting Startや、Architectureのページが含まれます。
http://developer.android.com/guide/google/gcm/index.html

Google API Console
https://code.google.com/apis/console/b/0/
プロジェクトを作ったり、GCMを有効にしたり、APIキーを取得するのはここからです。

バックエンド側でGCMとやり取りするためのライブラリが提供されています。以下、JavaDoc
http://developer.android.com/guide/google/gcm/server-javadoc/index.html