Unity で複数の Firebase プロジェクトを使用する
概要
Unity で Firebase プロジェクトを開発環境と本番環境を分けました。 その際に行ったことのメモです。
ドキュメントを読んで
こちらが「複数のプロジェクトを構成する」ドキュメントになります。
iOS アプリケーションで複数の環境をサポートする
では、2つのGoogleService-Info.plist
ファイルを別々のディレクトリに保存する、とありますが、Unity の console で Warning が発生しており、気になります...
また Unity の Android でgoogle-services.json
を別々のディレクトリに保存するという方法では、うまく行きませんでした。
最終的に
Unity ではビルド前処理を行う関数を定義できるようだったので、
google-services-dev.json
GoogleService-Info-dev.plist
のように-dev
などのサフィックスをつけた設定ファイルを用意しておき、ビルド前処理で環境に応じた設定ファイルを上書きコピーすることにしました。
using UnityEngine; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using System.IO; /// <summary> /// Firebaseの設定ファイルを作成するクラス /// </summary> public class FirebaseSettingsCreator : IPreprocessBuildWithReport { // Androidの設定ファイル private const string ANDROID_SETTINGS = "google-services.json"; // iOSの設定ファイル private const string IOS_SETTINGS = "GoogleService-Info.plist"; // Firebaseの設定ファイルのパス private readonly string firebasePath = Application.dataPath + "/Firebase/"; // 実行順。低い値が優先される public int callbackOrder { get { return 0; } } // ビルド前処理 public void OnPreprocessBuild (BuildReport report) { string baseAndroidSettings = ""; string baseIosSettings = ""; #if API_PRODUCTION baseAndroidSettings = "google-services-prod.json"; baseIosSettings = "GoogleService-Info-prod.plist"; #else baseAndroidSettings = "google-services-dev.json"; baseIosSettings = "GoogleService-Info-dev.plist"; #endif // Firebaseの設定ファイルを上書きコピー File.Copy(firebasePath + baseAndroidSettings, firebasePath + ANDROID_SETTINGS, overwrite: true); File.Copy(firebasePath + baseIosSettings, firebasePath + IOS_SETTINGS, overwrite: true); } }
その他
google-services.json
GoogleService-Info.plist
はAssets/Firebase/Editor/generate_xml_from_google_services_json.py
から呼び出されAssets/Plugins/Android/Firebase/res/values/google-services.xml
Assets/StreamingAssets/google-services-desktop.json
が生成され、アプリはこの生成されたファイルに記載された Firebase アプリに接続するっぽいです。
IPreprocessBuild の記事をたくさん見つけましたが、古いので IPreprocessBuildWithReport を使う方が良さそうです。