はじめに
今携わっているプロダクトでABテストなどをできる仕組みを導入したくて、調査してみました。
Firebaseとは
Firebaseは、Googleが提供しているBasSサービスです。
リアルタイム通知可能、かつアクセス制御可能なオブジェクトデータベース機能に加え、認証機能やアプリケーションのログ解析機能などを利用することができます。
アカウント登録
Googleアカウントを持っていれば誰でも無料で利用することができます。
https://console.firebase.google.com/
環境
Android Studio 2.2 preview
導入
プロジェクトにアプリを登録する
1.https://console.firebase.google.com/ にアクセスし、プロジェクトの新規作成を行う。
4.必要な情報を追加し、アプリを追加する。
パッケージ名:
デバッグ署名証明書(SHA-1):keystoreから取得した値を指定する
※Authなどを利用する場合は必須です。
keytool -v -list -keystore [keystore名]
アプリにライブラリを導入する
Firebaseを利用するプロジェクトのbuild.gradle ファイルを修正します。
project/build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha3'
classpath 'com.google.gms:google-services:3.0.0'
}
}
project/app/build.gradle
android {
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha3'
testCompile 'junit:junit:4.12'
compile 'com.firebase:firebase-client-android:2.5.0'
compile 'com.google.firebase:firebase-core:9.0.2' ←analytics
compile 'com.google.firebase:firebase-crash:9.0.2' ←crash
compile 'com.google.firebase:firebase-config:9.0.2'←RemoteConfig
}
apply plugin: 'com.google.gms.google-services' ←最終行に記述してください。
2.各アプリケーションID用のgoogle-servie.jsonをapp配下におく必要がある。
Flavorを分ける場合、それぞれのディレクトリに配置してください
できること
auth
- Auth系のtoken取得/管理を行う機能
- Twitter/GitHub/Facebook/Googleログインに対応しているようです。
今回は使わないので割愛します。
http://qiita.com/yamacraft/items/f93defaff6a15389390c
Analitycs
- Firebase Analyticsはアプリケーションのログ解析に最適化された、いわばアプリ版のGoogle Analyticsです。
- iOS、Androidに対応しており、課金、アプリ削除イベントなどを自動で収集してくれる。
なお、個別にイベントを定義することもできます。
自動収集イベント
Firebase SDK を使用することで自動で収集されるイベントがいくつかあります。
以下のようなログについては、個別で定義する必要はなさそうです
・アプリ初回起動
・GooglePlay/AppStoreでの課金完了イベント
プロダクト ID、商品名、通貨、数量がパラメータとして渡されるようです。
・セッション
・アプリ削除
・Firebase Cloud Messagingで受信した通知からのアプリ起動
詳細については以下参照
https://support.google.com/firebase/answer/6317485
自動収集されるユーザープロパティ
カスタムイベント
Flurryとかのように柔軟にカスタムイベントを定義できますが、Analyticsのイベントで詳細を確認することができませんでした。BigQueryにデータを流して確認するしかなさそうですね。
定義されているイベントの送信
FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(this);
Bundle params = new Bundle();
params.putString(FirebaseAnalytics.Param.ITEM_ID, "10");
params.putString(FirebaseAnalytics.Param.ITEM_NAME, "name");
params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "text");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, params);
独自イベントの送信
FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(this);
Bundle params = new Bundle();
params.putString("screen_name", "Splash");
mFirebaseAnalytics.logEvent("screenView", params);
レポート
以下のように収集したイベントを確認することができます。
Remote Config
1.Firebase コンソール>「Remote Config」でパラメータの追加を行う。
<パラメータ>
パラメータは以下のようなものが設定できるようです。
string
boolean
long
double
2.パラメータに対して条件を追加する。
各項目に対して、この条件ならこの値を利用するように設定することも可能なので必要であれば設定してみてください。
今回は、アプリIDを指定してみました。
<条件設定>
・ユーザー(ランダム%)
・アプリID
・ユーザー層
・OSの種類
・端末の地域(国)
・端末の言語
用意されている条件は上記のようなものがありますが、所感としては、あまり汎用性がないので、設定値のみRemoteConfigにもたせてアプリ側でセグメントを区別したりすることになりそうです。
3.名前と適用する条件を追加して、条件を作成するボタンをタップすると以下のように条件が追加されるので
値を入力して更新ボタンをタップする。
4.公開ボタンをタップして公開する。
公開するとアプリ側で指定している時間毎に、設定したパラメータがアプリに反映されるようです。
その際のデフォルトファイルをアプリのres/xml/remote_config_default.xmlのように配置してあげることでデフォルト値をアプリが取り込むことができます。
制限事項
RemoteConconfigにはパラメータなどに制限があるようです。
パラメータ 2000個まで
パラメータキー 最大256文字
条件 100個まで
パラメータの値は合計50万文字まで
Crash
とくに設定など必要なく、gradleでライブラリを取り込むだけで利用できるようです。
サンプル
各機能のサンプルは以下にあります。
https://github.com/firebase/quickstart-android
所感
-
Analyticsはまだまだ微妙な感じなので現在GAを利用されているのであれば無理に移行しなくてもよさそうです。今後のアプデに期待です。
-
RemoteConfigはまだまだ汎用性はないですが、アプリでABテストを行ったり、事前に組み込んでおくことでアプデ無しに内容の更新などもできるので採用してみてもいい気がします。
個人的にはTagMannagerを利用してABテストを行うようりは使いやすかったです。 -
crashはcrashlyticsのようにissueをcloseすることはできませんが、crashlyticsを導入していないのであれば、無料だし、画面も見やすいので導入しても良いかもしれません。
-
導入自体は簡単なので既存使っているサービスと併用して導入してもいいんじゃないでしょうか。
参考
http://qiita.com/yamacraft/items/fd736203c29dfd3c7050
http://qiita.com/SnowMonkey/items/5b9019a936aa6762cf53