Firebaseの設定をビルド環境ごとに切り替える[iOS][Android]
こんにちは!寺坂です。
GANMA!では、iOS/Androidのアプリに Firebaseを導入しています。
いったん必要な部分だけ利用しているので、
Analytics, Notification, Crash, Dynamic Linksなど、まだ一部の導入だけですが、
徐々に利用ノウハウを貯めていっています。
今回は、導入に際して行った環境切り替えのアプローチを紹介したいと思います。
プロダクション用と開発用に2種類のFirebaseアプリを用意する
普段、プロダクション用と開発用の環境を分けて開発しているので、
Firebaseの設定もそれぞれに用意する必要がありました。
GANMA!ではFirebaseプロジェクトを一つ作り、
環境別に複数のモバイルアプリを作成して対応しています。
Firebaseの構成
- プロジェクト
- GANMA!
- モバイルアプリ
- Production用 (iOS/Android)
- Dev用 (iOS/Android)
Firebase設定を切り替えて環境別に計測する(iOS)
上述のように、Production用とDev用の2つ用意したので、
アプリ側の設定もそれぞれに合わせてあげる必要があります。
// 通常設定
Firebaseコンソールからplistをダウンロードして、iOSプロジェクト内に配置。
AppDelegate内で下記のメソッドを呼びます。
FIRApp.configure()
// 環境切り替え
環境を切り替えるためには、
上記のメソッドの代わりにFIRApp.configureWithOptions(options)を使います。
ビルド環境に応じた値をFIROptionsに詰めて渡してあげることで、
Firebaseの向き先を変えることができます。
// 手順
- 環境ごとのplistをダウンロード(Production用, Dev用など)
- それぞれのplistを開いてその中身を見る
- それぞれの設定値をビルド時に得られるようにする(環境別にconfを用意するなど)
- FIRApp.configureWithOptionsを使って、環境に応じた設定値をセットする
注意点
FIRApp.configureWithOptionsを使うようにしても、
GoogleService-Info.plistはちゃんと配置しておく必要があります。
let options: FIROptions = FIROptions(
googleAppID : GoogleAppID,
bundleID : BundleID,
GCMSenderID : GCMSenderID,
APIKey : APIKey,
clientID : ClientID,
trackingID : TrackingID,
androidClientID : AndroidClientID,
databaseURL : DatabaseURL,
storageBucket : StorageBucket,
deepLinkURLScheme: DeepLinkScheme
)
FIRApp.configureWithOptions(options)
Firebase設定を切り替えて環境別に計測する(Android)
// 通常設定
Firebaseコンソールからgoogle_service.jsonをダウンロードして配置します。
// 環境切り替え
google_service.jsonには、
Firebase上のアプリそれぞれの設定値が既に記載されていますので、
これをAndroidプロジェクト内に配置して、
jsonファイル内に記載されている"package_name"の部分を修正します。
// 手順
- google_service.jsonをダウンロードして配置
- "android_client_info"内の"package_name"をビルド時のパッケージ名と一致させる
注意点
特に気をつける必要があるのは、jsonファイルに記載している"package_name"の値が
ビルド時のパッケージ名と一致していなければならない点です。
jsonファイルに存在しないパッケージ名でビルドしようとすると、
エラーになってビルドできなくなります。
ですので、Firebase上には作成していないパッケージ名でビルドする時には、
そのパッケージ名をセットした"client_info"を追加してあげる必要があります。
{
"project_info": {
...
},
"client": [
// ここの配列にパッケージの種類分だけ"client_info: {}"が入る
{
"client_info": {
"android_client_info": {
"mobilesdk_app_id": "0000000000000:android:hoge",
"package_name": "プロダクション用のパッケージ名",
....
},
....
}
},
{
"client_info": {
"android_client_info": {
"mobilesdk_app_id": "11111111111:android:hoge1",
"package_name": "開発用のパッケージ名",
....
},
....
}
},
{
"client_info": {
"android_client_info": {
"mobilesdk_app_id": "11111111111:android:hoge1",
"package_name": "開発用のパッケージ名2",
....
},
....
}
}
....
],
"configuration_version": "1"
}
おわり
以上になります。
ピンポイントな内容ですが、Firebase導入にあたって参考になれば幸いです。