Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
77
Help us understand the problem. What is going on with this article?
@yamacraft

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

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

参考資料

77
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yamacraft
コンバンハ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
77
Help us understand the problem. What is going on with this article?