我正在尝试从Fabric迁移到Firebase,因为Fabric将于2020年3月31日之后才可用。
我已经完成了第一步:将插件和依赖项添加到gradle,添加分析json文件,甚至崩溃报告,而且一切似乎都是正确的,因为我可以在Firebase控制台中看到数据(分析和崩溃)。
但是我不太幸运将应用分发系统从Beta + Fastlane迁移到Firebase。我正在尝试选项“ 使用Gradle将Android应用分发给测试人员”。我已经添加了插件和依赖项,并且添加得很好,因为我可以运行gradle任务./gradlew appDistributionUploadMyVariant
。
我正在从Google Cloud Platform控制台获取serviceCredentialsFile
用户firebase-adminsdk
(我认为此名称是由Firebase系统指定的),用于正确的项目。用户的电子邮件类似于firebase-adminsdk-xxx@my_project.iam.gserviceaccount.com
,与我在 Firebase控制台->设置->服务帐户-> Firebase管理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
值,结果相同。
有什么主意吗?
答案 0 :(得分:1)
错误“ [403]呼叫者没有权限。”是由权限问题引起的。
您能否尝试遵循this来了解如何创建服务帐户以及在何处下载json,以查看其是否有效?
也欢迎您与firebase support联系以获取更多信息。 :)
答案 1 :(得分:0)
请尝试运行
firebase logout
然后再次登录(或使用令牌)。
我遇到了同样的问题,按照上面提到的所有其他步骤都没有成功。但是,当我使用调试标志运行 firebase appdistribution:distribute --debug foo
时,我注意到我仍然登录到另一个 firebase 实例,这似乎导致了问题。
答案 2 :(得分:0)
服务帐户的角色是:“Firebase App Distribution Admin SDK Service Agent”:
<块引用>使用 Admin SDK 对 Firebase App Distribution 进行读写访问
或作为个人permissions。