Google I/Oのプレゼン動画から、
Google Cloud Messaging(GCM)の特徴や
C2DMとの主な違いを挙げてみた。
C2DM時代は・・・
- 開発者が利用するにはフォームの入力が必要でアクティベーションのメールを受信するという流れ
- Sender Auth Tokenの取得にClient Loginを使用
- 一日あたり20万メッセージまでというクオータの制限があった
GCMでは・・・
GCMでも変わらないこと
- 無料のサービス
- Froyo以上で稼働
- メッセージ受信にRegistration IDが必要
- メッセージがデバイスへ届くまでの基本的な流れ(Client Application Server→GCM Server→Android Device)
GCMで変わったこと
- Project IDが必要
Sender IDの代わり。Google APIs Consoleでプロジェクトを追加した時に取得。
- API Keyが必要
Sender Auth Tokenの代わり。Google APIs Consoleのプロジェクト管理画面で取得。
- GCM Serverがjson形式のデータにも対応。json形式でリクエストを受け付けたりレスポンスを返したりするようになった。
GCMで追加・改善された機能
1.Message Multicasting
メッセージを複数デバイスへ一斉送信できるようになった。最大1,000台まで。
2.Expiring Messages
メッセージを再送する期間を指定できるようになった。
「time_to_live」パラメータにメッセージが有効な期間を秒単位で設定。0秒から4週間(デフォルト)まで指定可能。0秒の時はGCM Serverにメッセージは保存されずに直ちにデバイスへ送られる。この時デバイスがオフラインだったらメッセージは捨てられる。
指定した値をオーバーした段階でGCM Serverはメッセージをクリーンアップする。
3.Messages with Payload
メッセージにデータを含められるようになった。1メッセージあたり最大4KBまで。主に、チャットなどの簡単なテキスト送信に利用できる。
オフライン時間が長くてメッセージがたくさん溜まってしまっていたら、オンラインへ復帰した時に、GCM Serverは全てのメッセージを削除して「たくさんメッセージが溜まっていますよ」という1メッセージだけをデバイスへ送る。削除されたメッセージ数はGCM Serverからのレスポンスに含まれている。
デバイスがオフライン時にGCM Serverへ保存しておけるのは、最大100メッセージまで。
4.Speed
メッセージ送信がめっちゃ速くなった。GCM Serverへリクエストが届いてからメッセージを送り出すまで4.7ミリ秒。
5.Multiple Senders for Social Updates
1つのAndroid Applicationで複数のプロジェクトのメッセージを受け取れるようになった。自社サービスのメッセージも、Google Plusなどソーシャルサービスなどのメッセージも。ソーシャルサービスのProject IDをどうやって取得するのか、そのフローがよくわからない(´・ω・`)。
最大100個までのProject IDが指定可能。
補足1:GCMの信頼性はいかほど?
Reliable Message Queue(RMQ)の働き
RMQは、GCM Serverとデバイス側のGCM Frameworkとの間で動作するもの。メッセージが確実にデバイスへ届いたのかチェックする。
例えば、GCM Serverがメッセージを送った時、デバイスの接続が切れてしまい、メッセージが届かなかったとしても、接続が復帰してデバイスがGCM Serverへアクセスした際に、メッセージが届いていないことをRMQが探知する。そして、GCM Serverはメッセージを再送する。
ACKを送り合う事で到達の確認をしている。いちいちではなく、ある程度のまとまりでACKを送っている。
このような仕組で信頼性が高いシステムになっているのがGCMの強み。GCMはメッセージを無くさない( ̄^ ̄)
補足2:Android Developer ConsoleでGCM Serverが処理したメッセージの統計が見られるようになった
そのアプリでGCMへ登録された数や、OSバージョンなどの端末情報、メッセージが送られた数やCollapseされた数、GCM Serverからのエラーメッセージなどが見られる。
補足3:ICS以上からGoogle Accountをデバイスへ登録する必要が無くなった
ICS以上から、デバイスへGoogle Accountを事前登録する事無くプッシュサービスが使えるようになったとな。本当かな?こんど検証してみようっと。
おまけ:デバイスからメッセージを送れるようになる?
その機能を含んだAPIはあるけれど開発者向けには公開していない、と。それが出来るようになると、またパラダイムが変わりそう。期待したい。
超おまけ:スピーカーのFrancescoがキュートやわ〜(*^_^*)