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