Androidの通知メッセージ(GCM)の受信に関して公式サイトから気になった部分をピックアップ.
一応公式サイトの文章を基に書いていますが、訳し間違ったり勘違いしてることもあるかもしれません.
間違いがあったら指摘してください.
GCM メッセージ受信の流れ
- アプリケーションサーバからGCMサーバへメッセージが送信
- デバイスがofflineならGCMサーバへ保存
- デバイスがonlineならGCMからデバイスへメッセージを送信
- システムはメッセージをIntent broadcastでアプリケーションに送信
- メッセージ受信時にアプリケーションは動いている必要はない
- アプリケーションがメッセージを処理する
GCM メッセージの基本的性質
- メッセージ長は最大4Kバイト
- デフォルトで4週間保存される
GCMのメッセージは以下のどちらかに分類される
- send-to-syncメッセージかmessage with payload
send-to-syncメッセージ
- サーバ上にあるデータをクライアント(デバイス上のアプリ)と同期させる目的に使われるメッセージ
- 同じデータに対する同期メッセージが複数ある場合は一つにまとめる(collapse, 折り畳む)ことができる
-> これをcollapsed message(折り畳みメッセージって訳されてますね)と呼ぶらしい
collapsed message (折り畳みメッセージ)
- メッセージのcollapse key属性に基づき、まとめることが可能なメッセージ
- 送信先のデバイスがオフラインの場合、collapese keyが同じ複数のメッセージはGCMサーバ上で?まとめらる(最新のメッセージのみが届けられる)
- GCMはデバイス毎に同時に最大で4つの異なるcollapse keyを処理できる
message with payload
- サーバ上のデータとの同期を目的とするメッセージではなく、データを送る事自体が目的なメッセージ
- collapse_keyを指定しない = message with paylod
- GCMは100個のメッセージまで保存可能(これはデバイス毎?)
- 配送順序は保証されていない
メッセージ配信不可能状態にあるデバイスへのメッセージの配信
- デバイスが利用不可能な状態(電源off, オフライン等)ではアプリケーションへのメッセージの配信はデバイスが利用可能な状態になるまで遅延される
- delay_while_idleフラグを使う事でデバイスがアクティブな状態になるまで送信されないように指定可能
- 逆に言うと指定しなければアクティブな状態でなくても送信される?
- アクティブな状態の定義って何?
参考URL
Google Cloud Messaging for Android - Android Developers
http://developer.android.com/google/gcm/index.html
Google Cloud Messaging for Android - ソフトウェア技術ドキュメントを勝手に翻訳
http://www.techdoctranslator.com/android/guide/google/gcm