Android
Firebase

FirebaseのcrashとanalyticsをAndroidアプリで試してみる

More than 1 year has passed since last update.

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とかの移行用に使うのが正解なのかな)。

スクリーンショット 2016-05-19 11.46.26.png


プロジェクトにアプリを登録する

当然ながら利用するアプリを登録しないと各種機能は使えません。「アプリの追加」から登録します。

スクリーンショット 2016-05-19 11.49.25.png

証明書のSHA1入力に敷居を感じるところがありますが、今回はcrashとanalyticsだけなので入力は不要です(自分はちゃんと見ないで入力してしまいましたが、不要なはずです)。


アプリにライブラリを導入する

Google Play Serviceを共用している部分もあるらしく、Google Play Serviceを追加しつつライブラリを導入します。


(project)/build.gradle

buildscript {

repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'

// これを追加します
classpath 'com.google.gms:google-services:3.0.0'
}
}



(project)/(app)/build.gradle

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と併用が必要そうです。


MainActivity.java

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を送信する形で行われています。パラメータ部分はある程度用意されていますが、これを完全に無視して独自の形で送信することも可能です。


MainActivity.java

    private void onButtonClick() {

// イベントの送信
Bundle params = new Bundle();
params.putString("text_name", "logevent2");
params.putString("text_data", "Hello Firebase Analytics");
mFirebaseAnalytics.logEvent("send_text", params);
}

スクリーンショット 2016-05-20 15.56.52.png

analyticsの反映はGA同様、半日〜翌日ぐらいかかる印象です。

各イベント名をクリックすることで、設定した値がみれるようなのですが、まだ 独自形式で送ったデータの詳細が見ることができません (ただの勘違いかもしれませんが)。

スクリーンショット 2016-05-20 16.01.53.png

※ コンテンツ部分。先ほどのソースで言うと send_text イベントはこちらが表示されなかったため、text_data にどんなデータが入っているのかを確認することはできませんでした。


crashの実装

ライブラリを実装した時点で対応完了です。 なのでソース上では特になにもする必要はありません。

ちなみにクラッシュが発生したタイミングで、レポート送信用のServiceを作ってデータを送る動作のようです。

スクリーンショット 2016-05-19 18.13.54.png

またCrashlytics同様、独自にクラッシュレポートを送信したり、ログ情報をスタックすることもできます。


MainActvity.java


// ログ情報のセット(送信ではない)
FirebaseCrash.log("Start Crash2");

// クラッシュレポートを送信する
FirebaseCrash.report(new Exception("Android non-fatal error"));


consoleへの反映は、1時間弱ほどかかりました。

スクリーンショット 2016-05-20 16.12.58.png

consoleのcrash情報画面です。

FirebaseCrash.report() で送ったデータは「非致命的」として表示されています。

スクリーンショット 2016-05-20 16.14.24.png

スクリーンショット 2016-05-20 16.14.34.png

各クラッシュ情報の詳細です。正直Crashlyticsより見やすいですね。(端末情報もこっちの方が多いかな)。


まとめ

というわけでFirebaseでさっと導入できるanalyticsとcrashの紹介でした。

analyticsはまだ本格運用するには、取得できる情報が微妙かなっていう印象があります。

crashは現時点でも十分導入の敷居に対するメリットが強そうです。

とはいえ、どちらも他サービスを切り捨てるほどの力は正直感じないので(Crashlyticsでissueをcloseできるのは地味に便利ですし)、いったんは既存のサービスと併用運用しつつ、今後の利用方法を決めていくのが正解な気がしています。

導入コスト自体はとても軽い印象だったので、とりあえず入れてみてもいいじゃないでしょうか。


参考資料