Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
37
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

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

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ドキュメント

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
37
Help us understand the problem. What are the problem?