moshimore Knowledge

アプリ開発とメモ書き、日々の日記。

UnityプロジェクトにFirebaseのAnalyticsを導入してみました

f:id:moshimore:20180908212602p:plain
公開しているAndroidアプリの幾つかにはFirebaseのAnalyticsを導入していて、先日リリースしたミニゲーム「ウサギ餅」にも入れてみることにしました。
但し、今回は、Unityで開発しているのでスムーズに導入可能か不明でした。

スタートガイド

とりあえず、公開してあるFirebaseのドキュメントの通りにインストールしましたが、案の定、それだけだと動作しない部分がありました。

動作しない点1

スタートガイドでダウンロードするファイル「google-services.json」ですが、どこに配置しても良いとのことで、プロジェクトのディレクトリ配下に「Android」というディレクトリを作り、その中へ配置していましたが、認識されませんでした。
そこで、「Assets」の「Firebase」の中に移動してあげたところ、プログレスバーが動き出して認識しました。

動作しない点2

今回のAnalyticsは、ログだけ取れるようにできれば良いと考えていたので、スタートガイドにあった以下のコードを追加しました。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Set a flag here indiciating that Firebase is ready to use by your
    // application.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

EventAppOpenログだけ欲しかったので、上のコードの下に追記しました。

Firebase.Analytics.FirebaseAnalytics.LogEvent(Firebase.Analytics.FirebaseAnalytics.EventAppOpen);

ところが、「Set a flag here indiciating that Firebase is ready to use by your application.」と書かれている通り、FirebaseがSDK確認が終わった後でないとLogEventを呼んではいけないらしいです。
今回は、このコメントのすぐ下でLogEventを呼ぶようにしました。

単純にLogEvent単独で呼んではいけないようです。
更にSceneを跨いだ場合も改めてSDKの確認をしないと動作しないことがありました。

どうするか?

これだと、LogEventを呼ぶたびに少し面倒なので、Firebase SDKの方でなんとかして貰えないものかと…。
他のブロガーさんでも、Firebase SDKの導入には依存関係やらで躓いていらっしゃるみたいで、なかなかすんなりいかないものです。
Analytics用のクラスを用意して、それを呼び出すようにした方がシンプルで良いかもしれません。