java.io.IOException:Android Firebase 中的 FIS_AUTH_ERROR

Ayk*_*dağ 24 android ioexception 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)
Run Code Online (Sandbox Code Playgroud)

这是发生崩溃的代码部分:

        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();
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

错误发生在 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'
Run Code Online (Sandbox Code Playgroud)

我在 Github 上发现这个问题与我的崩溃有关,但根本没有决定性的解决方案。有没有人遇到过这种问题?提前致谢。

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

注 2:Firebase 删除了 firebase-core。问题可能与此有关。在此处输入图片说明

Ayk*_*dağ 20

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

更新(2020 年 4 月 11 日):我进行了测试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
Run Code Online (Sandbox Code Playgroud)

错误。密钥没有问题,这是谷歌的某种错误。如果您完成了这些步骤,请将以下代码添加到您在清单中的 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");
Run Code Online (Sandbox Code Playgroud)

您可以在 firebase > 项目设置中找到您的应用 ID。此外,如果您正在调试,请不要忘记将调试SHA-256密钥添加到 firebase。

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

  • 这似乎违背了 google-services.json 的全部目的,不是吗?我不手动设置 FirebaseOptions,因为 json 应该为我做这件事。 (17认同)
  • 奇迹般有效。请注意,答案中提到的“ApiKey”是控制台中的“Web API key” (3认同)
  • 另外添加 SHA-1 不起作用,Firebase 的更新看起来很疯狂。 (2认同)

小智 16

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

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

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


小智 13

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

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

无需重新编译。


gre*_*lon 10

除了Steeve 的回答之外,Firebase Messaging 凭证还应限制为以下 3 个选定的 API:

Firebase Cloud Messaging API
Firebase Installations API
FCM Registration API
Run Code Online (Sandbox Code Playgroud)

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

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


Hos*_*ami 10

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

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

https://stacklearn.ir/course/android-introductory-training-course


小智 7

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

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

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

它会起作用的


Mah*_*alv 5

FIS_AUTH_ERROR为手段验证火力地堡安装SDK失败。如果您使用依赖于 Firebase 安装 sdk(或 FIS)的服务,则需要有效授权。

根据Firebase 云消息v20.1.1发布说明

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

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

解决方案

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


小智 5

突然之间,我的一个应用程序中出现了相同的错误 (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密钥

  • 哇!这对我来说是……我非常惊讶……这一定是谷歌在生成 google-services.json 时的一个直接错误? (2认同)
  • 伙计,你真的救了我的命!这个错误非常奇怪,我浪费了很多时间试图找到解决方案。谢谢! (2认同)