通过 Fastlane 分发 Firebase 应用 "the server responded with status 403"

Firebase app distribution via Fastlane "the server responded with status 403"

我在 Fastlane Fastfile 中设置了 Firebase 应用分发功能来分发我的 iOS 应用的测试版。它工作正常,但突然开始显示错误。

这是我的车道的样子。

lane :distribute_beta do |options|
        
        sync_code_signing_adhoc()
        update_build_number_of_all_frameworks() 
        build_ios_app_adhoc()

        firebase_app_distribution(
            app: "<app ID here>",
            testers: "<tester emials here>",
            release_notes: options[:release_note],
            firebase_cli_path: "/usr/local/bin/firebase"
        )
end  

当我运行这条线显示错误

the server responded with status 403

步骤:firebase_app_distribution

日志还显示 google 的身份验证成功。

 Authenticating with GOOGLE_APPLICATION_CREDENTIALS environment variable: /<path to cred>/<cred_file_name>.json
  Authenticated successfully.

以下是“步骤:firebase_app_distribution”

的全部错误
[17:11:04]: ---------------------------------------
[17:11:04]: --- Step: firebase_app_distribution ---
[17:11:04]: ---------------------------------------
[17:11:04]: Authenticating with GOOGLE_APPLICATION_CREDENTIALS environment variable: /<path to cred>/<cred_file_name>.json
[17:11:04]:  Authenticated successfully.
+------------------------------------+---------------------------------------------+
|                                   Lane Context                                   |
+------------------------------------+---------------------------------------------+
| DEFAULT_PLATFORM                   | ios                                         |
| PLATFORM_NAME                      | ios                                         |
| LANE_NAME                          | ios distribute_beta                         |
| SIGH_PROFILE_TYPE                  | ad-hoc                                      |
| MATCH_PROVISIONING_PROFILE_MAPPING | {"<my bndle ID>"=>"match AdHoc              |
|                                    | <my bundle ID>"}                            |
| BUILD_NUMBER                       | 107                                         |
| IPA_OUTPUT_PATH                    | /Users/my_user_name/Repository/App/App|
|                                    | y/App.ipa                                   |
| XCODEBUILD_ARCHIVE                 | /Users/my_user_name/Library/Developer/Xcode/A|
|                                    | rchives/2021-01-08/App 2021-01-08           |
|                                    | 17.09.08.xcarchive                          |
| DSYM_OUTPUT_PATH                   | /Users/my_user_name/Repository/App/App           |
|                                    | y/App.app.dSYM.zip                          |
+------------------------------------+---------------------------------------------+
[17:11:06]: the server responded with status 403

+------+-----------------------------+-------------+
|                 fastlane summary                 |
+------+-----------------------------+-------------+
| Step | Action                      | Time (in s) |
+------+-----------------------------+-------------+
| 1    | default_platform            | 0           |
| 2    | Switch to ios               | 0           |
|      | sync_code_signing_adhoc     |             |
|      | lane                        |             |
| 3    | sync_code_signing           | 18          |
| 4    | Switch to ios               | 0           |
|      | update_build_number_of_all  |             |
|      | _frameworks lane            |             |
| 5    | increment_build_number      | 1           |
| 6    | commit_version_bump         | 0           |
| 7    | Switch to ios               | 0           |
|      | build_ios_app_adhoc lane    |             |
| 8    | build_ios_app               | 126         |
|    | firebase_app_distribution   | 1           |
+------+-----------------------------+-------------+

[17:11:06]: fastlane finished with errors

我该如何解决这个问题?

通常,当您收到 特定消息时,这意味着 Firebase 刷新令牌不再有效。

因此,当您提交应用时,有时您必须指定 Firebase 刷新令牌:

...
firebase_app_distrubution(
  ...
  firebase_cli_token: "<YourFirebaseRefreshToken>"
)
...

您可以从 here 获得此令牌。如果您的脚本无缘无故地开始失败,这可能意味着生成此(或任何其他身份验证令牌)的人已从 Firebase 项目中删除。

如果您收到 403,那肯定意味着某人已从您的 Firebase 项目中删除,或者某人 removed/regenerated Firebase 控制台上的令牌。

  1. 只需在控制台上运行以下命令:

    curl -sL https://firebase.tools | bash
    
  2. 然后,在浏览器上进行身份验证

  3. 然后运行

    firebase login:ci
    
  4. 成功后,您将打印出新的 cli 令牌,如下所示:

Waiting for authentication...

✔  Success! Use this token to login on a CI server:

1//here_will_be_your_new_token

Example: firebase deploy --token "$FIREBASE_TOKEN"

我呢,是因为我使用的服务账号没有Firebase App Distribution Admin角色。 https://firebase.google.com/docs/app-distribution/authenticate-service-account?platform=ios

我只需要编辑我现有的服务,为此,转到 firebase 控制台 > 项目设置 > 服务帐户 > 然后单击服务帐户,如下图所示

它将带您进入 GCP IAM 和管理,您可以在其中找到和编辑您的服务帐户的角色。

对我来说,我必须将用于 App Distribution 登录的特定帐户添加到我的应用程序的项目设置中。

检查您的 firebase 帐户是否具有项目的分发权限。 项目设置 -> 用户和权限 -> 成员应具有“编辑”角色