狠狠撸

狠狠撸Share a Scribd company logo
12/14/12


      プッシュを何に使う?GCMを試してみた。
                   (Google Cloud Messaging for Android)




                              2012年12月16日

                            つるつる(都留 栄一)
日本Androidの会 大分支部 第16回Android勉強会                              Page1
12/14/12

       どっちが、プル?プッシュ?

              サーバ                     サーバ




     Android端末のアプリ                Android端末のアプリ



日本Androidの会 大分支部 第16回Android勉強会                   Page2
12/14/12

       GCMとは? 6つの特徴
  ■その1 GCMのサービス提供者はGoogleさん

     Google Labsでお試し提供されていたプッシュサービスのC2DMが、今年の初
     夏ごろ正式なGoogle APIsサービスへ昇格した様です。

  ■その2 すべてGoogleさんがやってくれる訳ではない

     GCM対応の端末アプリと任意の端末へメッセージ内容を決める部分は、自前
     でWebサーバや処理ソフト等を作る必要があります。

  ■その3 メッセージ配達のお仕事はGoogleさん

     どこかに居る端末へメッセージを配達するお仕事は、Googleさんのお仕事範
     疇です。(いろいろ届けてくれる、黒い猫の様に???)


日本Androidの会 大分支部 第16回Android勉強会               Page3
12/14/12




  ■その4 勝手に再配達してくれます

     メッセージ送信時に端末が圏外や電源OFF等でも、GCM側にメッセージを保
     持してくれ、端末アプリ側から再送要求不要で端末が通信可能になると黙って
     ても再送してくれます。

  ■その5 無駄に飯を食いません

     端末側アプリでは、メッセージ受信をポーリングする必要が無いです。結果的
     に、無駄に飯(電池エネルギー)を食わずです。

  ■その6 一度にたくさん送信出来る様です

     GCMからは一度に1000端末までマルチキャストできる。らしいです。
    (試してないので解りませんが。)

日本Androidの会 大分支部 第16回Android勉強会               Page4
12/14/12

        ところで、今日のゴールは???。

   ?Androidで扱えるプッシュ(GCM)に、
    “何かしら興味を持って貰えること。“

  昨年の第12回勉強会で、C2DMを扱った資料は、スライドシェアで絶賛公開中!!です。
  第12回資料と合わせて確認すると、より解りやすいカモ?
  『C2DM 都留』で検索


  ■C2DMのスライドシェア
  http://www.slideshare.net/tsuru_ee/c2-dm?from=share_email



日本Androidの会 大分支部 第16回Android勉強会                                   Page5
12/14/12

       小まとめ C2DMとGCMの比較

                                     C2DM     GCM
    対応OS                           2.2以上     2.2以上
    新規利用登録                          できない      できる
    使用料                              無料       無料
    送信数の制限                            有        無
    メッセージサイズ                      1Kバイトまで   4Kバイトまで
    メッセージ再送期間                      できない?     指定できる
    一括送信                           できない?      できる




日本Androidの会 大分支部 第16回Android勉強会                           Page6
12/14/12

       仕組みの話を少々???。
  構成要素は、おおざっぱに4つです。


                                      GCM
                                    (Google提供)




                                  クラウド (インターネット)




     Android端末アプリ                                  送信サーバ
           (自分で準備)                                 (自分で準備)




日本Androidの会 大分支部 第16回Android勉強会                                  Page7
クラウドを通して行われる、                                            12/14/12

       メッセージお届けまでの流れ。①~⑤
      ⑤メッセージお届け(”ほげ”)


                                         GCM
                                       (Google提供)

             ①登録リクエスト
                                                     ④任意のタイミングで
                                                     ID+投げるメッセージ
                                                     (例:A123+”ほげ”)
                                  ②端末とアプリがヒモつ
                                    いたID付与
                                  (例:A123)
     Android端末アプリ                                   送信サーバ
           (自分で準備)                                  (自分で準備)

                                  ③取得IDを知らせる
                                  (例:A123)

日本Androidの会 大分支部 第16回Android勉強会                                      Page8
12/14/12

       各要素の働きを おおまかにマトメると。
                                    GCM             ?端末+アプリ特定IDの管理
                                  (Google提供)        ?メッセージ送受信処理




                                          ?GoogleAPIs利用時のProjectNumber保持

    ?端末登録リクエスト処理                          ?端末(アプリ特定)IDの保持

    ?メッセージ受信後の処理                          ?GCMサーバへPOSTリクエスト実行



     Android端末アプリ                                   送信サーバ
           (自分で準備)                                    (自分で準備)




        以上の要点だけ解ればOKでは?
日本Androidの会 大分支部 第16回Android勉強会                                        Page9
12/14/12

       多少の下準備が必要です。
GoogleAPIs上でGCMを使う為の登録が必要です。

        GoogleAPIsの使い方も奥深そうです。。。

        Gmailのアドレスが必要だった気がします。




  https://code.google.com/apis/console/
日本Androidの会 大分支部 第16回Android勉強会              Page10
12/14/12

       以前作ったデモアプリ変更点1


  まず、以前作ったC2DMの
   デモアプリをGCMへと
     移行させます。
     アプリ側の変更ですが??
日本Androidの会 大分支部 第16回Android勉強会      Page11
12/14/12

        なんと、移行はたった1行のみ!
@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // ①のGCMへ端末登録リクエストを行う部分
    registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
    registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
   //registrationIntent.putExtra(“sender”, “tsuru.ee@gmail.com”); // DEL C2DM作法
   registrationIntent.putExtra("sender", “123456789012");            // ADD GCM作法


   ※GCMでは、Google APIs Consoleに付与された開発者のsender IDを指定する。




 移行は簡単!アプリ側の対応完了!
日本Androidの会 大分支部 第16回Android勉強会                                                                    Page12
12/14/12

       以前作ったC2DMからの変更2

        残るは自前サーバ側、
    これは少しハマりました。
                        (試行錯誤)

日本Androidの会 大分支部 第16回Android勉強会      Page13
12/14/12

  ハマった所1
Googleへのリクエスト先が違ってた。
<C2DMの時>
   http://android.apis.google.com/c2d
   m/send
<GCMの時>
   http://android.googleapis.com/
   gcm/send"
日本Androidの会 大分支部 第16回Android勉強会        Page14
12/14/12

  ハマった所2
GCMサーバの認証方法が違ってた。
<C2DMの時>
GoogleClientLogin認証トークンが必要

<GCMの時>
Google APIs Console上で、API Key
   の取得が必要だった。
日本Androidの会 大分支部 第16回Android勉強会      Page15
12/14/12

  ハマった所3
GCMサーバへの送信フォーマットがよ
 くわからず。。。
調べながら、トライ&エラーでクリアし
 たとです。。。
以下の様な感じで送ると、GCMサーバが上手く受け付けてくれました。。。。

curl --header "Authorization: key=API KEYの値"
   "http://android.googleapis.com/gcm/send" -d registration_id="端末識別ID" -d
   "data.testdata=送信したいお好みの内容" -d collapse_key=something -k

※curlを使って送った例です。

日本Androidの会 大分支部 第16回Android勉強会
12/14/12

       ちょっとデモしてみます。
      ⑤メッセージお届け(”ほげ”)


                                         GCM
                                       (Google提供)

             ①登録リクエスト
                                                       ④任意のタイミングで
                                                       ID+投げるメッセージ
                                                       (例:A123+”ほげ”)
                                  ②端末とアプリがヒモつ
                                    いたID付与
                                  (例:A123)
     Android端末アプリ                                    送信サーバ
       (作成したお試しアプリ)                                 (ノートパソコンです。)

                                  ③取得IDを知らせる
                                  (例:A123)

日本Androidの会 大分支部 第16回Android勉強会
12/14/12

       こんな事やあんな事に???
 ? タクシーに乗車した年齢、性別、行先に応じた広
    告を車内に配信とか。。。
 ? 特売情報を端末に送りに振動&表示とか。。。
 ? 幼稚園バスがもうすぐ来るのを地図アプリ連動し
    て自動起動させるとか。。。
 ? カメラ機能と連動させ勝手に撮影するとか。(汗
 ?地震発生後に端末の位置情報を勝手に送信させ
  るとか。。。(GPSオフだと無理かな。)

日本Androidの会 大分支部 第16回Android勉強会      Page18
12/14/12

       おわりに
アイデア次第で、GCMの機能アプリに
 組み込んで、何かおもしろい仕組み
 やサービスに橋渡しできなでしょうか。
肝心のアイデアがね~。


ご静聴ありがとう御座いました。
日本Androidの会 大分支部 第16回Android勉強会

More Related Content

骋肠尘を试してみた。

  • 1. 12/14/12 プッシュを何に使う?GCMを試してみた。 (Google Cloud Messaging for Android) 2012年12月16日 つるつる(都留 栄一) 日本Androidの会 大分支部 第16回Android勉強会 Page1
  • 2. 12/14/12 どっちが、プル?プッシュ? サーバ サーバ Android端末のアプリ Android端末のアプリ 日本Androidの会 大分支部 第16回Android勉強会 Page2
  • 3. 12/14/12 GCMとは? 6つの特徴 ■その1 GCMのサービス提供者はGoogleさん Google Labsでお試し提供されていたプッシュサービスのC2DMが、今年の初 夏ごろ正式なGoogle APIsサービスへ昇格した様です。 ■その2 すべてGoogleさんがやってくれる訳ではない GCM対応の端末アプリと任意の端末へメッセージ内容を決める部分は、自前 でWebサーバや処理ソフト等を作る必要があります。 ■その3 メッセージ配達のお仕事はGoogleさん どこかに居る端末へメッセージを配達するお仕事は、Googleさんのお仕事範 疇です。(いろいろ届けてくれる、黒い猫の様に???) 日本Androidの会 大分支部 第16回Android勉強会 Page3
  • 4. 12/14/12 ■その4 勝手に再配達してくれます メッセージ送信時に端末が圏外や電源OFF等でも、GCM側にメッセージを保 持してくれ、端末アプリ側から再送要求不要で端末が通信可能になると黙って ても再送してくれます。 ■その5 無駄に飯を食いません 端末側アプリでは、メッセージ受信をポーリングする必要が無いです。結果的 に、無駄に飯(電池エネルギー)を食わずです。 ■その6 一度にたくさん送信出来る様です GCMからは一度に1000端末までマルチキャストできる。らしいです。 (試してないので解りませんが。) 日本Androidの会 大分支部 第16回Android勉強会 Page4
  • 5. 12/14/12 ところで、今日のゴールは???。 ?Androidで扱えるプッシュ(GCM)に、 “何かしら興味を持って貰えること。“ 昨年の第12回勉強会で、C2DMを扱った資料は、スライドシェアで絶賛公開中!!です。 第12回資料と合わせて確認すると、より解りやすいカモ? 『C2DM 都留』で検索 ■C2DMのスライドシェア http://www.slideshare.net/tsuru_ee/c2-dm?from=share_email 日本Androidの会 大分支部 第16回Android勉強会 Page5
  • 6. 12/14/12 小まとめ C2DMとGCMの比較 C2DM GCM 対応OS 2.2以上 2.2以上 新規利用登録 できない できる 使用料 無料 無料 送信数の制限 有 無 メッセージサイズ 1Kバイトまで 4Kバイトまで メッセージ再送期間 できない? 指定できる 一括送信 できない? できる 日本Androidの会 大分支部 第16回Android勉強会 Page6
  • 7. 12/14/12 仕組みの話を少々???。 構成要素は、おおざっぱに4つです。 GCM (Google提供) クラウド (インターネット) Android端末アプリ 送信サーバ (自分で準備) (自分で準備) 日本Androidの会 大分支部 第16回Android勉強会 Page7
  • 8. クラウドを通して行われる、 12/14/12 メッセージお届けまでの流れ。①~⑤ ⑤メッセージお届け(”ほげ”) GCM (Google提供) ①登録リクエスト ④任意のタイミングで ID+投げるメッセージ (例:A123+”ほげ”) ②端末とアプリがヒモつ いたID付与 (例:A123) Android端末アプリ 送信サーバ (自分で準備) (自分で準備) ③取得IDを知らせる (例:A123) 日本Androidの会 大分支部 第16回Android勉強会 Page8
  • 9. 12/14/12 各要素の働きを おおまかにマトメると。 GCM ?端末+アプリ特定IDの管理 (Google提供) ?メッセージ送受信処理 ?GoogleAPIs利用時のProjectNumber保持 ?端末登録リクエスト処理 ?端末(アプリ特定)IDの保持 ?メッセージ受信後の処理 ?GCMサーバへPOSTリクエスト実行 Android端末アプリ 送信サーバ (自分で準備) (自分で準備) 以上の要点だけ解ればOKでは? 日本Androidの会 大分支部 第16回Android勉強会 Page9
  • 10. 12/14/12 多少の下準備が必要です。 GoogleAPIs上でGCMを使う為の登録が必要です。 GoogleAPIsの使い方も奥深そうです。。。 Gmailのアドレスが必要だった気がします。 https://code.google.com/apis/console/ 日本Androidの会 大分支部 第16回Android勉強会 Page10
  • 11. 12/14/12 以前作ったデモアプリ変更点1 まず、以前作ったC2DMの デモアプリをGCMへと 移行させます。 アプリ側の変更ですが?? 日本Androidの会 大分支部 第16回Android勉強会 Page11
  • 12. 12/14/12 なんと、移行はたった1行のみ! @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ①のGCMへ端末登録リクエストを行う部分 registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER"); registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); //registrationIntent.putExtra(“sender”, “tsuru.ee@gmail.com”); // DEL C2DM作法 registrationIntent.putExtra("sender", “123456789012"); // ADD GCM作法 ※GCMでは、Google APIs Consoleに付与された開発者のsender IDを指定する。 移行は簡単!アプリ側の対応完了! 日本Androidの会 大分支部 第16回Android勉強会 Page12
  • 13. 12/14/12 以前作ったC2DMからの変更2 残るは自前サーバ側、 これは少しハマりました。 (試行錯誤) 日本Androidの会 大分支部 第16回Android勉強会 Page13
  • 14. 12/14/12 ハマった所1 Googleへのリクエスト先が違ってた。 <C2DMの時> http://android.apis.google.com/c2d m/send <GCMの時> http://android.googleapis.com/ gcm/send" 日本Androidの会 大分支部 第16回Android勉強会 Page14
  • 15. 12/14/12 ハマった所2 GCMサーバの認証方法が違ってた。 <C2DMの時> GoogleClientLogin認証トークンが必要 <GCMの時> Google APIs Console上で、API Key の取得が必要だった。 日本Androidの会 大分支部 第16回Android勉強会 Page15
  • 16. 12/14/12 ハマった所3 GCMサーバへの送信フォーマットがよ くわからず。。。 調べながら、トライ&エラーでクリアし たとです。。。 以下の様な感じで送ると、GCMサーバが上手く受け付けてくれました。。。。 curl --header "Authorization: key=API KEYの値" "http://android.googleapis.com/gcm/send" -d registration_id="端末識別ID" -d "data.testdata=送信したいお好みの内容" -d collapse_key=something -k ※curlを使って送った例です。 日本Androidの会 大分支部 第16回Android勉強会
  • 17. 12/14/12 ちょっとデモしてみます。 ⑤メッセージお届け(”ほげ”) GCM (Google提供) ①登録リクエスト ④任意のタイミングで ID+投げるメッセージ (例:A123+”ほげ”) ②端末とアプリがヒモつ いたID付与 (例:A123) Android端末アプリ 送信サーバ (作成したお試しアプリ) (ノートパソコンです。) ③取得IDを知らせる (例:A123) 日本Androidの会 大分支部 第16回Android勉強会
  • 18. 12/14/12 こんな事やあんな事に??? ? タクシーに乗車した年齢、性別、行先に応じた広 告を車内に配信とか。。。 ? 特売情報を端末に送りに振動&表示とか。。。 ? 幼稚園バスがもうすぐ来るのを地図アプリ連動し て自動起動させるとか。。。 ? カメラ機能と連動させ勝手に撮影するとか。(汗 ?地震発生後に端末の位置情報を勝手に送信させ るとか。。。(GPSオフだと無理かな。) 日本Androidの会 大分支部 第16回Android勉強会 Page18
  • 19. 12/14/12 おわりに アイデア次第で、GCMの機能アプリに 組み込んで、何かおもしろい仕組み やサービスに橋渡しできなでしょうか。 肝心のアイデアがね~。 ご静聴ありがとう御座いました。 日本Androidの会 大分支部 第16回Android勉強会