A 有一个大项目,有很多依赖项,包括 Firebase。
现在 com.google.firebase:firebase-messaging 的版本为 17.3.3。我想更新到20.2.1。
应用程序启动后,我收到下一个错误:
Firebase-Installations: Error when communicating with the Firebase Installations server API. HTTP response: [403 Forbidden: {
"error": {
"code": 403,
"message": "Requests from this Android client application com.example are blocked.",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url": "https://console.developers.google.com/project/61947752567/apiui/credential"
}
]
}
]
}
}
]
Firebase Installations can not communicate with Firebase server APIs due to invalid configuration. Please update your Firebase initialization process and set valid Firebase options (API key, Project ID, Application ID) when initializing Firebase.
我们使用 google-services.json 在我们的应用程序中配置 FCM。我们不在代码中使用 FirebaseOptions。
我注意到问题与将 FCM 更新到 20.1.1 有关。 Google 对 FCM 20.1.1 的评价:
Firebase 云消息传递和 Firebase 实例 ID SDK 现在间接依赖于 Firebase 安装 SDK。如果您使用云消息传递并将依赖项更新到最新版本,请确保推送通知仍然按预期工作。
我阅读了 Google 的说明,但没有成功。我尝试过的:
事实证明,从 APK 应用程序安装的应用程序可以正常工作!如果我使用 .aab(应用程序包) - 我会收到此错误。 我还使用最新的捆绑工具。
firebase-messaging 包含在我们的主应用程序模块中,它是应用程序的主要功能之一。我不是在谈论动态模块 - 问题在于主模块。
我无法再次设置 FCM,因为现在有很多用户使用此应用程序。另外,我不明白为什么我必须设置 valid 选项(API 密钥、项目 ID、应用程序 ID),如果这个选项在过去几年中运行良好并且 google-services.json 没有更改。
如有任何想法,我将不胜感激。
附注我无法使用 FCM 20.1.0,因为我需要集成 ML Kit 依赖项。它仅适用于实际版本的 FCM,并且在 FCM 20.1.0 中会崩溃
就我而言,我在 1 个 Firebase 项目中提出了 2 个应用程序。从firebase下载的google-services.json有2个客户端信息。我在这个设置中遇到了同样的错误。
{
"project_info": {
"project_number": "xxxxxx",
"firebase_url": "xxxxxx.firebaseio.com",
"project_id": "xxxxxx",
......
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "xxxxxx",
"android_client_info": {
"package_name": "application-1"
}
},
.......
"api_key": [
{
"current_key": "(API-Key for application1)"
},
{
"current_key": "(API-Key for application2)"
}
],
.......
},
{
"client_info": {
"mobilesdk_app_id": "xxxxxx",
"android_client_info": {
"package_name": "application-2"
}
},
......
"api_key": [
{
"current_key": "(API-Key for application1)"
},
{
"current_key": "(API-Key for application2)"
}
],
......
}
],
"configuration_version": "1"
}
我编辑了 google-services.json 并使 application-2 变得简单。这个效果很好。
{
"project_info": {
"project_number": "xxxxxx",
"firebase_url": "xxxxxx.firebaseio.com",
"project_id": "xxxxxx",
......
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "xxxxxx",
"android_client_info": {
"package_name": "application-2"
}
},
......
"api_key": [
{
"current_key": "(API-Key for application2)"
}
],
......
}
],
"configuration_version": "1"
}
有时项目需要一个简单的rebuild/clean,因为预编译的过时文件(json/xml)保留在项目的预编译版本中。
在 Android IDE 中运行:Build ->“Clean Project” 和 “Build”->“Rebuild Project”。
这并非在所有情况下都有帮助。重新下载
google-services.json
文件可能比手动编辑/检查更好。替换文件后不要忘记重建/清理。
也许你也遇到了和我一样的问题。前往 https://console.cloud.google.com/apis/credentials 检查 api 密钥的“Android 限制”。调试版本的指纹可能会被删除,因为有一天谷歌会发送电子邮件要求您删除(出于安全原因等)。添加回来,稍后它就会再次工作。