kawabatas技術ブログ

試してみたことを書いていきます

Unity で複数の Firebase プロジェクトを使用する

概要

Unity で Firebase プロジェクトを開発環境と本番環境を分けました。 その際に行ったことのメモです。

ドキュメントを読んで

こちらが「複数のプロジェクトを構成する」ドキュメントになります。

iOS アプリケーションで複数の環境をサポートするでは、2つのGoogleService-Info.plistファイルを別々のディレクトリに保存する、とありますが、Unity の console で Warning が発生しており、気になります... f:id:kawabatas:20181102123750p:plain

また Unity の Androidgoogle-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.plistAssets/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 を使う方が良さそうです。