開発
Firebase Analyticsによるモバイルアプリ解析を試す
shimizu
先日の「Google I/O 2016」にて、Firebaseのリニューアルが発表されました。Firebaseはユーザー認証やストレージといったMBaaSとしての機能を軸に、モバイルアプリ運用のための色々なツールを提供しているサービスです。
その中で、数ある機能の内アプリのログ解析機能である「Firebase Analytics」が無制限に無償で利用可能にするとのアナウンスがありました。そこで、どのような使い勝手なのか実際に試してみました。今回はAndroidアプリに組み込む手順を見ていきましょう。
(以下の操作は、OSX上でAndroid Studio 2.1.1と最新の状態にしたAndroid SDKを用いて行っています)
まず公式サイトのドキュメントを開き、「For Android」のGet Started Guideを当たってみます。
すると、サンプルアプリのソースコードが提供されているそうなので、git cloneしておきます。(今回はanalyticsディレクトリ以下にあるサンプルアプリを使います)
$ git clone https://github.com/firebase/quickstart-android.git
アプリ登録
最初にFirebaseにアプリ登録を行います。FirebaseのWebサイト上部の「Console」を開き、Googleアカウントでログインし、「新規プロジェクトを作成」を押します。
「プロジェクト名」を記入し「国/地域」を選んで「プロジェクトを作成」を押すと、プロジェクトが作成されOverview画面に移ります。
ここで「AndroidアプリにFirebaseを追加」を押すと、アプリ詳細入力に移ります。「パッケージ名」にアプリのAndroidManifest.xmlに記載されているパッケージ名を記入しますが、今回のサンプルアプリでは「com.google.firebase.quickstart.analytics」となっているため、これを記入します。
記入後に「アプリを追加」を押すと、Firebaseへのアクセス情報が格納されたgoogle-services.jsonファイルがダウンロードされ、アプリのappディレクトリに配置するよう指示されますので、案内に従ってファイルを置きます。
さらに「続行」を押すと、次の画面でGradleの設定ファイルであるbuild.gradleを修正して、Googleサービスプラグインが使用できるよう手順が表示されます。(サンプルアプリではその設定が記述済みです)
プロジェクトのbuild.gradle(classpathを追加)
buildscript { // ... dependencies { // ... classpath 'com.google.gms:google-services:3.0.0' } }
appのbuild.gradle(apply pluginを追加)
// ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services'
以上でFirebaseへのアプリ登録が完了しました。
ログの記録
それでは用意ができましたので、実際にアプリの中でログを記録する方法を見ていきましょう。
公式ドキュメントのGet Started with Firebase Analytics for Androidを参照すると、まずFirebase Analyticsを使用するための依存関係設定をアプリのbuild.gradleに追加する必要があります。(先程と同じく、サンプルアプリでは既に設定済みです)
compile 'com.google.firebase:firebase-analytics:9.0.0'
ここからはサンプルアプリのコードを追っていきますが、MainActivityのonCreateで以下のようにFirebaseAnalyticsオブジェクトが初期化されます。以後はこのオブジェクトのメソッドを介して機能にアクセスすることになります。
// Obtain the FirebaseAnalytics instance. mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
実際にイベントを記録している箇所はMainActivityのrecordImageViewにある以下のコードです。logEventメソッドでログを記録する際、イベント名テキストの他に、各種パラメータをBundleで送信することができます。
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);
また、イベント記録機能の他に、アプリを使用しているユーザーを分類するための属性を付けることができます。MainActivityのsetUserFavoriteFoodでは次のようにして「favorite_food」ユーザープロパティに値を設定しています。どのようなユーザープロパティを使うかについては、管理コンソールで事前に設定しておく必要があるようです。
mFirebaseAnalytics.setUserProperty("favorite_food", mFavoriteFood);
サンプルアプリを動かしてみる
それでは、実際にサンプルアプリを動かしてみましょう。
その前に、以下のadbコマンドを実行し、動作状況が確認できるようにしておきましょう。デフォルトでは出力レベルは「INFO」ですが、「VERBOSE」にすることで詳細な情報が確認できるようになります。
$ adb shell setprop log.tag.FA VERBOSE $ adb shell setprop log.tag.FA-SVC VERBOSE $ adb logcat -v time -s FA FA-SVC
ではアプリを起動してみましょう。最初に以下の画面が表示されます。
いずれかを選ぶと選択された内容がユーザープロパティにセットされる仕組みですが、例えば「Hot Dogs」を選択すると、以下のように動作していることが確認できます。
05-26 17:58:02.824 D/FA-SVC ( 2210): User property set: favorite_food, Hot Dogs
その後の画面で、左右にフリックしてA・B・C・Dを切り替えると、イベントが記録されます。これも同様に動作が確認できます。
05-26 18:02:32.270 V/FA-SVC ( 2210): Event recorded: Event{appId='com.google.firebase.quickstart.analytics', name='select_content', params=Bundle[{item_name=B, _o=app, content_type=image, item_id=id-B}]} 05-26 18:14:25.066 V/FA-SVC ( 2210): Event recorded: Event{appId='com.google.firebase.quickstart.analytics', name='select_content', params=Bundle[{item_name=C, _o=app, content_type=image, item_id=id-C}]}
記録した結果は管理コンソールの「Analytics」から閲覧・分析することができます。ちなみに、実際に記録されてから数時間後にWeb上に反映されるようですので、時間を置いてから見に行きましょう。
まとめ
モバイルアプリのログ解析を行うに当たってはGoogle Analyticsなど様々な選択肢がありますが、Firebaseにとっては無制限かつ無償であることによる導入の容易さと、強力なMBaaS機能との連携がアピールポイントになりそうです。開発者にとって、今後ますます便利なサービスとなることを期待します。