雲から機器へ伝達させる為の枠組み

2,604 views

Published on

C2DMの超ザックリとした説明です。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,604
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

雲から機器へ伝達させる為の枠組み

  1. 1. 雲から機器へ伝達させる為の枠組み 日本 Android の会 大分支部 第 4 回勉強会 2010 年 8 月 28 日 本田 克己
  2. 2. Google I/Oで紹介されてたやつ
  3. 3. Cloud To Device Messagingって? <ul><li>長すぎるから「C2DM」って略されています
  4. 4. APPサーバからアプリケーションに軽量メッセージを送信できます
  5. 5. サーバからアプリケーションにメッセージが届く順番は保障されません
  6. 6. メッセージを受け取る為にアプリケーションを起動させておく必要はありません
  7. 7. Android2.2以降でマーケットアプリケーションが使える端末が必要です
  8. 8. まだリリースされていません </li></ul>
  9. 9. C2DMの登場人物 Sender ID Application ID Registration ID Google User Account Sender Auth Token なんだか色々あります・・・
  10. 10. 利用開始時の動作 <ul><li>C2DMを有効にする </li><ul><li>アプリケーション初回起動時に送信元IDを指定して、C2DMサーバに登録する
  11. 11. 登録が成功するとC2DMサーバから登録IDが返ってくるので保存しておく
  12. 12. アプリケーションは登録IDを、アプリケーションサーバに伝える。アプリケーションサーバは登録IDを保存しておく。
  13. 13. サービスによって登録IDをユーザや端末と関連付けられるようにしておく </li></ul></ul>
  14. 14. メッセージの流れ <ul><li>メッセージを送る </li><ul><li>APPサーバがC2DMサーバにメッセージを送る
  15. 15. 端末がオンラインだったら、端末にメッセージを送る
  16. 16. 端末がオフラインだったらオンラインになるまでメッセージを保管しておく
  17. 17. 端末にメッセージが届いたらインテントをブロードキャストする
  18. 18. アプリケーションがメッセージを読んで何かする </li></ul></ul>
  19. 19. C2DMのステキなところ <ul><li>ポーリングしなくてよくなります </li><ul><li>端末に早く情報を伝達することができる
  20. 20. バッテリーが長持ちするかも
  21. 21. 無駄なトラフィックが減って世界が平和になるかも </li></ul><li>オフラインになっても安心 </li><ul><li>C2DMサーバが保管しておいてくれます
  22. 22. (でも有効期間はあるはずだよね・・・) </li></ul></ul>
  23. 23. C2DMのはじめかた <ul><li>Googleのアカウントを用意
  24. 24. サインアップ
  25. 25. Androidアプリケーションを作る
  26. 26. サーバアプリケーションを作る </li></ul>
  27. 27. Googleのアカウントを用意 持っていない人はいないはず (Android持っていたら)
  28. 28. サインアップ 現在、C2DMを使用するアプリケーションを作成するためには、サインアップを行う必要があります。 http://code.google.com/android/c2dm/signup.html 「Role account email」がSender IDになるので、普段使用するメールアドレスとは別のものを用意した方がいいかもしれません。
  29. 29. クライアントアプリを作る <ul><li>Manifestファイルをイジる </li></ul><permission android:name=&quot;com.example.myapp.permission.C2D_MESSAGE&quot; android:protectionLevel=&quot;signature&quot; /> <uses-permission android:name=&quot;com.example.myapp.permission.C2D_MESSAGE&quot; /> <uses-permission android:name=&quot;com.google.android.c2dm.permission.RECEIVE&quot; /> <uses-permission android:name=&quot;android.permission.INTERNET&quot; /> <receiver android:name=&quot;.C2DMReceiver&quot; android:permission=&quot;com.google.android.c2dm.permission.SEND&quot;> <intent-filter> <action android:name=&quot;com.google.android.c2dm.intent.RECEIVE&quot; /> <category android:name=&quot;com.example.myapp&quot; /> </intent-filter> <intent-filter> <action android:name=&quot;com.google.android.c2dm.intent.REGISTRATION&quot; /> <category android:name=&quot;com.example.myapp&quot; /> </intent-filter> </receiver>
  30. 30. クライアントアプリを作る <ul><li>C2DMサーバへの登録 </li></ul>Intent registrationIntent = new Intent(&quot;com.google.android.c2dm.intent.REGISTER&quot;); registrationIntent.putExtra(&quot;app&quot;, PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate registrationIntent.putExtra(&quot;sender&quot;, emailOfSender); startService(registrationIntent);
  31. 31. クライアントアプリを作る <ul><li>C2DMへの登録結果を受け取る </li></ul><ul>ブロードキャストレシーバで、登録結果を受け取ります。 </ul>public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(&quot;com.google.android.c2dm.intent.REGISTRATION&quot;)) { handleRegistration(context, intent); } else if (intent.getAction().equals(&quot;com.google.android.c2dm.intent.RECEIVE&quot;)) { handleMessage(context, intent); } } private void handleRegistration(Context context, Intent intent) { String registration = intent.getStringExtra(&quot;registration_id&quot;); if (intent.getStringExtra(&quot;error&quot;) != null) { // エラー時 } else if (intent.getStringExtra(&quot;unregistered&quot;) != null) { // 登録解除 } else if (registration != null) { //  APP サーバへ登録 } }
  32. 32. クライアントアプリを作る <ul><li>メッセージを受け取る </li></ul>public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(&quot;com.google.android.c2dm.intent.REGISTRATION&quot;)) { handleRegistration(context, intent); } else if (intent.getAction().equals(&quot;com.google.android.c2dm.intent.RECEIVE&quot;)) { handleMessage(context, intent); } } private void handleMessage(Context context, Intent intent) {   // インテントからデータを取り出せます intent.getStringExtra( &quot;payload&quot; );
  33. 33. サーバアプリケーションを作る すみません、作っていません
  34. 34. サーバアプリケーションを作る <ul><li>作る必要のある機能 </li><ul><li>端末から送られたRegistrationIDの登録、削除
  35. 35. C2DMサーバにメッセージを送る
  36. 36. メッセージを送る時には認証トークンが必要
  37. 37. (認証トークンって有効期限ある?) </li></ul></ul>
  38. 38. 作ってないからcurlで確認 <ul><li>認証トークンを取得 </li></ul>curl https://www.google.com/accounts/ClientLogin -d Email=” メールアドレス ” -d “Passwd= パスワード &quot; -d accountType=HOSTED_OR_GOOGLE -d source= qox-c2dm-001 -d service=ac2dm -k
  39. 39. 作ってないからcurlで確認 <ul><li>メッセージを送信 </li></ul>curl --header &quot;Authorization: GoogleLogin auth= 認証トークン &quot; &quot;https://android.apis.google.com/c2dm/send&quot; -d registration_id=” 登録 ID ” -d &quot;data. payload= データ &quot; -d collapse_key=something -k
  40. 40. 以上 グダグダですみません

×