2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebase Analyticsを調べてみた

Last updated at Posted at 2016-11-13

Firebase Analyticsとは

アプリケーションの利用状況の解析のために以前よりGoogle Analyticsを利用していましたが、よりモバイルアプリケーションの解析に特化したFirebase Analyticsがリリースされました。今回はFirebase Analyticsを調査してみました。

サンプルアプリケーションの調査

ビルド

サンプルアプリケーションを用いて動作を確認しようと思います。今回はAndroid用のサンプルを利用します。以下のページからサンプルをダウンロードします。
https://firebase.google.com/docs/samples/

次にFirebase Console上でプロジェクトを作成します。
https://console.firebase.google.com/

スクリーンショット 2016-11-12 15.14.07.png

次にAndroidアプリにFirebaseに追加を選択します。
スクリーンショット 2016-11-12 15.15.04.png

パッケージ名はサンプルアプリケーションで使われている以下を選択します。Firebase Analyticsだけの利用の場合はSHA-1は必要ありません。

スクリーンショット 2016-11-12 15.15.30.png

google-services.jsonがダウンロードされます。このファイルをappディレクトリの下の置きます。
スクリーンショット 2016-11-12 15.51.52.png

後は、gradleでビルドすれば通るはずです。

$ ./gradlew assembleDebug

動作

アプリケーションをAndroid Phoneにインストールします

$ adb install app/build/outputs/apk/app-debug.apk 
[100%] /data/local/tmp/app-debug.apk
	pkg: /data/local/tmp/app-debug.apk
Success

アプリケーションを起動するとなんか以下みたいなページが表示されました。
スクリーンショット 2016-11-12 15.59.53.png
適当に選択したり、押したり、"Share"ボタン押したりしてみました。

#アプリケーション側の実装
Google Analyticsは確かv4からGoogle Tag Managerとの連携が必要となり、モバイルアプリケーションで簡単に使用状況を取るには面倒でした(A-Bテストが実現できたり高機能でしたが)。Firebase Analyticsは非常にシンプルです。

Getting Startedでも記述されていますが、以下の2種類の情報を取得できます。

  • イベント
    • ユーザーの操作によって随時イベントを送信することができます
  • ユーザープロパティ
    • ユーザーの属性を送ります。例えば、国や地域など。
    • 一度セットするとアプリケーションの利用中は永続的に使われる
    • 最大25個のプロパティをセット可能

アプリケーションで使用するクラスは基本的にシングルトンのFirebaseAnalyticsだけです。

サンプルアプリケーションのonCreate()では、FirebaseAnalyticsを取得しています。その後にgetUserFavoriteFood()メソッドでユーザーが選択した好きなFoodがない場合は、setUserFavoriteFood()を呼んでいます。getUserFavoriteFood()ではプリファレンスからデータを取得していて、アプリケーションの初回起動時に表示された"Which food is your favorite"の回答がとれます。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // [START shared_app_measurement]
        // Obtain the FirebaseAnalytics instance.
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
        // [END shared_app_measurement]

        // On first app open, ask the user his/her favorite food. Then set this as a user property
        // on all subsequent opens.
        String userFavoriteFood = getUserFavoriteFood();
        if (userFavoriteFood == null) {
            askFavoriteFood();
        } else {
            setUserFavoriteFood(userFavoriteFood);
        }

setUserFavoriteFood()では、[setUserProperty](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.html#setUserProperty(java.lang.String, java.lang.String))を使ってユーザーの属性をセットしています。

private void setUserFavoriteFood(String food) {
        Log.d(TAG, "setFavoriteFood: " + food);
        mFavoriteFood = food;

        PreferenceManager.getDefaultSharedPreferences(this).edit()
                .putString(KEY_FAVORITE_FOOD, food)
                .apply();

        // [START user_property]
        mFirebaseAnalytics.setUserProperty("favorite_food", mFavoriteFood);
        // [END user_property]

イベントの送信では、オプションメニュー"Share"選択時に[logEvent()](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.html#logEvent(java.lang.String, android.os.Bundle))を使ってイベントを送信しています。

public boolean onOptionsItemSelected(MenuItem item) {
        int i = item.getItemId();
        if (i == R.id.menu_share) {
            . . . 
            // [START custom_event]
            Bundle params = new Bundle();
            params.putString("image_name", name);
            params.putString("full_text", text);
            mFirebaseAnalytics.logEvent("share_image", params);

またサンプルアプリケーションではViewPagerを使ってスワイプ動作が可能ですが、そこでどの画像を選択したのかもイベントで送信しています。ViewPagerで選択されたページの名前を送信しています。

protected void onCreate(Bundle savedInstanceState) {
    . . .
    mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                recordImageView();
                recordScreenView();
            }
        });
    . . . 
}

private void recordImageView() {
        String id =  getCurrentImageId();
        String name = getCurrentImageTitle();

        // [START image_view_event]
        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
        bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
        bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
        mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
        // [END image_view_event]
    }

出力結果

Androidの場合は一晩ぐらいたつと結果が表示されていました。デバイスの種類や地域情報などは、特にアプリケーション上で明示的に送信していませんが、集計されています。

スクリーンショット 2016-11-13 13.19.31.png スクリーンショット 2016-11-13 13.19.50.png

先ほどのViewPagerで選択したページのイベントなのですが、以下のような結果で集計されていました。

スクリーンショット 2016-11-13 13.28.26.png

ユーザープロパティ

Google Analyticsにはないユーザープロパティですが、イベントと異なり、コード上の記述だけでは反映されません。Firebase Analyticsのコンソール上でユーザープロパティの作成が必要です。

スクリーンショット 2016-11-14 10.40.10.png

このユーザープロパティをどのようにConsole上で見れるかといいますと、イベントなどでフィルタとして利用することが可能です

スクリーンショット 2016-11-14 10.41.56.png

おわりに

まだ使い初めてばかりですが、概ね使い方は分かりました。Google Analyticsと比較してアプリケーション側はとてもシンプルな記述でイベントを記録できることが分かりました。引き続き調査を行いまた追記致します。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?