繁体   English   中英

java.io.IOException: FIS_AUTH_ERROR in Android Z03548EZFF48D09214119934

[英]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$2.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 上发现了这个与我的崩溃有关的问题,但根本没有确凿的解决方案。 有人遇到过这种问题吗? 提前致谢。

注意:我不使用 Flutter 但是在没有 flutter 的情况下也会发生错误。 设备是带有 Android 10 的三星 A51。

注 2:Firebase 移除了 firebase-core。 问题可能与此有关。 在此处输入图像描述

临时但有效的解决方案。 只需将com.google.firebase:firebase-messaging:20.1.2降级到com.google.firebase:firebase-messaging:20.1.0 显然, 20.1.120.1.2版本中存在某种错误。 应用程序不再崩溃。

更新 (11.04.2020):我在com.google.firebase:firebase-messaging:20.1.5 firebase com.google.firebase:firebase-messaging:20.1.5进行了测试,显然问题已得到修复。


更新 (26.04.2020):

我找到了一个永久的解决方案。 首先将 firebase 依赖项升级到com.google.firebase:firebase-messaging:20.1.6 之后从 firebase 下载 google-services.json。 用当前的替换它。 在那之后build > clean project否则你可以获得

API key expired. Please renew the API key

错误。 密钥没有问题,这是谷歌的某种错误。 如果您完成了这些步骤,请将以下代码添加到您在清单中的 application 标记处声明的顶级 Application 类的 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。 此外,如果您正在调试,请不要忘记将调试SHA-256密钥添加到 firebase。

现在我不再崩溃了。 Firebase 服务完美运行。

您所要做的就是让您使用的 API 密钥对以下 API 具有权限:

  1. Firebase 安装 API
  2. Firebase 云消息传递 API
  3. FCM注册API
  4. 云消息

您可以从您的 google cloud -> APIs & Services -> Credentials 更改限制

FIS_AUTH_ERROR表示Firebase 安装 sdk 的身份验证失败。 如果您使用依赖于 Firebase 安装 sdk(或 FIS)的服务,则需要有效授权。

根据Firebase 云消息传递v20.1.1发行说明

使用 Firebase 自动初始化过程和 Gradle 插件将 google-services.json 转换为资源的应用不受影响。 但是,创建自己的 FirebaseOptions 实例的应用必须提供有效的 API 密钥、Firebase 项目 ID 和应用 ID。

因此,如果您(或您添加的使用 fcm 的服务)使用FirebaseOptions ,则它必须为 FIS 传递一些附加值。

解决方案

  • 降级到 firebase firebase-messaging v20.1.0(虽然不推荐。就像跑题一样)
  • 如果您使用FirebaseOptions提供其他密钥

突然之间,我的一个应用程序中出现了相同的错误 (FIS_AUTH_ERROR),我在其中使用了 Firebase Cloud Messaging。 一切正常,没有任何问题,突然应用程序无法使用 getToken() 获取应用程序/设备令牌。 经过数小时的研究,我发现了一些东西,为我解决了这个问题。 我决定检查文件 google-services.json 中的值,看看它们是否与 Firebase 控制台中我项目设置中的相应参数匹配。 首先,我下载了一个全新的 google-services.json,我将它与我应用程序文件夹中已有的那个进行了比较,它们完全相同,没有任何区别。 在 Firebase 控制台中,我正在一一检查项目 ID、项目编号等。当我找到 Web API 密钥时,它的值看起来与 google-services.json 中的 api_key 非常相似,但两个值仍然不同。 然后我决定编辑该文件,并在 api_key 的位置放置了来自 Web API Key 的值。 然后我清理了项目并重建,然后一切又开始完美地工作。

添加api密钥

正确的解决方法是将“Firebase Installations API”添加到您的 Google API 密钥的限制中(请参阅 google-services.json)。

在您的 Google Cloud 控制台中,它位于 API 和服务中,然后是凭据。 打开 API Key 是查看“限制”。

无需重新编译。

我找到了解决这个问题的方法

1) 在 Android Studio 中,在左侧面板“项目”中将 Android 视图切换到项目视图

2) 将文件 google-services.json NOT 复制到“app”文件夹中(如说明中所述)...但将此文件复制到上层根文件夹中

它会起作用

这是肯定的,(如果您完成了所有配置)那么 firebase 消息传递的版本与其他依赖项不兼容。

您可以在此处检查依赖项,我的解决方案是从implementation 'com.google.firebase:firebase-messaging:20.1.3'降级到implementation 'com.google.firebase:firebase-messaging:20.1.0'

@mahdi-malv、@ambrose-bako、@steeve 是对的。


Firebase Android SDK 于 2 月 27 日(M65) 更新,随后引入了一项新的基础设施服务,即 Firebase Installations SDK,它依赖于Firebase Installations API
Firebase 安装需要有效的 Firebase 选项API keyproject IDapplication ID (又名“ appId ”)才能成功与 Firebase 服务器通信。

与 Firebase Installations API 通信期间的错误表明 Firebase 选项无效或有关 API 密钥的配置错误。

为了缓解这个问题

  • 确保您的应用程序使用来自 Firebase 控制台的最新google-services.json文件中的有效 Firebase 选项: Firebase options: instructions and background
  • 如果您使用API restrictions ,请确保您的应用程序使用的 API 密钥已列入 Firebase Installations API(以及您的应用程序)的白名单: API 限制:说明和背景
  • 关于Application restrictions :将单选按钮设置为None或确保您的应用程序已列入白名单(具有正确的SHA-1 certificate )。

详情请浏览:
https://firebase.google.com/support/privacy/init-options

除了Steeve 的回答之外,Firebase 消息传递凭据应仅限于以下 3 个选定的 API:

Firebase Cloud Messaging API
Firebase Installations API
FCM Registration API

转到Google Cloud Console上的凭据(API 和服务 -> 凭据),单击相关键并选择上面的 3 个 API。

如果您将使用限制为 Android 应用,请确保为您的特定应用添加 SHA-1 指纹。 如果您使用内部应用程序共享,请确保还添加内部应用程序包的 SHA-1, 如此处所述

以防万一,重命名包名称,删除 google-services.json,然后进入 firebase 检查 firebase-database(读\\写)。

然后从firebase项目设置中删除旧包及其哈希,添加新包和哈希后,收到新的google-services.json,之后一切正常

我认为错误是在 firebase 中指定了一个包,但没有哈希

如果您最近更改了google-services.json文件,则需要删除项目的构建文件并重新构建项目。

更新:在调试模式下测试我的应用程序时出现此错误。 在发布版本中,它已解决并正常工作。

也许有点晚了,但希望这些信息可以帮助那里的人。

我也遇到了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 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 文件时提供给您

删除此行:

FirebaseApp.initializeApp(getApplicationContext());

并让 SDK 使用google-services.json自动初始化为我解决了这个问题。

希望这有助于某人:

在我的情况下,我使用了自签名 ca。 所以我需要使用 network-security-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,消息:来自引用者的请求被阻止。

所以我从谷歌控制台创建了新的 API 密钥,限制 API 用于:云消息传递、FCM 注册 API、Firebase 云消息传递 API、Firebase 安装 API。 和应用限制:无。

问题解决了!

我使用:com.google.firebase: firebase -messaging: 20.1.0 firebase_messaging : ^10.0.2

就我而言,Crashlytics 仅在少数三星设备上报告了这一点,我认为这与 Google 服务在某些三星设备上的实施方式有关,因此您无能为力。

对我有用的最佳解决方案是升级依赖项并清理并重新构建项目

我与这个异常斗争了将近 2 天,现在解决了。

  1. 首先确保Ambrose 的回答中提到的限制 API
  2. 在 firebase 控制台和云控制台凭据上添加所有 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

另请注意,FirebaseInstanceId 需要 Google Play 服务来创建令牌,如果没有它,它将在设备上失败。

用 Google Play 创建一个新的 Emulator 并重新启动我的 IDE 后,问题就解决了。

尝试了上述所有解决方案。 他们没有为我工作。 但后来我从设备中删除了该应用程序并再次安装。 这有帮助。

"

方法一

Go 到您的谷歌云控制台https://console.cloud.google.com/

然后选择您的项目并检查凭据中auto-created by firebase token credentials -> API keys 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/issues96/issues/6

我想一个很好的赠品是curl可以正常工作,但它会在 Android 上失败。

对我来说,它只是:

build > clean project

因为我多次更改 google-services.json 文件。

当我在手机上安装应用程序时出现此错误。 模拟器没有报错。 我尝试了几乎所有解决方案,但就我而言,删除应用程序、编译并再次构建它就足够了。 1天后我意识到了这一点
我的依赖:

implementation platform('com.google.firebase:firebase-bom:26.4.0')
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.firebase:firebase-analytics:17.3.0'
implementation 'com.google.firebase:firebase-installations:17.0.1'
implementation "com.google.android.gms:play-services-base:16.1.0"
implementation "com.google.firebase:firebase-core:16.0.8"
implementation "com.google.firebase:firebase-messaging:20.1.0"

在尝试了上述所有建议之后,我可以解决这个问题的唯一方法是创建一个新的 Firebase 项目。 The problem started for me after creating a new Angular Ionic project as a way to upgrade to Angular 14, Capacitor 4 and Ionic 6. Copying the same google-service.json to the new project (along with all src code files) and adjusting the build.gradle 和 AndroidManifest.xml 中的 package/applicationId - 创建了这个问题。 无论如何,如前所述,一个 3 分钟的新 Firebase 项目流程最终解决了所有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM