В разрешении отказано в приложении для 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 с тем же результатом.
Есть идеи?
3 ответа
Ошибка "[403] У вызывающего абонента нет разрешения." Вызвана проблемой разрешения. â € ‹â €‹ â € ‹â €‹ â € ‹â €‹
Можете ли вы попробовать следовать этому, чтобы узнать, как создать учетную запись службы и где скачать json, чтобы увидеть, работает ли он?
Вы также можете обратиться в службу поддержки firebase за дополнительной информацией.:)
Роль для учетной записи службы будет: «Агент службы SDK администратора распространения приложений Firebase»:
Доступ для чтения и записи к распространению приложений Firebase с помощью Admin SDK
или как индивидуальные разрешения .
Пожалуйста, попробуйте запустить
firebase logout
а затем войдите снова (или используйте токен).
У меня была такая же проблема, и я безуспешно выполнил все остальные шаги, упомянутые выше. Однако когда я запустил
firebase appdistribution:distribute --debug foo
с флагом отладки я заметил, что все еще вошел в другой экземпляр firebase, что, похоже, вызвало проблему.