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でも紹介されています。
記事を読みながら手順を踏めばだいたいうまくいきますが、必要ない設定もあったりするのと自分でやる際に少し工夫した部分もあるので復習の意味も込めて紹介します。
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_id
はgoogle-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で確認できます。
これで実行時にFirebaseOptions
を引数を変えて作成することができるので、環境に合わせて使い分けることができるようになります。