「android アプリのガチ開 発者が mobile backend starter を使ってみた」

38
「Android アプリのガチ開 発者が Mobile Backend Starter を使ってみた」 あんざいゆき(@yanzm)

Upload: yuki-anzai

Post on 15-Jan-2015

7.327 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

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

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

あんざいゆき(@yanzm)

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

• blog : Y.A.M の雑記帳• y-anz-m.blogspot.com

• twitter : @yanzm (やんざむ)• Android女子部副部長• uPhyca Inc. (株式会社ウフィカ)

あんざいゆき

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

Mobile Backend Starter とは

Google Cloud Platform を使った Android 用のバックエンドをサーバー側のコードを書かずに構築できるサービス

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

Mobile Backend Starter とは

• サーバ側のコードを書かなくていい• Google App Engine を使っているのでスケーラビリティが高い

• 認証機能が組み込まれている• Google Cloud Messaging(GCM)機能が組み込まれている

• 継続クエリ

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

Mobile Backend Starter とは

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

• Deploy → App Engine に Mobile Backend がデプロイされる• http://mobile-**********.[Project ID].appspot.com = 設定• https://github.com/GoogleCloudPlatform/solutions-mobile-backend-starter-java

Google Cloud ConsoleDeploy

設定

Android 用のライブラリ兼サンプルアプリ

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

デモ

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

http://bit.ly/13Z09YP続きは私のブログにて

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

MBSの使い道

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

Android アプリ開発者にとっての MBS

• 簡単なのはわかった• 使い道は?• Google Cloud Messaging• データ永続化(?)• クラッシュログ収集• センサーデータ収集

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

Google Cloud Messaging とは

• Android デバイスに push 通知を送れる機能• GCMと略す• 小さいデータを送ることができる• サードパーティのサーバーが必要

Google Play サーバー

アプリ

device

Google Play アプリ

サードパーティサーバー

push

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

GCM の使い道

•同期のトリガー(GCM を受取ったらサーバーに新しいデータを取りに行く)

•チャット・SNS•お知らせ(配信)機能•アプリ状態の同期•位置情報の共有...

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

データの永続化

• オフライン対応必須 = デバイスの DB にもデータ保存

• BackupAgent というバックアップ機能が Android にすでにある

• 同期処理がめんどい(コンフリクトしたら...)• ゲストブック的なものでオフライン対応を捨てるならあり(?)

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

クラッシュログの収集

• すでにリリーズ済みのアプリに MBS を組み込む場合に一番ありうる

• Google Play にもクラッシュログ収集の機能があるが、ユーザーが送信ボタンを押さないといけない

• Google Analytics はクラッシュログは収集してくれない

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

センサーデータの収集

• ライフログ的な使い方• 多くのデバイスからデータを集めるような場合に向いている

• 定期的にスマホで写真とってアップするなど

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

アプリ内課金の検証に使えるか?

• サーバーに詳しくない個人アプリ開発者はけっこう困ってると思う(セキュリティ対策はコスパだからね)

• アプリの公開鍵をサーバー側に持たせる必要がある = サーバー側のコードをいじらないと無理

• クライアント・サーバー間でセキュアなハンドシェイクが必要

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

ゲームに使えるか?

• サーバー側のコードを変えられないので不可能• ユーザーデータの保持には Google Play Services のゲーム用機能が利用できる

• ゲーム系は悪意のあるユーザーを考慮しないといけないので難しい

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

MBS の使い道まとめ

• GCMによる通知•ログ収集•データ収集•ユーザー間のデータ共有(位置データなど)

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

MBS の Android Client Library

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

Android アプリ用の SDK やライブラリを作るときに押さえておきたいこと

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

サンプルアプリは必要?

•ぜひ作りましょう!•でもサンプルアプリとライブラリがバンドルしているのはよくない

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

サンプルアプリは必要?

• Android に依存しない部分 → jar• Android に依存する部分 → Library Project• http://developer.android.com/tools/projects/projects-eclipse.html

• サンプルアプリは jar や Library Project を利用する

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

ライブラリ作成時の注意点

• bin/ gen/ はリポジトリや zip に入れない• github が生成してくれる .gitignore には bin/ gen/ が含まれている

• Build path の設定に注意• リソース(Library Project)の扱いに注意• 画面回転に注意(ライブラリでメモリリークとかつらい!)

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

Build path の設定に注意

• project のインポート時に endpoint-libs が build path として認識されないことがある

• project 直下の src 以外にコードがあるとめんどいかも

[Java Build Path] の [Source] にendpoint-libs/libmobilebackend-v1/mobilebackend/mobilebackend-v1-generated-source を追加

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

Library Project とは

• 別のプロジェクトをそのままライブラリとして利用できる機能

• Library Project とアプリケーションで同じリソースIDのものがあるとどちらかが無視されるので、ライブラリ側はパッケージ名などで prefix をつける

• Action Bar Sherlock などが Library Project 形式のライブラリとして有名

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

Library Project とは

アプリ

library Project

jar Activity

Service

Receiverres

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

MBS の Android Client Library を改造してみた

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

サンプルアプリ

Library Project

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

GCMの register がうまく動かない...

GCM の register をしないようにしたら動いた

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

com.google.android.gcm は deprecated

• GCM は Google I/O 2013 で発表された Google Play Services に含まれるようになった

×

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

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]); } }}

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

<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>

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

まとめ

• サーバー側を書かずに GCM 使えるのは便利• 1分しないくらいで push が来る(10秒とか速い)

• 認証機能が組み込まれているのもありがたい

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

MBS へのお願い

• 簡単に GAE に移行したい = サーバー側のコードも少しいじりたい

• 画像アップロードのサンプルがほしい• Android 2.x でも使いたいなー(今は API Level 16以上)

• ぜひ Library Project にしてください• Google Play Services の GCM 使ってね

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

その他

• API とか GAE コンソールとか API Key とかが全部 Google Cloud Console から行けるようにまとまったのはとてもいい

• developers.google.com/cloud/ 以下のコンテンツが Google Cloud Console に対応してないのが残念!Google の人がんばって!

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

ありがとうございました