5/20(金)に行われたGotanda.mobile #1にて発表した内容+αになります。
概要:Firebaseとは何か
2年ほど前にGoogleが買収したMBaaSです。現在行われているGoogle I/O 2016にて、Analyticsなどの機能追加が発表されました。特にPush機能が無料かつ無制限利用可能ということでも話題になっている(と思って)います。
今回はその中からcrashとanalyticsの一部を実装してみたので、導入方法をまとめます。なんで話題のpush(notification)でないかというと、調べてまとめる時間がなかったからです。
導入
プロジェクトの新規作成
https://console.firebase.google.com/ にアクセスし、「CREATE NEW PROJECT」
をクリックしてプロジェクトの新規作成を行います。
今回は試していませんが、Google Developer Consoleで作成していたプロジェクトをインポートすることも可能なようです(多分GCMとかの移行用に使うのが正解なのかな)。
プロジェクトにアプリを登録する
当然ながら利用するアプリを登録しないと各種機能は使えません。「アプリの追加」から登録します。
証明書のSHA1入力に敷居を感じるところがありますが、今回はcrashとanalyticsだけなので入力は不要です(自分はちゃんと見ないで入力してしまいましたが、不要なはずです)。
アプリにライブラリを導入する
Google Play Serviceを共用している部分もあるらしく、Google Play Serviceを追加しつつライブラリを導入します。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
// これを追加します
classpath 'com.google.gms:google-services:3.0.0'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // これを追加
// ...
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.firebase:firebase-core:9.0.0' // analyticsを実装
compile 'com.google.firebase:firebase-crash:9.0.0' // crashを実装
}
Firebaseは使う機能ごとに追加するリポジトリが違います。公式ドキュメントの「Available libraries」を参考に、必要なリポジトリを追加しましょう。
https://firebase.google.com/docs/android/setup#add_the_sdk
実装
analyticsの実装
analyticsはFirebaseAnalytics
のインスタンスを作成し、そこにイベントの送信などを実装していきます。
現状、Google Analyticsにあるスクリーンやディメンション、指標らしきものを設定するものがありません(ユーザープロパティの設定はあります)。
なので細かい部分を見て行きたければ、まだGoogle Analyticsと併用が必要そうです。
public class MainActivity extends AppCompatActivity {
private FirebaseAnalytics mFirebaseAnalytics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
// ユーザープロパティの設定
mFirebaseAnalytics.setUserProperty("key", "value");
}
// ...
private void onButtonClick() {
// イベントの送信
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);
}
イベントはBundleを送信する形で行われています。パラメータ部分はある程度用意されていますが、これを完全に無視して独自の形で送信することも可能です。
private void onButtonClick() {
// イベントの送信
Bundle params = new Bundle();
params.putString("text_name", "logevent2");
params.putString("text_data", "Hello Firebase Analytics");
mFirebaseAnalytics.logEvent("send_text", params);
}
analyticsの反映はGA同様、半日〜翌日ぐらいかかる印象です。
各イベント名をクリックすることで、設定した値がみれるようなのですが、まだ 独自形式で送ったデータの詳細が見ることができません (ただの勘違いかもしれませんが)。
※ コンテンツ部分。先ほどのソースで言うと send_text
イベントはこちらが表示されなかったため、text_data
にどんなデータが入っているのかを確認することはできませんでした。
crashの実装
ライブラリを実装した時点で対応完了です。 なのでソース上では特になにもする必要はありません。
ちなみにクラッシュが発生したタイミングで、レポート送信用のServiceを作ってデータを送る動作のようです。
またCrashlytics同様、独自にクラッシュレポートを送信したり、ログ情報をスタックすることもできます。
// ログ情報のセット(送信ではない)
FirebaseCrash.log("Start Crash2");
// クラッシュレポートを送信する
FirebaseCrash.report(new Exception("Android non-fatal error"));
consoleへの反映は、1時間弱ほどかかりました。
consoleのcrash情報画面です。
FirebaseCrash.report()
で送ったデータは「非致命的」として表示されています。
各クラッシュ情報の詳細です。正直Crashlyticsより見やすいですね。(端末情報もこっちの方が多いかな)。
まとめ
というわけでFirebaseでさっと導入できるanalyticsとcrashの紹介でした。
analyticsはまだ本格運用するには、取得できる情報が微妙かなっていう印象があります。
crashは現時点でも十分導入の敷居に対するメリットが強そうです。
とはいえ、どちらも他サービスを切り捨てるほどの力は正直感じないので(Crashlyticsでissueをcloseできるのは地味に便利ですし)、いったんは既存のサービスと併用運用しつつ、今後の利用方法を決めていくのが正解な気がしています。
導入コスト自体はとても軽い印象だったので、とりあえず入れてみてもいいじゃないでしょうか。