GCMのdemoを使ってみた(pushはHttpClient4を使ってローカルから実行) | ヘビィ・SMD!

ヘビィ・SMD!

そんな・・・バナナ!!
1. 甘え度+10 恐れ度+10 寿命-1週間
2. 甘え度+10 恐れ度-10
3. 甘え度-10 恐れ度-10 寿命+1週間

push通知。android端末のpush通知はC2DM。
アプリケーションの更新通知とかLINEの通知とか、ああいうところで利用されている。(という認識です)

仕事で作っているアプリにもこの機能は是非入れた方が良い!
と、導入を検討して使い方を見ようとしました。すると
ヘビィ・SMD!-gcm_01.png
C2DMはデプリケートされるから、新しいサービスGoogle Cloud Messaging (GCM) を今後使ってね!ということらしい。
ということで、GCMを使ってみることにした。

http://developer.android.com/intl/ja/guide/google/gcm/index.html
ヘビィ・SMD!-gcm_02.png
クラウドっぽく雲の画像。そのままですね。

Getting Startedをクリックすると
ヘビィ・SMD!-gcm_03.png
まずはプロジェクトを作れとのこと。
指示通りOpen the Google APIs Console page.に進む。
ヘビィ・SMD!-gcm_04.png
createしてやります。指示通り進めると
ヘビィ・SMD!-gcm_05.png
サービス一覧の画面。当然まだ何もしていないので全てが無効になっている。
「Google Cloud Messaging for Android」のoffをクリックすると
ヘビィ・SMD!-gcm_06.png
なにか聞かれるのでacceptします。自己責任でどうぞ。
ヘビィ・SMD!-gcm_07.png
「Google Cloud Messaging for Android」のトグルがonに切り替わりました。

GCMを利用するためには
- SENDER_ID
- API key
が必要とのこと。

SENDER_IDは、Google Apisの管理コンソールのURLで
「 https://code.google.com/apis/console/#project:1*********6 」のprojectの後の文字列のことらしいです。
そしてAPI keyは、左メニューの「API Access」で発行する必要があります。
「Create new Server key...」をクリックすると
ヘビィ・SMD!-gcm_08.png
IPの制限が出来るようですが何もせずにcreateでやってみます。
ヘビィ・SMD!-gcm_09.png
「Key for server apps (with IP locking)」が追加されました。
ここのAPI keyを利用します。

これで申請系は終わり。

次は実際にアプリを作ってみます。
と言っても、googleがデモアプリを用意してくれているのでこれを利用するだけです。

僕はいつもeclipseからSDK Managerを利用していますが、更新をほぼせずに使ってきていたため
「Google Cloud Messaging for Android Library」の項目が出てきませんでした。
とりあえずインストール可能なものをインストールし、「ヘルプ」->「更新の確認」からandroid関連のパッケージを更新したところ、上記項目が出てくるようになりました。

「Google Cloud Messaging for Android Library」をインストールすると
SDK_ROOT/extras/google/gcm
のディレクトリが作成されます。この中にgcmのjarや、demo用のソース一式などが詰まっています。
samples/gcm-demo-client 一式をeclipseで読み込むだけで動きます。

僕は「とりあえず最小で動くものをとりあえず動かしてみたい、とりあえずね。」のポリシーのもと、
このデモソースから色々と削り取ったソースをgistに上げておきました。
見たい方はこちらから -> https://gist.github.com/3793180

サードパーティのID登録/解除用URLに、gcm-demo-serverを使ってやればいいのでしょうが、面倒だったので超簡易的なjspを用意することにしました。
/** スクリプトが読み込めないためコード非表示 **/


サーバにregistration_idを送信し、そのID内容を把握できれば後はpushを利用するだけです。

これまたデモを使えばいいのに面倒な僕は、クライアントからデータ送信要求ができるツールを用意しました。
/** スクリプトが読み込めないためコード非表示 **/

なお、HttpClient4のjar群が必要になります。
あんまりHttpClient4のサンプルってないね。ちなみにこのコードはwikiのquickstart( http://wiki.apache.org/HttpComponents/QuickStart )を参考に作成しています。


このpost要求を作成するにあたり、 http://d.hatena.ne.jp/azukinohiroki/20120628/1340868610 を参考にさせて頂きました。
本当に助かりました。ありがとうございます。


最後に、使ってみます。
クライアントアプリを起動し、pushを起動すると。
ヘビィ・SMD!-gcm_ex_01.png ヘビィ・SMD!-gcm_ex_02.png
こんな感じ。
クライアントアプリを終了している場合は通知領域への通知のみとなります。

後半駆け足で書いちゃった。そのうち補足修正するかも。
以上。皆さんの参考になれば。