LoginSignup
33
37

More than 5 years have passed since last update.

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

Posted at

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"を追加してあげる必要があります。

google_service.json
{
  "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ドキュメント

33
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
37