夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Android C2DMってどーやって実現しているんだろ(その1

こんにちは。 

Androidでは2.2以降C2DM(Cloud to Device Messaging)という機能が追加されているんですが、
実際実現しているか気になったので調べてみよう、ということで
まずはC2DMの概観についてまとめてみました。

C2DMが何が新しいかというと、『サービスの提供形態』です。

これまでは、基本的にAndroidのサービスというのは
下記のようなPull型サービスでした。
K9Mailのようにいつの間にかメールを取得しているアプリであっても、
定期的に同期処理を行って実現しているため、Pull型に属します。

それが、C2DMだと下記のPush型サービスとなります。


これだけだとさらっと書けてしまえますね。
ただ、Push型サービスを実現するためには『サーバが端末を特定できる必要がある』という前提があります。

これまでサーバ側が端末を特定してどうこう、
というのはキャリア(ドコモ、auソフトバンク)しかできないことでした。
何故なら、端末特定は基地局を介してやっていたから。

基地局の構成などは当然キャリアごとに異なるため、
サーバ側から端末に対して能動的につなぎに行くというのはキャリアを通さなさなければ
出来なかったのではないか。。。と考えてます。


ちなみに、C2DMの登場人物は下の図にある3つです。
キャリアはからんできません。
Wi-FiタブレットであってもC2DMは使えるので、キャリアが絡んでこないのは確定だと考えています。


で、キャリアが絡まない以上、サーバから能動的に端末を特定することはできません。
そのため、下記の図のように、
『C2DMのサービスが起動中は端末からGoogle C2DMサーバに何かしらの手段でコネクションを張りっぱなしにしている』と推測されます。

それが何なのかはわかりませんがC2DMのサンプルアプリを動かして、関連のソース(AndroidOS側も含めて)を読むことで
実際の動作を見切るしかないなぁ、とは思ってます。


では、今回はここまで。
(このシリーズの)次回以降「JumpNote」「ChromeToPhone」辺りを確認して動かしてみますね。