経緯
Android のバイナリのテスターへの配布を AppCenter を利用して行なっていましたが、2025年3月31日を以ってサービス終了との知らせが。(かなり前から告知されていた。)
公式では Google Play Console の内部テストに配布を勧めていたが、QA サイドから「使いにくそう」との意見が出たので他サービスを利用する検討を行った結果…
既に Messaging などを利用していた Firebase に白羽の矢が立ちました。
現状、ビルドは Unity Build Automation を利用してのクラウドビルド、使用 Unity バージョンは 2021.3.36f1 となっています。
備忘録や今後の参考程度に、対応内容を記します。
当方は Android のみの対応でしたが、iOS でもほぼ同じ様な形で対応できるかと思います。
Firebase コンソール側の設定
-
テスターやグループの追加
「テスターとグループ」タブから「グループを追加」ボタンを押して、任意の名前を付けてグループを作成。
その後、「招待リンク」タブから「招待リンクを作成」を押して、先ほど作成したグループを指定して「リンクを作成」する。
「テスターとグループ」タブに戻って、テスターを追加したいグループを選択して有効にしてから、「テスターを追加」でメールアドレスを記載して「テスターを追加」する。 -
AAB ファイルのアップロードを有効にする
そのままだと .apk ファイルのみしかアップロードできない。マニュアルによれば .aab をアップロードできる様にするには、Google Play Console との紐付けが必要。この対応は、プロジェクトのオーナークラスのロールの方でしかできない。
当然、Google Play Console にもバイナリをアップロードしたことのあるタイトルでないとダメ。
対応が完了すると表示部分が以下の様に変わります。
-
Firebase コンソールでの秘密鍵の作成方法
下記ページの「新しい秘密鍵を生成」ボタンを押すだけ。.json ファイルがダウンロードされます。
その後確認したところ GCP の方にもキーが追加されていました。
参考にした情報
- アップロード用のシェルスクリプト
Unity Discussions
ほぼこの投稿内容の処理をそのまま流用しました。
ローカルで挙動を試した際はこちらに記載のあるコードを実行することでアップロード成功。
Firebase をオプションでグローバルにインストールするようにした場合は package.json を用意する必要なし。
- Firebase の認証
Firebase CLI と GOOGLE_APPLICATION_CREDENTIALS
Firebase のコマンドラインツールをインストールしているパソコンで下記コマンドを叩くとトークンが取得できる。
ただこのトークンシステムがいずれ非推奨になるとのことだったので、このトークンを使わずに下記記事を参考に認証を通すようにしました。
firebase login:ci
UBA 実行時に出たエラーたち
-
Node のバージョンが合わない。
UBA 側の 2021.3.36f1 で使用している Node のバージョンが 16.20.2 と固定されていた。
「npm install firebase-tools」でインストールした最新の Firebase コマンドラインツールのバージョンではこの Node のバージョンが古すぎるとしてエラーが発生しビルド失敗になっていた。
(ログでは「最低でも 18.0.0 以上のバージョンでないとダメ」とのことだった。) -
Firebase コマンドラインツールのバージョンが低いと AAB ファイルがアップロードできない。
固定された Node のバージョンに合わせる形で Firebase コマンドラインツールのバージョンを低めに指定してインストール。
この時、今度は Firebase コマンドラインツールのバージョンが低すぎて AAB ファイルが扱えないとエラーが出て失敗。
(当然といえは当然でした…) -
グローバルに新しくインストールした Node を指してくれない。
それぞれインストール先が異なるため、そのままでは古いバージョンの方を指したまま。
(これも当然といえば当然…)
エラー対策
- Firebase と Node のそれぞれのバージョンを、ローカルで実行し成功した際のバージョンと同じに指定してインストールする様に設定しました。
(.aab ファイルのアップロードができないと意味がないため、Firebase のバージョンを可能な限り最新のものへ。それに対応する Node のバージョンを選ぶ。) - Firebase と Node をそれぞれグローバルにインストールし、パスを通してグローバルにインストールした Node を使用する様に指定しました。
(これによってデフォルトの古いバージョンの Node を指さないように、強引に変更。)
最終的に FIX したシェルスクリプトのコード
#!/bin/sh
set -x
set -e
# ディレクトリをこのファイルの場所に移動
dir=`dirname $0`
cd "${dir}"
# Firebase 用パラメータ
export FIREBASE_APPLICATION_ID='x:xxxxxxxxxxxx:android:xxxxxxxxxxxxxxxxxxxxxx'
export FIREBASE_UPLOAD_FILE="${UNITY_PLAYER_PATH}"
# Firebase コンソール側で設定したグループ名
export TESTER_GROUP_NAME='xxxxxxxxxxxx'
export FIREBASE_RELEASE_NOTES="【ターゲット】 **${BUILD_TARGET}**
【ビルド番号】 **${UCB_BUILD_NUMBER}**
【コミット】${BUILD_REVISION}"
# 秘密鍵の JSON ファイルまでのパス(当方はこのスクリプトファイルと同じ階層に保持)
export GOOGLE_APPLICATION_CREDENTIALS='./xxxxxxxx.json'
# Firebase と Node をバージョンを指定してグローバルにインストール
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
export PATH="/usr/local/bin:$PATH"
npm install -g n && n 22.12.0
npm install -g firebase-tools@13.29.1
# Firebase App Distributionを実行
firebase appdistribution:distribute "${FIREBASE_UPLOAD_FILE}" \
--app "${FIREBASE_APPLICATION_ID}" \
--groups "${TESTER_GROUP_NAME}" \
--release-notes "${FIREBASE_RELEASE_NOTES}" \
exit 0