GCM のサンプルを動かしたメモ

■GCM を使うための事前準備

  • GoogleAPI コンソールでプロジェクトに GCM API を使用する設定 このとき、プロジェクトキーAPIキーがわかる。あとで使うので控えておく

■GCM サーバ(Google)を使う

  • <GCM 初期処理>

    • GCMライブラリの登録処理を呼び出す、このときさきほどのプロジェクトキーが必要
    • GCMサーバで登録IDが発行され、Android アプリに通知される
    • 登録IDサードパーティーサーバ(こちらのサーバ)に送信して DB などに永続保存しておく
      (この登録IDGoogleサーバによって定期的にリフレッシュされるので再度呼び出されるように設計しておく!)
  • <GCM 送信処理>

    • APIキー登録IDを以て送信先端末を指定して、PUSH 通知を行う 1,000 程度までなら一斉送信可能?要検証

■GCM で気をつけておくこと

  • セキュリティ的な懸念は、登録IDが定期的にリフレッシュされる、ということろが Google が想定している一つの回避方法?(セッションのリフレッシュのような)

  • プロジェクトキーAndroid アプリの逆コンパイルでハックされるが、それだけでは勝手にPUSH 通知はできない。APIキーもあわせて必要。APIキーを知り得るためには、Google アカウントでログインが必要。

  • サードパーティーAPPサーバで簡単にブロードキャストしまくる API を作るとダメ
    悪意をもった第三者が API を呼ぶだけで PUSH 通知されてしまう

  • ロジック的には、Android アプリとサードパーティーAPPサーバでの登録IDの同期がちゃんととれるかが設計のキモ

  • サンプルを動かしてソースをみると単純なのですぐわかる。SDK Manager マネージャから Extras > Google Cloud Messaging for Android Library をインストール。次のようなパスにサンプルコードがあるので、設定だけ変更するとすぐ動作する。

      /Users/user/sdks/adt-bundle-mac/sdk/extras/google/gcm/samples/gcm-demo-appengine
      /Users/user/sdks/adt-bundle-mac/sdk/extras/google/gcm/samples/gcm-demo-client
      /Users/user/sdks/adt-bundle-mac/sdk/extras/google/gcm/samples/gcm-demo-server
    

    gcm-demo-appengine は GAE でのサンプルっぽい。まだためしていないけどそんな難しくはないと思う。

    gcm-demo-serverサーブレット。オンメモリなのでサーバ停止したりすると GCM にはデバイス登録しているのにこっちのサーバにはデバイス登録していない状態とかなって、Androidアプリとサードパーティーサーバの間でデータの同期がとれていない状態とかなっちゃうので注意。

    gcm-demo-clientAndroidアプリ。すごくシンプル。

■参考サイトとか

1. GCM をはじめよう - ソフトウェア技術ドキュメントを勝手に翻訳

2. GCM アーキテクチャの概要 - ソフトウェア技術ドキュメントを勝手に翻訳

3. GCM デモ アプリケーション - ソフトウェア技術ドキュメントを勝手に翻訳

4. GCM 上級者向けトピックス - ソフトウェア技術ドキュメントを勝手に翻訳

5. C2DM から GCM へのマイグレーション - ソフトウェア技術ドキュメントを勝手に翻訳