AppCenter 終了に伴い Firebase App Distribution に移行した対応内容

## 経緯
Android のバイナリのテスターへの配布を AppCenter を利用して行なっていましたが、2025年3月31日を以ってサービス終了との知らせが。(かなり前から告知されていた。)

https://learn.microsoft.com/ja-jp/appcenter/retirement

公式では Google Play Console の内部テストに配布を勧めていたが、QA サイドから「使いにくそう」との意見が出たので他サービスを利用する検討を行った結果…
既に Messaging などを利用していた Firebase に白羽の矢が立ちました。

現状、ビルドは Unity Build Automation を利用してのクラウドビルド、使用 Unity バージョンは 2021.3.36f1 となっています。

備忘録や今後の参考程度に、対応内容を記します。
当方は Android のみの対応でしたが、iOS でもほぼ同じ様な形で対応できるかと思います。

## Firebase コンソール側の設定
- リリース機能を有効にする
対象のプラットフォームを選択して、「開始」ボタンを押すだけ。
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/23130558-032d-48e4-ca31-b12919d56287.png width=100%>

- テスターやグループの追加
「テスターとグループ」タブから「グループを追加」ボタンを押して、任意の名前を付けてグループを作成。
その後、「招待リンク」タブから「招待リンクを作成」を押して、先ほど作成したグループを指定して「リンクを作成」する。
「テスターとグループ」タブに戻って、テスターを追加したいグループを選択して有効にしてから、「テスターを追加」でメールアドレスを記載して「テスターを追加」する。
- AAB ファイルのアップロードを有効にする
そのままだと .apk ファイルのみしかアップロードできない。マニュアルによれば .aab をアップロードできる様にするには、Google Play Console との紐付けが必要。この対応は、プロジェクトのオーナークラスのロールの方でしかできない。
当然、Google Play Console にもバイナリをアップロードしたことのあるタイトルでないとダメ。<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/774d9e9d-cd44-1e97-3b78-3243bdc2214f.png width=100%>
対応が完了すると表示部分が以下の様に変わります。
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/c34feaab-6a38-bff1-48ae-c37a3462e13f.png width=40%>

- Firebase コンソールでの秘密鍵の作成方法
下記ページの「新しい秘密鍵を生成」ボタンを押すだけ。.json ファイルがダウンロードされます。
その後確認したところ GCP の方にもキーが追加されていました。
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/b9a969fb-302d-1b3e-3098-e010afe0d83b.png width=100%><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/f7190037-283a-1326-bdb9-f79f27442817.png width=100%>

## 参考にした情報
- アップロード用のシェルスクリプト
Unity Discussions
ほぼこの投稿内容の処理をそのまま流用しました。
ローカルで挙動を試した際はこちらに記載のあるコードを実行することでアップロード成功。
Firebase をオプションでグローバルにインストールするようにした場合は package.json を用意する必要なし。

https://discussions.unity.com/t/unity-cloud-build-firebase-distribution-windows-server/869729

- Firebase の認証
Firebase CLI と GOOGLE_APPLICATION_CREDENTIALS
Firebase のコマンドラインツールをインストールしているパソコンで下記コマンドを叩くとトークンが取得できる。
ただこのトークンシステムがいずれ非推奨になるとのことだったので、このトークンを使わずに下記記事を参考に認証を通すようにしました。
```
firebase login:ci
```


https://qiita.com/propella/items/966121f789e9930ba942

## UBA 実行時に出たエラーたち
- Node のバージョンが合わない。
UBA 側の 2021.3.36f1 で使用している Node のバージョンが 16.20.2 と固定されていた。
「npm install firebase-tools」でインストールした最新の Firebase コマンドラインツールのバージョンではこの Node のバージョンが古すぎるとしてエラーが発生しビルド失敗になっていた。
(ログでは「最低でも 18.0.0 以上のバージョンでないとダメ」とのことだった。)<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/eb0355c9-74c6-4559-9bfb-92b12c32d943.png width=100%>

- Firebase コマンドラインツールのバージョンが低いと AAB ファイルがアップロードできない。
固定された Node のバージョンに合わせる形で Firebase コマンドラインツールのバージョンを低めに指定してインストール。
この時、今度は Firebase コマンドラインツールのバージョンが低すぎて AAB ファイルが扱えないとエラーが出て失敗。
(当然といえは当然でした…)<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/abcb2e85-cf98-8d66-819e-5b5ce79b09d1.png width=100%>

- グローバルに新しくインストールした Node を指してくれない。
それぞれインストール先が異なるため、そのままでは古いバージョンの方を指したまま。
(これも当然といえば当然…)
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300480/84458aa2-bfd4-9587-9067-555beb13a1d0.png width=100%>

## エラー対策
- 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
```