FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Firebaseの設定をビルド環境ごとに切り替える[iOS][Android]

こんにちは!寺坂です。

GANMA!では、iOS/Androidのアプリに Firebaseを導入しています。

いったん必要な部分だけ利用しているので、
Analytics, Notification, Crash, Dynamic Linksなど、まだ一部の導入だけですが、

徐々に利用ノウハウを貯めていっています。

今回は、導入に際して行った環境切り替えのアプローチを紹介したいと思います。

プロダクション用と開発用に2種類のFirebaseアプリを用意する

普段プロダクション用と開発用の環境を分けて開発しています。

そのため、Firebaseの設定もそれぞれに用意する必要がありました。

GANMA!ではFirebaseプロジェクトを一つ作り、
その中に環境別に複数個のモバイルアプリを作成して対応しています。

Firebaseの構成

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導入にあたって参考になれば幸いです。

元記事はこちらです。Firebaseの設定をビルド環境ごとに切り替える[iOS][Android]

参考リンク

Firebaseドキュメント