java.io.IOException:FIS_AUTH_ERROR 在 Android Firebase 中
java.io.IOException: FIS_AUTH_ERROR in Android Firebase
我在使用 Firebase 服务时遇到以下错误。
E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation.
D/AndroidRuntime: Shutting down VM
com.google.android.gms.tasks.RuntimeExecutionException: java.io.IOException: FIS_AUTH_ERROR
at com.google.android.gms.tasks.zzu.getResult(Unknown Source:15)
at com.myApp.MainActivity.onComplete(MainActivity.java:349)
at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7804)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Caused by: java.io.IOException: FIS_AUTH_ERROR
at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:82)
at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:96)
at com.google.firebase.iid.zzx.then(com.google.firebase:firebase-iid@@20.1.0:4)
at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
这是发生崩溃的代码部分:
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.getResult() != null && task.isSuccessful()) {
// Get new Instance ID token
firebaseToken = task.getResult().getToken();
prefs.edit().putString("firebaseToken", firebaseToken).apply();
registerToken();
}
}
});
错误发生在onComplete。这是我使用的 firebase 依赖项:
// FIREBASE
implementation 'com.google.firebase:firebase-analytics:17.2.3'
implementation 'com.google.firebase:firebase-messaging:20.1.2'
implementation 'com.google.firebase:firebase-appindexing:19.1.0'
implementation 'com.google.firebase:firebase-ads:19.0.0'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0-beta01'
我在 Github 上发现 this issue 与我的崩溃有关,但根本没有确定的解决方案。有人遇到过这种问题吗?提前致谢。
注意:我不使用 Flutter,但是在没有 flutter 的情况下也会出现错误。设备是三星 A51 Android 10.
注 2:Firebase 删除了 firebase-core。问题可能与此有关。
临时但可行的解决方案。只需将 com.google.firebase:firebase-messaging:20.1.2
降级到 com.google.firebase:firebase-messaging:20.1.0
。显然,20.1.1
和 20.1.2
版本中存在某种错误。应用程序不再崩溃。
更新(2020 年 4 月 11 日):我在 com.google.firebase:firebase-messaging:20.1.5
中进行了测试,显然问题已得到解决。
更新(2020 年 4 月 26 日):
我找到了永久解决方案。首先将 firebase 依赖项升级为 com.google.firebase:firebase-messaging:20.1.6。然后从 firebase 下载 google-services.json。用当前的替换它。之后 build > clean project
否则你可以得到
API key expired. Please renew the API key
错误。密钥没有问题,是 Google 的某种错误。如果您完成了这些步骤,请将以下代码添加到您的顶级应用程序 class 的 onCreate 中,该应用程序是您在应用程序标签的清单中声明的。
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("APP ID") // Required for Analytics.
.setProjectId("PROJECT ID") // Required for Firebase Installations.
.setApiKey("GOOGLE API KEY") // Required for Auth.
.build();
FirebaseApp.initializeApp(this, options, "FIREBASE APP NAME");
您可以在 firebase > 项目设置中找到您的应用程序 ID。此外,如果您正在调试,请不要忘记将 debug SHA-256
键添加到 firebase。
现在我不再崩溃了。 Firebase 服务完美运行。
您所要做的就是让您正在使用的 API 密钥具有以下 API 的权限:
- Firebase 安装 API
- Firebase 云消息传递 API
- FCM 注册API
- 云消息
您可以从 google 云更改限制 -> APIs & Services -> Credentials
这是肯定的,(如果您完成了所有配置)那么 firebase 消息传递的版本与其他依赖项不兼容。
您可以检查依赖项 here,我的解决方案是从 implementation 'com.google.firebase:firebase-messaging:20.1.3'
降级到 implementation 'com.google.firebase:firebase-messaging:20.1.0'
FIS_AUTH_ERROR
表示 Firebase 安装 sdk 的身份验证失败。如果您使用依赖Firebase安装sdk(或FIS)的服务,您需要一个有效的授权。
根据Firebase cloud messaging v20.1.1
release note:
Apps that use the Firebase auto-initialization process and the Gradle plugin to convert google-services.json into resources are unaffected. However, apps that create their own FirebaseOptions instances must provide a valid API key, Firebase project ID, and application ID.
因此,如果您(或您添加的使用 fcm 的服务)使用 FirebaseOptions
,它必须为 FIS 传递一些额外的值。
解决方案
- 降级到
firebase-messaging
的 v20.1.0(虽然不推荐。这就像 运行 的问题)
- 如果您使用
FirebaseOptions
,请提供额外的密钥
正确的解决方法是将 "Firebase Installations API" 添加到 Google API 键的限制中(参见 google-services.json)。
在您的 Google 云控制台中,它位于 APIs & Services,然后是 Credentials。打开API 关键是看"Restrictions".
无需重新编译。
@mahdi-malv、@ambrose-bako、@steeve 是对的。
Firebase Android SDK updates on February 27 (M65) and afterwards introduced a new infrastructure service, the Firebase Installations SDK which comes with a dependency on the Firebase Installations API。
Firebase 安装需要有效的 Firebase 选项 API key
、project ID
和 application ID
(a.k.a。“appId
”)才能与 Firebase 服务器成功通信。
与 Firebase 安装通信期间的错误 API 表示 Firebase 选项无效或有关 API 键的配置错误。
缓解问题
- 确保您的应用程序使用来自 Firebase 控制台的最新
google-services.json
文件中的有效 Firebase 选项:
Firebase options: instructions and background.
- 如果您使用
API restrictions
,请确保您的应用程序使用的 API 密钥已列入 Firebase 安装 API(以及您的应用程序)的白名单:
API restrictions: instructions and background
- 关于
Application restrictions
:将单选按钮设置为 None
或确保您的应用已列入白名单(具有正确的 SHA-1 certificate
)。
详情请访问:
https://firebase.google.com/support/privacy/init-options
我找到了解决这个问题的办法
1) 在 Android Studio 中,在左侧面板中 "Project" 切换 Android 视图到项目视图
2) 将文件 google-services.json 复制到 "app" 文件夹中(如说明中所述)...但将此文件复制到上层根文件夹中
它会起作用
以防万一,重命名了包名,删除了google-services.json,
并进入 firebase 检查 firebase-database (read\write).
然后从 firebase 项目设置中删除旧包及其散列,
添加新包和哈希后,收到新的 google-services.json,之后一切正常
我认为错误是在 firebase 中指定了一个包,但没有散列
除了 之外,Firebase 消息传递凭据应仅限于这 3 个选定的 API:
Firebase Cloud Messaging API
Firebase Installations API
FCM Registration API
转到 Google Cloud Console 上的凭据(API 和服务 -> 凭据),单击相关键和 select 上面的 3 个 API。
如果您限制对 Android 应用的使用,请确保为您的特定应用添加 SHA-1 指纹。如果您使用 内部应用共享,请确保还添加内部应用包的 SHA-1 as described here。
可能有点晚了,但希望这些信息可以帮助那里的人。
我也遇到了 firebase-messaging:21.0.1
的问题。
我遵循了此线程中给出的所有说明,但没有任何帮助。
奇怪的是之前的错误E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation
logcat 出现 Firebase Installations Service is unavailable
.
经过一番调查,解决方案如下。
我在我的开发服务器上使用了一个自签名证书,并在我的应用程序中信任它,如下所述:https://developer.android.com/training/articles/security-ssl.html#CommonProblems
不知何故,这破坏了 android 中的整个 SSL 握手,我无法再向 Firebase 安装服务进行身份验证。
删除它并为我的开发环境使用纯 http 后,一切都像魅力一样再次运行。 (当然,对于我的产品服务器,我使用的是 ROOT 可信证书,所以这里没有问题)
你需要添加
apply plugin: 'com.google.gms.google-services'
implementation platform('com.google.firebase:firebase-bom:x.x.x')
implementation 'com.google.firebase:firebase-analytics'
给你的 app/build.gradle ,
这些代码将在 firebase 控制台
上创建 google.services 文件时提供给您
我的一个应用程序突然出现了同样的错误 (FIS_AUTH_ERROR),我在其中使用了 Firebase 云消息传递。一切正常,没有任何问题,突然应用程序无法使用 getToken() 获取 app/device 令牌。经过数小时的研究,我发现了一些东西,这为我解决了问题。我决定检查文件 google-services.json 中的值,看看它们是否与我项目设置中 Firebase 控制台中的相应参数相匹配。首先,我下载了一个全新的 google-services.json,我将其与应用程序文件夹中已有的进行比较,它们完全相同,没有任何区别。在 Firebase 控制台中,我正在逐一检查项目 ID、项目编号等。当我访问 Web API Key 时,它的值看起来非常类似于 google 中的 api_key- services.json,但两个值仍然不同。然后我决定编辑该文件,并在 api_key 的位置放置了来自 Web API Key 的值。然后我清理了项目并重建了,然后一切又开始完美地工作了。
要删除这一行:
FirebaseApp.initializeApp(getApplicationContext());
让 SDK 自动初始化 google-services.json
帮我解决了这个问题。
如果您最近更改了 google-services.json 文件,您需要删除项目的构建文件并重新构建项目。
更新: 我在调试模式下测试我的应用程序时遇到此错误。在发布版本中,它已被解决并正常工作。
https://stacklearn.ir/course/android-introductory-training-course
希望这对某人有帮助:
在我的情况下,我使用的是自签名 ca。
所以我需要使用网络安全-config.xml
经过大量的尝试和错误,最后我在信任锚中添加了系统目录,如下所示,FIS_AUTH_ERROR 消失了,Firebase 工作了。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" /> <!-- for Firebase -->
<certificates src="user" /> <!-- for tooling. Ex:Charles -->
<certificates src="@raw/ca_1"/> <!-- my self-signed ca-->
</trust-anchors>
</base-config>
</network-security-config>
非常非常困惑,我是如何搜索此错误的解决方案(使用 FIS_AUTH_ERROR),但是通过@Andreas Rayo Kniep 的回答,尤其是 CURL 命令测试,我知道我的问题出了什么问题。
用于测试 firebase conf 的 CURL 命令:
curl -H "content-type: application/json" -d "{appId: 'YOUR-APP-ID', sdkVersion: 't:1'}" https://firebaseinstallations.googleapis.com/v1/projects/PROJECT-NAME/installations/?key=API-KEY;
我必须 更改 google-services.json 处的 API 键,因为它的状态:PERMISSION_DENIED,消息:请求来自引用者被阻止。
所以我从 google 控制台创建新的 API 密钥,限制 API 用于:云消息传递、FCM 注册 API、Firebase 云消息传递 API, Firebase 安装 API。
和应用限制:None.
问题已解决!
我使用:
com.google.firebase:firebase-消息:20.1.0
firebase_messaging: ^10.0.2
就我而言,Crashlytics 仅在少数三星设备上报告此问题,我认为这与 Google 服务在某些三星设备上的实施方式有关,因此您无能为力。
最适合我的解决方案是升级依赖项并清理和重新构建项目
我和这个异常吵了将近2天,现在解决了。
- 首先确保限制 API 如前所述
- 在 firebase 控制台和 cloud console credential 上添加 ALL SHA-1,
在我的例子中,我需要 4 个 SHA-1,来自:
- 调试密钥库
- 发布密钥库
- firebase 分发(如果使用 .AAB)
- 通过 Playstore 的签名认证发布,如下所示:
我认为将最后一个 SHA-1 添加到云控制台可以使我的应用程序运行良好。
希望这个答案对其他人有帮助。
快乐代码!
我在新计算机上重新下载 Android Studio 时遇到了同样的问题。我没有在我的 SDK 工具中设置 Google Play 服务,我的模拟器也没有 Google Play 商店。请参阅此讨论 https://github.com/firebase/firebase-android-sdk/issues/1286#issuecomment-951403455
Also note that FirebaseInstanceId requires Google Play services to
create a token and it will fail on devices without it.
使用 Google Play 创建一个新的模拟器并重新启动我的 IDE 后,问题就解决了。
已尝试以上所有解决方案。他们没有为我工作。但后来我从设备上删除了应用程序并重新安装。这有帮助。
方法一
转到您的 google 云控制台 https://console.cloud.google.com/
然后选择您的项目并在credentials -> API keys
中勾选auto-created by firebase token
。 Select 您的密钥并检查是否有您必须配置的任何限制。清除限制并重新构建您的应用程序。
方法二
检查您的 fingerprints
-> project settings
-> 在 firebase console
中并与您的密钥库文件的指纹算法进行交叉检查。然后下载新的 google-services.json
文件并将其替换为 android/app
中的现有文件
对我来说,我忘记了我们在应用程序的早期阶段实施了 SSL 固定,因此我们必须下载并信任根 Google Trust Services CA。
感谢这个 GitHub 帖子提醒我考虑 SSL 固定:https://github.com/invertase/react-native-firebase/issues/5522#issuecomment-884960850
我想一个很好的赠品是 curl
可以正常工作,但它会在 Android 上失败。
对我来说,它只是:
build > clean project
因为我多次更改 google-services.json 文件。
我在使用 Firebase 服务时遇到以下错误。
E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation.
D/AndroidRuntime: Shutting down VM
com.google.android.gms.tasks.RuntimeExecutionException: java.io.IOException: FIS_AUTH_ERROR
at com.google.android.gms.tasks.zzu.getResult(Unknown Source:15)
at com.myApp.MainActivity.onComplete(MainActivity.java:349)
at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7804)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Caused by: java.io.IOException: FIS_AUTH_ERROR
at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:82)
at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:96)
at com.google.firebase.iid.zzx.then(com.google.firebase:firebase-iid@@20.1.0:4)
at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
这是发生崩溃的代码部分:
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.getResult() != null && task.isSuccessful()) {
// Get new Instance ID token
firebaseToken = task.getResult().getToken();
prefs.edit().putString("firebaseToken", firebaseToken).apply();
registerToken();
}
}
});
错误发生在onComplete。这是我使用的 firebase 依赖项:
// FIREBASE
implementation 'com.google.firebase:firebase-analytics:17.2.3'
implementation 'com.google.firebase:firebase-messaging:20.1.2'
implementation 'com.google.firebase:firebase-appindexing:19.1.0'
implementation 'com.google.firebase:firebase-ads:19.0.0'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0-beta01'
我在 Github 上发现 this issue 与我的崩溃有关,但根本没有确定的解决方案。有人遇到过这种问题吗?提前致谢。
注意:我不使用 Flutter,但是在没有 flutter 的情况下也会出现错误。设备是三星 A51 Android 10.
注 2:Firebase 删除了 firebase-core。问题可能与此有关。
临时但可行的解决方案。只需将 com.google.firebase:firebase-messaging:20.1.2
降级到 com.google.firebase:firebase-messaging:20.1.0
。显然,20.1.1
和 20.1.2
版本中存在某种错误。应用程序不再崩溃。
更新(2020 年 4 月 11 日):我在 com.google.firebase:firebase-messaging:20.1.5
中进行了测试,显然问题已得到解决。
更新(2020 年 4 月 26 日):
我找到了永久解决方案。首先将 firebase 依赖项升级为 com.google.firebase:firebase-messaging:20.1.6。然后从 firebase 下载 google-services.json。用当前的替换它。之后 build > clean project
否则你可以得到
API key expired. Please renew the API key
错误。密钥没有问题,是 Google 的某种错误。如果您完成了这些步骤,请将以下代码添加到您的顶级应用程序 class 的 onCreate 中,该应用程序是您在应用程序标签的清单中声明的。
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("APP ID") // Required for Analytics.
.setProjectId("PROJECT ID") // Required for Firebase Installations.
.setApiKey("GOOGLE API KEY") // Required for Auth.
.build();
FirebaseApp.initializeApp(this, options, "FIREBASE APP NAME");
您可以在 firebase > 项目设置中找到您的应用程序 ID。此外,如果您正在调试,请不要忘记将 debug SHA-256
键添加到 firebase。
现在我不再崩溃了。 Firebase 服务完美运行。
您所要做的就是让您正在使用的 API 密钥具有以下 API 的权限:
- Firebase 安装 API
- Firebase 云消息传递 API
- FCM 注册API
- 云消息
您可以从 google 云更改限制 -> APIs & Services -> Credentials
这是肯定的,(如果您完成了所有配置)那么 firebase 消息传递的版本与其他依赖项不兼容。
您可以检查依赖项 here,我的解决方案是从 implementation 'com.google.firebase:firebase-messaging:20.1.3'
降级到 implementation 'com.google.firebase:firebase-messaging:20.1.0'
FIS_AUTH_ERROR
表示 Firebase 安装 sdk 的身份验证失败。如果您使用依赖Firebase安装sdk(或FIS)的服务,您需要一个有效的授权。
根据Firebase cloud messaging v20.1.1
release note:
Apps that use the Firebase auto-initialization process and the Gradle plugin to convert google-services.json into resources are unaffected. However, apps that create their own FirebaseOptions instances must provide a valid API key, Firebase project ID, and application ID.
因此,如果您(或您添加的使用 fcm 的服务)使用 FirebaseOptions
,它必须为 FIS 传递一些额外的值。
解决方案
- 降级到
firebase-messaging
的 v20.1.0(虽然不推荐。这就像 运行 的问题) - 如果您使用
FirebaseOptions
,请提供额外的密钥
正确的解决方法是将 "Firebase Installations API" 添加到 Google API 键的限制中(参见 google-services.json)。
在您的 Google 云控制台中,它位于 APIs & Services,然后是 Credentials。打开API 关键是看"Restrictions".
无需重新编译。
@mahdi-malv、@ambrose-bako、@steeve 是对的。
Firebase Android SDK updates on February 27 (M65) and afterwards introduced a new infrastructure service, the Firebase Installations SDK which comes with a dependency on the Firebase Installations API。
Firebase 安装需要有效的 Firebase 选项 API key
、project ID
和 application ID
(a.k.a。“appId
”)才能与 Firebase 服务器成功通信。
与 Firebase 安装通信期间的错误 API 表示 Firebase 选项无效或有关 API 键的配置错误。
缓解问题
- 确保您的应用程序使用来自 Firebase 控制台的最新
google-services.json
文件中的有效 Firebase 选项: Firebase options: instructions and background. - 如果您使用
API restrictions
,请确保您的应用程序使用的 API 密钥已列入 Firebase 安装 API(以及您的应用程序)的白名单: API restrictions: instructions and background - 关于
Application restrictions
:将单选按钮设置为None
或确保您的应用已列入白名单(具有正确的SHA-1 certificate
)。
详情请访问:
https://firebase.google.com/support/privacy/init-options
我找到了解决这个问题的办法
1) 在 Android Studio 中,在左侧面板中 "Project" 切换 Android 视图到项目视图
2) 将文件 google-services.json 复制到 "app" 文件夹中(如说明中所述)...但将此文件复制到上层根文件夹中
它会起作用
以防万一,重命名了包名,删除了google-services.json, 并进入 firebase 检查 firebase-database (read\write).
然后从 firebase 项目设置中删除旧包及其散列, 添加新包和哈希后,收到新的 google-services.json,之后一切正常
我认为错误是在 firebase 中指定了一个包,但没有散列
除了
Firebase Cloud Messaging API
Firebase Installations API
FCM Registration API
转到 Google Cloud Console 上的凭据(API 和服务 -> 凭据),单击相关键和 select 上面的 3 个 API。
如果您限制对 Android 应用的使用,请确保为您的特定应用添加 SHA-1 指纹。如果您使用 内部应用共享,请确保还添加内部应用包的 SHA-1 as described here。
可能有点晚了,但希望这些信息可以帮助那里的人。
我也遇到了 firebase-messaging:21.0.1
的问题。
我遵循了此线程中给出的所有说明,但没有任何帮助。
奇怪的是之前的错误E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation
logcat 出现 Firebase Installations Service is unavailable
.
经过一番调查,解决方案如下。
我在我的开发服务器上使用了一个自签名证书,并在我的应用程序中信任它,如下所述:https://developer.android.com/training/articles/security-ssl.html#CommonProblems
不知何故,这破坏了 android 中的整个 SSL 握手,我无法再向 Firebase 安装服务进行身份验证。
删除它并为我的开发环境使用纯 http 后,一切都像魅力一样再次运行。 (当然,对于我的产品服务器,我使用的是 ROOT 可信证书,所以这里没有问题)
你需要添加
apply plugin: 'com.google.gms.google-services'
implementation platform('com.google.firebase:firebase-bom:x.x.x')
implementation 'com.google.firebase:firebase-analytics'
给你的 app/build.gradle , 这些代码将在 firebase 控制台
上创建 google.services 文件时提供给您我的一个应用程序突然出现了同样的错误 (FIS_AUTH_ERROR),我在其中使用了 Firebase 云消息传递。一切正常,没有任何问题,突然应用程序无法使用 getToken() 获取 app/device 令牌。经过数小时的研究,我发现了一些东西,这为我解决了问题。我决定检查文件 google-services.json 中的值,看看它们是否与我项目设置中 Firebase 控制台中的相应参数相匹配。首先,我下载了一个全新的 google-services.json,我将其与应用程序文件夹中已有的进行比较,它们完全相同,没有任何区别。在 Firebase 控制台中,我正在逐一检查项目 ID、项目编号等。当我访问 Web API Key 时,它的值看起来非常类似于 google 中的 api_key- services.json,但两个值仍然不同。然后我决定编辑该文件,并在 api_key 的位置放置了来自 Web API Key 的值。然后我清理了项目并重建了,然后一切又开始完美地工作了。
要删除这一行:
FirebaseApp.initializeApp(getApplicationContext());
让 SDK 自动初始化 google-services.json
帮我解决了这个问题。
如果您最近更改了 google-services.json 文件,您需要删除项目的构建文件并重新构建项目。
更新: 我在调试模式下测试我的应用程序时遇到此错误。在发布版本中,它已被解决并正常工作。
https://stacklearn.ir/course/android-introductory-training-course
希望这对某人有帮助:
在我的情况下,我使用的是自签名 ca。 所以我需要使用网络安全-config.xml
经过大量的尝试和错误,最后我在信任锚中添加了系统目录,如下所示,FIS_AUTH_ERROR 消失了,Firebase 工作了。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" /> <!-- for Firebase -->
<certificates src="user" /> <!-- for tooling. Ex:Charles -->
<certificates src="@raw/ca_1"/> <!-- my self-signed ca-->
</trust-anchors>
</base-config>
</network-security-config>
非常非常困惑,我是如何搜索此错误的解决方案(使用 FIS_AUTH_ERROR),但是通过@Andreas Rayo Kniep 的回答,尤其是 CURL 命令测试,我知道我的问题出了什么问题。
用于测试 firebase conf 的 CURL 命令: curl -H "content-type: application/json" -d "{appId: 'YOUR-APP-ID', sdkVersion: 't:1'}" https://firebaseinstallations.googleapis.com/v1/projects/PROJECT-NAME/installations/?key=API-KEY;
我必须 更改 google-services.json 处的 API 键,因为它的状态:PERMISSION_DENIED,消息:请求来自引用者被阻止。
所以我从 google 控制台创建新的 API 密钥,限制 API 用于:云消息传递、FCM 注册 API、Firebase 云消息传递 API, Firebase 安装 API。 和应用限制:None.
问题已解决!
我使用: com.google.firebase:firebase-消息:20.1.0 firebase_messaging: ^10.0.2
就我而言,Crashlytics 仅在少数三星设备上报告此问题,我认为这与 Google 服务在某些三星设备上的实施方式有关,因此您无能为力。
最适合我的解决方案是升级依赖项并清理和重新构建项目
我和这个异常吵了将近2天,现在解决了。
- 首先确保限制 API 如前所述
- 在 firebase 控制台和 cloud console credential 上添加 ALL SHA-1, 在我的例子中,我需要 4 个 SHA-1,来自:
- 调试密钥库
- 发布密钥库
- firebase 分发(如果使用 .AAB)
- 通过 Playstore 的签名认证发布,如下所示:
我认为将最后一个 SHA-1 添加到云控制台可以使我的应用程序运行良好。 希望这个答案对其他人有帮助。 快乐代码!
我在新计算机上重新下载 Android Studio 时遇到了同样的问题。我没有在我的 SDK 工具中设置 Google Play 服务,我的模拟器也没有 Google Play 商店。请参阅此讨论 https://github.com/firebase/firebase-android-sdk/issues/1286#issuecomment-951403455
Also note that FirebaseInstanceId requires Google Play services to create a token and it will fail on devices without it.
使用 Google Play 创建一个新的模拟器并重新启动我的 IDE 后,问题就解决了。
已尝试以上所有解决方案。他们没有为我工作。但后来我从设备上删除了应用程序并重新安装。这有帮助。
方法一
转到您的 google 云控制台 https://console.cloud.google.com/
然后选择您的项目并在credentials -> API keys
中勾选auto-created by firebase token
。 Select 您的密钥并检查是否有您必须配置的任何限制。清除限制并重新构建您的应用程序。
方法二
检查您的 fingerprints
-> project settings
-> 在 firebase console
中并与您的密钥库文件的指纹算法进行交叉检查。然后下载新的 google-services.json
文件并将其替换为 android/app
对我来说,我忘记了我们在应用程序的早期阶段实施了 SSL 固定,因此我们必须下载并信任根 Google Trust Services CA。
感谢这个 GitHub 帖子提醒我考虑 SSL 固定:https://github.com/invertase/react-native-firebase/issues/5522#issuecomment-884960850
我想一个很好的赠品是 curl
可以正常工作,但它会在 Android 上失败。
对我来说,它只是:
build > clean project
因为我多次更改 google-services.json 文件。