「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」

9,371 views

Published on

Published in: Technology

「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」

  1. 1. 「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」 あんざいゆき(@yanzm)
  2. 2. • blog : Y.A.M の雑記帳 • y-anz-m.blogspot.com • twitter : @yanzm (やんざむ) • Android女子部副部長 • uPhyca Inc. (株式会社ウフィカ) あんざいゆき
  3. 3. Mobile Backend Starter とは Google Cloud Platform を使った Android 用のバックエンドをサーバー側 のコードを書かずに構築できるサービス
  4. 4. Mobile Backend Starter とは • サーバ側のコードを書かなくていい • Google App Engine を使っているのでスケー ラビリティが高い • 認証機能が組み込まれている • Google Cloud Messaging(GCM)機能が組み 込まれている • 継続クエリ
  5. 5. Mobile Backend Starter とは
  6. 6. • Deploy → App Engine に Mobile Backend がデプロイされる • http://mobile-**********.[Project ID].appspot.com = 設定 • https://github.com/GoogleCloudPlatform/solutions- mobile-backend-starter-java Google Cloud Console Deploy 設定 Android 用のライブラリ兼サンプルアプリ
  7. 7. デモ
  8. 8. http://bit.ly/13Z09YP 続きは私のブログにて
  9. 9. MBSの使い道
  10. 10. Android アプリ開発者にとっての MBS • 簡単なのはわかった • 使い道は? • Google Cloud Messaging • データ永続化(?) • クラッシュログ収集 • センサーデータ収集
  11. 11. Google Cloud Messaging とは • Android デバイスに push 通知を送れる機能 • GCMと略す • 小さいデータを送ることができる • サードパーティのサーバーが必要 Google Play サーバー アプリ device Google Play アプリ サードパーティ サーバー push
  12. 12. GCM の使い道 •同期のトリガー(GCM を受取ったら サーバーに新しいデータを取りに行く) •チャット・SNS •お知らせ(配信)機能 •アプリ状態の同期 •位置情報の共有...
  13. 13. データの永続化 • オフライン対応必須 = デバイスの DB にもデータ 保存 • BackupAgent というバックアップ機能が Android にすでにある • 同期処理がめんどい(コンフリクトしたら...) • ゲストブック的なものでオフライン対応を捨てる ならあり(?)
  14. 14. クラッシュログの収集 • すでにリリーズ済みのアプリに MBS を組み込む 場合に一番ありうる • Google Play にもクラッシュログ収集の機能があ るが、ユーザーが送信ボタンを押さないといけな い • Google Analytics はクラッシュログは収集してく れない
  15. 15. センサーデータの収集 • ライフログ的な使い方 • 多くのデバイスからデータを集めるような場合 に向いている • 定期的にスマホで写真とってアップするなど
  16. 16. アプリ内課金の検証に使えるか? • サーバーに詳しくない個人アプリ開発者はけっ こう困ってると思う(セキュリティ対策はコス パだからね) • アプリの公開鍵をサーバー側に持たせる必要が ある = サーバー側のコードをいじらないと無理 • クライアント・サーバー間でセキュアなハンド シェイクが必要
  17. 17. ゲームに使えるか? • サーバー側のコードを変えられないので不可能 • ユーザーデータの保持には Google Play Services のゲーム用機能が利用できる • ゲーム系は悪意のあるユーザーを考慮しないと いけないので難しい
  18. 18. MBS の使い道まとめ •GCMによる通知 •ログ収集 •データ収集 •ユーザー間のデータ共有(位置データな ど)
  19. 19. MBS の Android Client Library
  20. 20. Android アプリ用の SDK やライブラリ を作るときに押さえておきたいこと
  21. 21. サンプルアプリは必要? •ぜひ作りましょう! •でもサンプルアプリとライブラリがバン ドルしているのはよくない
  22. 22. サンプルアプリは必要? • Android に依存しない部分 → jar • Android に依存する部分 → Library Project • http://developer.android.com/tools/ projects/projects-eclipse.html • サンプルアプリは jar や Library Project を利 用する
  23. 23. ライブラリ作成時の注意点 • bin/ gen/ はリポジトリや zip に入れない • github が生成してくれる .gitignore には bin/ gen/ が含まれている • Build path の設定に注意 • リソース(Library Project)の扱いに注意 • 画面回転に注意(ライブラリでメモリリークと かつらい!)
  24. 24. Build path の設定に注意 • project のインポート時に endpoint-libs が build path として認識されないことがある • project 直下の src 以外にコードがあるとめんどいかも [Java Build Path] の [Source] にendpoint-libs/ libmobilebackend-v1/mobilebackend/mobilebackend- v1-generated-source を追加
  25. 25. Library Project とは • 別のプロジェクトをそのままライブラリとして 利用できる機能 • Library Project とアプリケーションで同じリ ソースIDのものがあるとどちらかが無視される ので、ライブラリ側はパッケージ名などで prefix をつける • Action Bar Sherlock などが Library Project 形式のライブラリとして有名
  26. 26. Library Project とは アプリ library Project jar Activity Service Receiver res
  27. 27. MBS の Android Client Library を 改造してみた
  28. 28. サンプルアプリ Library Project
  29. 29. GCMの register が うまく動かない... GCM の register をしないようにしたら動いた
  30. 30. com.google.android.gcm は deprecated • GCM は Google I/O 2013 で発表された Google Play Services に含まれる ようになった × ○
  31. 31. public class GCMReceiver extends BroadcastReceiver { private final static String GCM_KEY_SUBID = "subId"; private final static String GCM_TYPEID_QUERY = "query"; public static String getRegistrationId(Context context) { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); String registrationId = null; try { registrationId = gcm.register(Consts.PROJECT_NUMBER); } catch (IOException e) { e.printStackTrace(); } return registrationId; } @Override public void onReceive(Context context, Intent intent) { // decode subId in the message String subId = intent.getStringExtra(GCM_KEY_SUBID); Log.i(Consts.TAG, "onMessage: subId: " + subId); String[] tokens = subId.split(":"); String typeId = tokens[1]; // dispatch message if (GCM_TYPEID_QUERY.equals(typeId)) { CloudBackendAsync.handleQueryMessage(tokens[2]); }
  32. 32. <application android:allowBackup="false" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > ... <receiver android:name="com.google.cloud.backend.android.GCMReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.example.mbssample.permission.C2D_MESSAGE" /> <category android:name="com.example.mbssample" /> </intent-filter> </receiver> </application>
  33. 33. GCM 動いた (*´ω`*)
  34. 34. まとめ • サーバー側を書かずに GCM 使えるのは便利 • 1分しないくらいで push が来る(10秒とか速 い) • 認証機能が組み込まれているのもありがたい
  35. 35. MBS へのお願い • 簡単に GAE に移行したい = サーバー側のコード も少しいじりたい • 画像アップロードのサンプルがほしい • Android 2.x でも使いたいなー(今は API Level 16以上) • ぜひ Library Project にしてください • Google Play Services の GCM 使ってね
  36. 36. その他 • API とか GAE コンソールとか API Key とかが全 部 Google Cloud Console から行けるようにまと まったのはとてもいい • developers.google.com/cloud/ 以下のコンテン ツが Google Cloud Console に対応してないのが 残念!Google の人がんばって!
  37. 37. ありがとうございました

×