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

  • 74
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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できるのは地味に便利ですし)、いったんは既存のサービスと併用運用しつつ、今後の利用方法を決めていくのが正解な気がしています。
導入コスト自体はとても軽い印象だったので、とりあえず入れてみてもいいじゃないでしょうか。

参考資料