スマホアプリ開発を加速する,Firebaseを使ってみよう

第8回 新しいFirebaseの機能を実際にアプリに組み込んでみよう

この記事を読むのに必要な時間:およそ 9 分

前回は,Google I/0 2016で発表された新しいFirebaseの概要とそのプロダクト群をご紹介しました。

新しく追加された機能は非常に多く,とてもすべてを解説することはできませんが,今回は筆者が特に重要だと感じた以下の3つの機能を実際にAndroidアプリに組み込む方法を解説したいと思います。

  • Analytics
  • Storage
  • Remote Config

Analytics

Analyticsは新しくなったFirebaseの中核となる分析基盤です。ユーザのさまざまな行動を簡単に収集・分析することができます。

AnalyticsをAndroidで利用するにはアプリのbuild.gradleに次の依存関係を追加するだけです。

compile 'com.google.firebase:firebase-core:9.0.2'

この設定は基本的にすべてのFirebaseプロダクト群を導入する際にかならず実行しているはずなので,Analyticsは特に追加インストールする必要なく利用可能です。

イベントの記録

イベントの記録はFirebaseAnalyticsインスタンスのlogEvent()メソッドを利用します。

次の例のように,ActivityのフィールドにFirebaseAnalyticsの変数を用意しておき,onCreate()内で FirebaseAnalytics.getInstance(this)を使って初期化します。

// Activityのフィールド
private FirebaseAnalytics firebaseAnalytics;

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

    // インスタンスの取得
    firebaseAnalytics = FirebaseAnalytics.getInstance(this);

あとはイベントを記録したい任意の場所でlogEvent()メソッドを呼ぶだけです。

logEvent()には記録するイベントと任意のパラメータを次のようにBundle形式で渡します。

Bundle params = new Bundle();
params.putString("screen_name", "LoginActivity");
firebaseAnalytics.logEvent("open_screen", params);

これだけです。ここでは表示したページを記録するためのopen_screenというイベントを定義し,パラメータとしてscreen_nameに対応するページ情報を送信しています。

この例では記録する際にイベント名もパラメータも任意のものを指定しましたが,Firebaseがあらかじめ用意した定形のイベントとパラメータがそれぞれFirebaseAnalytics.EventFirebaseAnalytics.Paramという名前空間に定義されているのでいくつか紹介します。

イベント概要
ADD_PAYMENT_INFO支払情報を入力したイベント
ADD_TO_CART商品をカートに追加したイベント
ADD_TO_WISHLIST商品をウィッシュリストに追加したイベント
パラメータ概要
ITEM_ID商品ID
ITEM_NAME商品名
PRICE値段

これらは次のように利用します。

Bundle params = new Bundle();
params.putString(FirebaseAnalytics.Param.ITEM_ID, "12345");
params.putString(FirebaseAnalytics.Param.ITEM_NAME, "高級ブランド革の財布");
params.putDouble(FirebaseAnalytics.Param.PRICE, 29800.0);
firebaseAnalytics.logEvent(FirebaseAnalytics.Event.ADD_TO_CART, params);

ここではオンラインショッピングアプリで使うようなイベントとパラメータを一例としてご紹介しましたが,他にも数多く定義されています。詳しくはFirebaseAnalytics.EventFirebaseAnalytics.Paramのドキュメントをご参照ください。

ここに定義されたものを使わなければならないということはまったくありませんが,利用できそうなものがあれば利用してみても良いでしょう。

なお,Analyticsでは明示的にlogEvent()を呼びださなくても,導入するだけで自動的に収集されるイベントがいくつも存在します。

たとえばユーザが初めてアプリを開いたときにはfirst_openイベントが記録され,ユーザが最小セッション継続時間を超えてアプリを利用している場合にはsession_startが自動で記録されます。他にもアプリの更新やアンインストールまでも自動的に収集してくれます。詳しくは自動的に収集されるイベントのドキュメントをご参照ください。

記録したイベントは数時間程度でWebコンソールに反映されます。Analyticsのコンソールから「イベント」タブに切り替えて自分が送信したイベントが記録されていることを確認してみてください。

図1 イベント

図1 イベント

ただ,これは現行のWebコンソールの制限だと思われますが,ユーザが任意に定義したイベントの細かいプロパティはコンソール上では確認できないようです。今後の改善が望まれます。

制限事項

現状,イベントのパラメータとして独自に定義したカスタムパラメータを指定した場合,Webコンソールのイベントタブから確認した際に詳細な値の内訳を確認することができません。前述のFirebaseAnalytics.Paramで定義されたパラメータのみ細かく確認することができます。

ワークアラウンドとして既存のパラメータを流用するか,汎用的な値を表現するFirebaseAnalytics.Param.VALUEを利用する,あるいはBigQueryにエクスポートして確認する方法などが紹介されています。興味のある方はLog eventsの公式ドキュメントをご参照ください。

ユーザプロパティ

Analyticsではユーザプロパティという属性を各ユーザに設定することで,言語や地域など任意の指標でユーザをセグメント分けし,分析時のフィルタとして利用することができます。

FirebaseのWebコンソールにログインし,プロジェクトのAnalyticsから「ユーザープロパティ」を選択し「新しいユーザーのプロパティ」を選択します。

図2 ユーザープロパティ

図2 ユーザープロパティ

「ユーザープロパティ名」に任意のプロパティ名を入力し「作成」を選択します。

図3 新しいユーザープロパティの追加

図3 新しいユーザープロパティの追加

あとはプログラムからこのプロパティ名に対応する値を送信してやるだけです。

次の例ではカスタムApplicationクラスのonCreate()内でユーザープロパティを設定しています。設定にはsetUserProperty()メソッドを利用します。

FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(this);
firebaseAnalytics.setUserProperty("design_type", "type_a");

これで以後のイベントの記録にはこのユーザープロパティが付与されて記録されるようになります。

数時間後ユーザープロパティが反映されたら,記録したイベント等をユーザープロパティでフィルタすることができます。

イベントタブから「フィルタを追加」を選択します。

図4 フィルタを追加

図4 フィルタを追加

その後「ユーザープロパティ」から指定したプロパティを選択してフィルタとして利用することができます。

図5 ユーザープロパティ

図5 ユーザープロパティ

AnalyticsのTips

Instant Runの無効

Android Studio 2.2未満でInstant Run機能を有効にしている場合,Analyticsのイベントが正しく送られないことが知られています。

もしAndroid Studio 2.2未満を使って開発している場合には,Android Studioの設定画面から次の図を参考にEnable Instant Runのチェックを外してInstant Runを無効にしてください。

図6 Instant Runを無効にする

図6 Instant Runを無効にする

デバッグ時のイベント送信確認

AnalyticsのイベントがWebコンソールに反映されるには数時間かかります。もし開発環境でイベントがきちんと記録されているか確認したい場合は,次のようにadbコマンドを実行した状態でアプリを実行してみてください。

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

次のようにコンソールにイベントの記録の様子が出力されれば成功です。

(20381): onActivityCreated
(20381): Tag Manager is not found and thus will not be used
(20381): Logging event (FE): open_screen, Bundle[{screen_name=LoginActivity, _o=app}]

著者プロフィール

白山文彦(しろやまふみひこ)

サーバサイド,インフラ,Androidなど何でもやるプログラマ。

コメント

コメントの記入