サイト内を検索

Firebase App Distributionに移行した話

こんにちは。Cocone EngineeringでクライアントエンジニアをしているISです。
今回はテスト用のアプリ配信をFirebase App Distributionに移行した事例を紹介します。

はじめに

私のチームでは2025年3月までAppCenterを利用して社内のテスト用アプリを配信していました。
AppCenterは2025年3月31日にサービスが終了するとのことで、2025年4月以降は代替となるアプリの配信方法が必要となりました。

そこで今回は、Firebase App Distributionを利用することになりましたので、AppCenterから移行作業をすることになりました。

Firebaseプロジェクトについて

Firebaseプロジェクトを作成して、そのプロジェクト内にアプリを追加してアプリごとにApp Distributionの開始ボタンを押して、機能を有効にしていきます。

(私のチームではすでにFirebase Cloud Messagingを利用したていたのでプロジェクトはすでに作成済みで、アプリも本番用とアルファ用が追加済みでした)

ここで問題が!

Firebaseプロジェクト内に同一のパッケージ名(iOSではバンドルID)のアプリは登録できません。 これまでAppCenterではQA用、アルファ用、ベータ用、課金用などさまざまな種類の社内用アプリを配信しており、一部のアプリは同一のパッケージ名で運用していました。

これを回避するためもう一つFirebaseプロジェクトを作成し、2つのFireabaseプロジェクトに分けて運用することにしました。

アップロードしてみる

Firebaseプロジェクトの作業が終わったら実際にアプリをアップロードしてみます。

  1. Firebase CLIのインストール
    npm install -g firebase-tools
    
  2. 秘密鍵の作成

    プロジェクトの設定から秘密鍵を生成して、ダウンロードします
  3.  ロールの設定
    1. 以下3つのロールをサービスアカウントに追加します
      1. Firebase App Distribution Admin SDK サービス エージェント
      2. Firebase Service Management サービス エージェント
      3. サービス アカウント トークン作成者
  4. 環境変数の追加
    1. サービスアカウントで認証するため環境変数 GOOGLE_APPLICATION_CREDENTIALS を設定します
    2. 適当な場所にダウンロードしておいた秘密鍵を置きます(今回はホームディレクトリの.firebase以下に配置)
    3. .zshrc に秘密鍵のパスを追記します
      export GOOGLE_APPLICATION_CREDENTIALS=$HOME/.firebase/private_key_xxx.json
      
    4. パスを反映します
      source ~/.zshrc
      
  5. テスターの登録
    1. App Distributionのテスターとグループでグループを作成し、自分のメールアドレスを追加します。(もちろん自分以外のテスターも登録してOKです)
  6. アプリのアップロード
    1. Firebase CLIでアップロードしてみます
      firebase appdistribution:distribute /Users/test/android_alpha.apk \\--app {アプリID} --groups 'qa-team'
      
  7. アプリのダウンロード
    1. ここから(https://appdistribution.firebase.google.com/)ダウンロードできるか確認します
    2. またはアップロード時にテスターには招待メールがくるのでそこからダウンロードします

Slackに通知してみる

SlackのWebhookを使って通知します。(事前にWebhookを利用するためのSlackのAppの準備はしておきます)

  1. Firebase CLIの結果をファイルにリダイレクトしておきます
    firebase appdistribution:distribute /Users/test/android_alpha.apk \\--app {アプリID} --groups 'qa-team' > appdistribute.log
    
  2. アップロードが成功した場合の結果はこんな感じで、2つ目のURLがテスター用のダウンロード用URLです
    i  uploading binary...
    ✔  uploaded new release 1.00.1 (111) successfully!
    ✔  View this release in the Firebase console: <https://console.firebase.google.com/project/xxxxx>
    ✔  Share this release with testers who have access: <https://appdistribution.firebase.google.com/testerapps/xxxx>
    ✔  Download the release binary (link expires in 1 hour): <https://firebaseappdistribution.googleapis.com/app-binary-downloads/projects/xxxx>
    i  updating release notes...
    ✔  added release notes successfully
    i  distributing to testers/groups...
    ✔  distributed to testers/groups successfully
    
  3. ダウンロード用URLを抽出します
    DOWNLOAD_URL=$(cat appdistribute.log | grep -oE 'https?://[^ ]+' | sed -n '2p')
    
  4. Slackに通知します
    curl -X POST -H 'Content-type: application/json' --data "{\\"text\\":\\"${DOWNLOAD_URL} \\"}" "<https://hooks.slack.com/services/xxxx>"
    

その他気になること

アプリダウンロード時のファイル名がすべて、app.apk になってしまう……

AppCenterの時はアップロード時のファイル名でダウンロードできていたのでここは若干不便です。だいぶ前から要望が出ているようですが、2025年4月時点でも変わってないようです。

Tag

Category

Tag