6 votes

FirebaseInstallationsException sur la dernière version

Chaque fois que je mets à jour les dépendances Firebase de mon application avec quelque chose de plus récent que la mise à jour 2020 du 27 février, je commence à voir cette exception lorsque je lance mon application :

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

J'ai lu plusieurs questions à ce sujet et j'ai essayé toutes les solutions suivantes :

  1. J'ai vérifié que ma clé API n'a pas de restrictions (SHA-1 ou restrictions API) dans Google Cloud Platform.
  2. J'ai vérifié que le fichier google-services.json fourni par Firebase correspond à celui inclus dans mon projet.
  3. J'ai vérifié que la clé API, l'ID du projet et l'ID de l'application dans le fichier google-services.json sont corrects.
  4. J'ai vérifié que tous les appareils sur lesquels je teste (un mélange d'émulateurs avec différentes versions d'API et d'appareils physiques) ont le Play Store et les Play Services et sont mis à jour avec les dernières versions.
  5. J'ai vérifié que l'APK est signé avec la bonne clé - la clé de débogage pour les versions de débogage et la clé de signature de mon application pour les versions définitives.
  6. J'ai vérifié que Firebase est correctement configuré dans mon application.

Voici les parties pertinentes du build.gradle du projet :

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()
        }
    }
}

Et le build.gradle de l'application :

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...
}

J'ai laissé de côté les bundles, les saveurs, les autres dépendances, etc. mais j'espère que c'est suffisant. J'avais ceci dans la méthode onCreate de ma classe d'application :

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

// Initialize Firebase
FirebaseApp.initializeApp(this);

Je les ai retirés car je pense qu'ils ne sont plus nécessaires. Quoi qu'il en soit, cela ne fait aucune différence. J'ai consulté plusieurs fois la documentation de Firebase et je n'arrive pas à comprendre ce que je manque.

Edit : l'une des dépendances que j'avais initialement laissée de côté était Responsys. Dès que je l'ai supprimée de mon application, j'ai cessé de voir les erreurs. J'attends une réponse de leur équipe de support.

4voto

Contexte

Malheureusement, il se peut que le frontend de Google identifie à tort votre clé API comme étant invalide. Cela peut se produire si votre clé API n'a pas été utilisée depuis longtemps.

FirebaseInstallations est une nouvelle infrastructure pour les services Firebase qui utilise la clé API avec laquelle vous initialisez Firebase. Si vous avez récemment mis à jour vos SDK Firebase, FirebaseInstallations a peut-être commencé à utiliser votre clé API qui n'était pas utilisée auparavant.


Remède

Si vous avez des problèmes avec votre clé API, vous pouvez créer une nouvelle clé API dans la Cloud Console :

  • se rendre à la Console Google Cloud
  • choisissez le projet approprié (c'est-à-dire le projet que vous utilisez pour votre application)
  • ouvrir le menu et aller à APIs & Services Credentials
  • en haut de la page, cliquez sur + CREATE CREDENTIALS API key
  • remplacer la clé API dans votre application par la clé API nouvellement créée

google-services.json

Si vous utilisez le google-services.json de votre fichier de configuration Console Firebase vous devez d'abord supprimer ou restreindre la clé API utilisée dans votre système actuel. google-services.json afin que Firebase mette à jour le fichier de configuration et utilise une nouvelle clé API.

  • Identifiez la clé API dans votre google-services.json fichier de configuration.
  • Confirmez que la clé API est à l'origine des demandes erronées en vérifiant son utilisation par rapport au fichier Page des métriques de l'API Firebase Installations . La colonne Usage with this service de votre clé API doit afficher un nombre supérieur à 0.
  • Supprimez cette clé API en cliquant sur le symbole de la poubelle ou ajoutez Application restrictions à cette clé API en cliquant sur le symbole du crayon. !!Avertissement ! !! Ne supprimez pas une clé API dont les installations existantes de vos applications ont besoin pour d'autres services Firebase comme Firebase Auth ou Realtime-Database.

Attendez quelques minutes pour que les serveurs de Google se mettent à jour. Le prochain téléchargement de votre google-service.json doit contenir une nouvelle clé API.


Liens

Autres liens pertinents concernant les clés API et le Firebase Installations API :

3voto

Bruce Wayne Points 137

Pour moi, toutes les solutions proposées n'ont pas fonctionné : J'ai mis à jour toutes les dépendances, importé un nouveau google-services.json qui était exactement le même. Je n'avais aucune restriction d'API dans le fichier https://console.cloud.google.com/apis/credentials/ . La rétrogradation n'était pas une option à cause d'autres dépendances.

J'ai résolu le problème en définissant les restrictions de la clé dans le champ https://console.cloud.google.com/apis/credentials/ à "Aucun".

J'espère que cela aidera quelqu'un.

2voto

Frank van Puffelen Points 16029

Les services d'installation de Firebase (un nouveau composant utilisé par Firebase Cloud Messaging) nécessitent une combinaison d'options Firebase valide (en particulier la clé API, l'ID du projet, l'ID de l'application). Votre application semble avoir reçu une combinaison invalide en cours de route.

Si vous initialisez l'application à partir d'un fichier google-services.json téléchargez la dernière version de ce fichier pour l'application depuis la console Firebase, et réintégrez-le dans votre projet. La vérification manuelle du contenu de ce fichier est sujette à erreur, je ferais donc une copie de sauvegarde du fichier actuel et le remplacerait par celui que vous avez téléchargé.

Si cela ne résout pas le problème, contacter l'assistance Firebase avec le google-services.json et d'autres informations pour une aide personnalisée au dépannage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X