Разрешение отклонено с помощью приложения для Android распространения Firebase с использованием режима учетных данных учетной записи службы

Я пытаюсь перейти с Fabric на Firebase, поскольку Fabric будет недоступна после 31 марта 2020 г.

Я уже сделал первые шаги: добавил плагины и зависимости в gradle, добавил файл аналитики json, даже отчеты о сбоях, и все кажется правильным, потому что я могу видеть данные в консоли Firebase (аналитика и сбои).

Но мне не так повезло с переносом системы распространения приложений с Beta + Fastlane на Firebase. Я пробую вариант «Распространять приложения Android среди тестировщиков с помощью Gradle». Я уже добавил плагин и зависимость, и он хорошо добавлен, потому что я могу запустить задачу gradle ./gradlew appDistributionUploadMyVariant.

Я получаю serviceCredentialsFile из консоли Google Cloud Platform для пользователя с именем firebase-adminsdk (я думаю, что это имя дано системой 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

Я также попытался передать значение appId из файла gradle с тем же результатом.

Любая идея?


person SergiBC    schedule 22.11.2019    source источник


Ответы (3)


Ошибка «[403] У вызывающего абонента нет разрешения». вызвано проблемой разрешения.

Можете ли вы попробовать выполнить это, чтобы узнать, как создать учетную запись службы и где ее скачать json, чтобы узнать, работает ли он?

Вы также можете обратиться в службу поддержки firebase за дополнительной информацией. :)

person Jing Li    schedule 26.11.2019
comment
Спасибо @Jing Li, он работает над созданием учетной записи службы, подобной вашей предложенной ссылке. Спасибо. - person SergiBC; 03.12.2019
comment
Распространение приложений Firebase говорит Add the Firebase Quality Admin role здесь [firebase.google.com/ docs / app-distribution / android /, который не работает. Мы должны добавить минимальную роль / права в качестве администратора Firebase для успешного распространения приложения с помощью gradle с использованием командной строки. - person Varad Mondkar; 02.01.2020
comment
Проверьте console.cloud.google.com/iam-admin. Думаю, ваша роль должна быть как минимум редактором, чтобы избавиться от этой ошибки. - person jakub-adamczewski; 02.10.2020

Пожалуйста, попробуйте запустить

firebase logout

а затем войдите снова (или используйте токен).

У меня была такая же проблема, и я безуспешно выполнил все остальные шаги, упомянутые выше. Однако, когда я запустил firebase appdistribution:distribute --debug foo с флагом отладки, я заметил, что все еще вошел в другой экземпляр firebase, что, казалось, вызывало проблему.

person r-hold    schedule 26.05.2021

Роль для учетной записи службы будет следующей: Агент службы SDK администратора распространения приложений Firebase:

Доступ для чтения и записи к распространению приложений Firebase с помощью Admin SDK

или как отдельные разрешения.

person Martin Zeitler    schedule 15.06.2021