futabooo blog

色々手をつけすぎてすぐに忘れるので備忘録

Androidアプリで実行時にFirebaseAnalyticsを環境によって使い分ける設定方法

すでにFirebaseAnalyticsを使っている人向けです。 まだ使ったことがない人はまずは下記を参考に導入から管理画面でのイベントの確認まで進めてみることをおすすめします。 Get started with Google Analytics for Firebase on Android | Firebase

Androidアプリ開発していると本番環境と開発環境でFirebaseのプロジェクトを分けたい事案が発生することがあると思います。 公式ドキュメントでも複数のFirebaseプロジェクトをサポートするための実装方法が案内されています。

Configure multiple projects | Firebase

しかしこの方法は環境ごとのgoogle-services.jsonを用意した方法となっており、FirebaseSDKに初期化方法を任せた形での実装となるためBuild時に環境を選択することはできますが実行時に選択することができません。 下記の感じになります。

app/
    google-services.json
    src/development/google-services.json
    src/release/google-services.json
    ...

そこで初期化を自分たちでやる実装に変更し、実行時に複数の環境から選択できるような実装に変更する必要があります。 この方法自体はFirebaseの公式Blogでも紹介されています。

developers-jp.googleblog.com

記事を読みながら手順を踏めばだいたいうまくいきますが、必要ない設定もあったりするのと自分でやる際に少し工夫した部分もあるので復習の意味も込めて紹介します。

1. FirebaseInitProvider を無効化する

AndroidManifestのapplicationタグ内に下記を追加します。

<application>
  <provider
    android:name="com.google.firebase.provider.FirebaseInitProvider"
    android:authorities="${applicationId}.firebaseinitprovider"
    tools:node="remove"
  />
</application>

2. FirebaseApp.initializeApp() を呼び出して初期化する

公式Blogではいくつかsetメソッドが呼ばれていますがFirebaseAnalyticsを使うだけならsetApplicationIdだけ呼べばいけました。

val builder = FirebaseOptions.Builder().setApplicationId("your_ google_app_id")
FirebaseApp.initializeApp(this, builder.build())

ここでyour_google_app_idgoogle-services.json{YOUR_CLIENT}/client_info/mobilesdk_app_idの部分になります。

3.strings.xml内にFireBaseAnalyticsから呼び出されるようにkeyvalueを設定する

上記までだとアプリを実行した時にMissing google_app_id. Firebase Analytics disabled. See https://goo.gl/NAOOOIというエラーが表示されてAnalyticsが動きませんでした。 そこでstirigns.xmlに下記の1行を追加すると動くようになります。なぜこの行が必要なのかまだわかってないのでコメントもらえたら嬉しいです。

<string name="google_app_id" translatable="false">"your_ google_app_id"</string>

google-services.jsonのkeyvalueとstrings.xmlのkeyvalueの対応は下記のdocで確認できます。

developers.google.com

これで実行時にFirebaseOptionsを引数を変えて作成することができるので、環境に合わせて使い分けることができるようになります。