5

每次我将应用程序的 Firebase 依赖项更新为比 2020 年 2 月 27 日更新更新的任何内容时,我都会在运行应用程序时看到此异常:

04-29 18:21:58.170  3314  3541 E Firebase-Installations: 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.
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId: Failed to get FIS auth token
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId: java.util.concurrent.ExecutionException: com.google.firebase.installations.FirebaseInstallationsException
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.android.gms.tasks.Tasks.zzb(Unknown Source:61)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.android.gms.tasks.Tasks.await(Unknown Source:23)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.iid.zzt.zzb(com.google.firebase:firebase-iid@@20.1.6:54)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.iid.zzt.zza(com.google.firebase:firebase-iid@@20.1.6:72)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.iid.zzs.run(Unknown Source:12)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@17.1.1:6)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at java.lang.Thread.run(Thread.java:764)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId: Caused by: com.google.firebase.installations.FirebaseInstallationsException
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.installations.FirebaseInstallations.doNetworkCall(com.google.firebase:firebase-installations@@16.2.2:350)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.installations.FirebaseInstallations.lambda$doRegistrationInternal$0(com.google.firebase:firebase-installations@@16.2.2:323)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at com.google.firebase.installations.FirebaseInstallations$$Lambda$5.run(Unknown Source:4)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
04-29 18:21:58.177  3314  3543 E FirebaseInstanceId:    ... 1 more

我已经阅读了几个相关的问题并尝试了以下所有方法:

  1. 我验证了我的 API 密钥在 Google Cloud Platform 中没有任何限制(SHA-1 或 API 限制)。
  2. 我验证了 Firebase 提供的 google-services.json 与我的项目中包含的匹配。
  3. 我验证了 google-services.json 文件中的 API 密钥、项目 ID 和应用程序 ID 是否正确。
  4. 我验证了我正在测试的所有设备(具有不同 API 版本和物理设备的模拟器的混合)都具有 Play 商店和 Play 服务,并已更新到最新版本。
  5. 我验证了 AP​​K 是使用正确的密钥签名的 - 用于调试构建的调试密钥和用于发布构建的应用签名密钥。
  6. 我已验证 Firebase 在我的应用中设置正确。

以下是项目 build.gradle 的相关部分:

buildscript {
    ext.kotlin_version = '1.3.72'

    repositories {
        google()
        maven { url 'https://maven.fabric.io/public' }
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath 'com.google.gms:google-services:4.3.3'
        classpath 'io.fabric.tools:gradle:1.28.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

    allprojects {
        repositories {
            google()
            mavenCentral()
            jcenter()
        }
    }
}

以及应用程序的 build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29

    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 29
        // ...
    }

    signingConfigs {
        release {
            // ...
        }
    }

    buildTypes {
        debug

        release {
            signingConfig signingConfigs.release
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
    implementation 'com.google.firebase:firebase-analytics:17.4.0'
    implementation 'com.google.firebase:firebase-config:19.1.4'
    implementation 'com.google.firebase:firebase-messaging:20.1.6'
    implementation fileTree(dir: 'libs', include: ['PushIOManager-6.44.aar'])
    // etc...
}

我省略了捆绑包、风味、其他依赖项等,但希望这已经足够了。我的 Application 类的 onCreate 方法中确实有这个:

// Initialize Fabric with Crashlytics
Fabric.with(this, new Crashlytics());

// Initialize Firebase
FirebaseApp.initializeApp(this);

我把它们拿出来是因为我相信它们不再需要了。无论如何,它没有任何区别。我已经多次查看 Firebase 文档,但无法弄清楚我缺少什么。

编辑:我最初遗漏的依赖项之一是 Responsys。一旦我从我的应用程序中删除它,我就不再看到错误了。我正在等待他们的支持团队的回复。

4

4 回答 4

2

背景

不幸的是,Google 的前端可能会错误地将您的 API 密钥识别为无效。如果您的 API 密钥长时间未使用,则可能会发生这种情况。

FirebaseInstallations是 Firebase 服务的新基础架构,它使用您初始化 Firebase 的 API 密钥。如果您最近更新了 Firebase SDK,FirebaseInstallations可能已经开始使用您之前未使用过的 API 密钥。


补救

如果您的 API 密钥有问题,您可以在 Cloud Console 中创建一个新的 API 密钥:

  • 转到谷歌云控制台
  • 选择相关项目(即您用于应用程序的项目)
  • 打开菜单并转到APIs & ServicesCredentials
  • 在页面顶部点击+ CREATE CREDENTIALSAPI key
  • 用新创建的 API 密钥替换应用程序中的 API 密钥

谷歌服务.json

如果您使用Firebase 控制台google-services.json中的配置文件,您首先必须删除或限制当前使用的 API 密钥,以便让 Firebase 更新配置文件并使用新的 API 密钥。google-services.json

  • 识别google-services.json配置文件中的 API 密钥。
  • 通过对照Firebase 安装 API 指标页面检查 API 密钥的使用情况,确认 API 密钥正在创建错误请求。您的 API 密钥列Usage with this service应显示一个大于 0 的数字。
  • 通过单击 bin 符号删除该 API 密钥,或Application restrictions通过单击铅笔符号添加到该 API 密钥。!!警告!!不要删除现有应用程序安装所需的其他 Firebase 服务(如 Firebase Auth 或 Realtime-Database)的 API 密钥。

等待几分钟让 Google 服务器更新。下一次下载的google-service.json配置文件应该包含一个新的 API 密钥。


链接

有关 API 密钥和Firebase 安装 API的其他相关链接:

于 2020-05-02T03:17:56.103 回答
2

对我来说,所有提供的解决方案都不起作用:我升级了所有依赖项,导入了一个完全相同的新 google-services.json。我在https://console.cloud.google.com/apis/credentials/中没有 API 限制。由于其他依赖关系,降级不是一种选择。

为我解决的问题是将https://console.cloud.google.com/apis/credentials/中的密钥限制设置为“无”。

希望这可以帮助某人。

于 2020-06-24T11:28:00.373 回答
2

Firebase 安装服务(Firebase 云消息传递使用的新组件)需要有效的 Firebase 组合选项(特别是 API 密钥、项目 ID、应用程序 ID)。您的应用程序似乎在此过程中获得了无效的组合。

如果您从 初始化应用,google-services.json请从 Firebase 控制台下载该应用文件的最新版本,然后将其重新包含在您的项目中。手动验证此文件的内容很容易出错,因此我只需制作当前文件的备份副本并将其替换为您下载的文件即可。

如果这不能解决问题,请联系Firebase 支持人员并提供google-services.json相关信息和其他信息,以获得个性化的故障排除帮助。

于 2020-04-30T03:20:58.317 回答
1
  1. 如果您使用的是Real device检查您的 Internet 连接。

  2. 如果您使用的是 android studio Emulator- 通过重置模拟器来建立互联网连接。

    2.1。打开Tools -> AVD manager

步骤 2.1

2.2. 擦除模拟器的数据 擦除模拟器2.2的数据

  1. 使用全新的模拟器运行项目。
于 2022-01-08T06:15:29.640 回答