web-dev-qa-db-ja.com

Firebaseディストリビューションで権限が拒否されましたAndroidアプリはサービスアカウント認証情報モードを使用しています

2020年3月31日を過ぎるとファブリックが利用できなくなるため、ファブリックからFirebaseに移行しようとしています。

私はすでに最初のステップを実行しました:Gradleへのプラグインと依存関係の追加、分析jsonファイルの追加、さらにクラッシュレポート、そしてFirebaseコンソールでデータを表示できるため(分析とクラッシュ)、すべて正しいようです。

しかし、アプリ配布システムをBeta + FastlaneからFirebaseに移行するのはそれほど幸運ではありません。 「Distribute Android Apps to testers using Gradle "」というオプションを試しています。すでにプラグインと依存関係を追加してあります。 Gradleタスク./gradlew appDistributionUploadMyVariantを実行します。

正しいプロジェクトのfirebase-adminsdkというユーザーのGoogle Cloud Platform ConsoleからserviceCredentialsFileを取得しています(この名前はFirebaseシステムによって付けられていると思います)。ユーザーのメールはfirebase-adminsdk-xxx@my_project.iam.gserviceaccount.comのようなもので、Firebaseコンソール->設定->サービスアカウント-> Firebase Admin SDKに表示されるものと同じです。

資格情報を使用してjsonファイルをダウンロードしました。gradleはそれを見つけることができます。なぜなら、ファイルに意図的に間違ったパスURLを入力すると、Service credentials file does not existが記録されるためです。このファイルの内容には、上記のいくつかの行で述べたとおり、client_emailおよびproject_idの正しい値が含まれています。

しかし、403エラーが発生します。タスク./gradlew appDistributionUploadMyVariant --infoを実行したときに取得した情報の一部を貼り付けます(私はいくつかの個人情報を非表示にしています):

Task ':app:appDistributionUploadMyVariant' is not up-to-date because:
  Task has not declared any outputs despite executing actions.
Found APK at /MyFolder/app/build/outputs/apk/qa/qaType/app-qa-qaType.apk.
Uploading APK to Firebase App Distribution...
Getting appId from output of google services plugin
-------------- REQUEST  --------------
POST https://oauth2.googleapis.com/token
Accept-Encoding: gzip
User-Agent: Google-HTTP-Java-Client/1.28.0 (gzip)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 808

curl -v --compressed -X POST -H 'Accept-Encoding: gzip' -H 'User-Agent: Google-HTTP-Java-Client/1.28.0 (gzip)' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -d '@-' -- 'https://oauth2.googleapis.com/token' << $$$
Total: 808 bytes
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1N(...)
-------------- RESPONSE --------------
HTTP/1.1 200 OK
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN
Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
Cache-Control: private
Server: scaffolding on HTTPServer2
X-Content-Type-Options: nosniff
Content-Encoding: gzip
Vary: Referer
Vary: X-Origin
Vary: Origin
X-XSS-Protection: 0
Date: Fri, 22 Nov 2019 14:47:29 GMT
Content-Type: application/json; charset=utf-8

Total: 207 bytes
{
  "access_token": "access_token_value",
  "expires_in": 3600,
  "token_type": "Bearer"
}
-------------- REQUEST  --------------
GET https://firebaseappdistribution.googleapis.com/v1alpha/apps/appId
Accept-Encoding: gzip
Authorization: <Not Logged>
User-Agent: Firebase App Distro Client/1.2.0
x-app-distro-api-client-id: com.google.firebase
x-app-distro-api-client-type: gradle
x-app-distro-api-client-version: 1.2.0

curl -v --compressed -H 'Accept-Encoding: gzip' -H 'Authorization: <Not Logged>' -H 'User-Agent: Firebase App Distro Client/1.2.0' -H 'x-app-distro-api-client-id: com.google.firebase' -H 'x-app-distro-api-client-type: gradle' -H 'x-app-distro-api-client-version: 1.2.0' -- 'https://firebaseappdistribution.googleapis.com/v1alpha/apps/appId'
-------------- RESPONSE --------------
HTTP/1.1 403 Forbidden
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN
Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000
Cache-Control: private
Server: ESF
X-Content-Type-Options: nosniff
Content-Encoding: gzip
Vary: Referer
Vary: X-Origin
Vary: Origin
X-XSS-Protection: 0
Date: Fri, 22 Nov 2019 14:47:30 GMT
Content-Type: application/json; charset=UTF-8

Total: 126 bytes
{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

:app:appDistributionUploadMyVariant (Thread[Daemon worker Thread 8,5,main]) completed. Took 1.552 secs.
AAPT2 aapt2-3.4.1-5326820-osx Daemon #0: shutdown

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:appDistributionUploadMyVariant'.
> App Distribution failed to fetch app information: [403] The caller does not have permission

同じ結果で、gradleファイルからappId値を渡そうとしてもしました。

何か案が?

2
SergiBC

エラー「[403]呼び出し元には権限がありません。」許可の問題が原因です。

サービスアカウントの作成方法とjsonのダウンロード場所について this を試して、機能するかどうかを確認できますか?

また、詳細について firebase support にお問い合わせください。 :)

2
Jing Li