web-dev-qa-db-fra.com

Impossible de résoudre le symbole default_web_client_id dans le Codelab Android de Firebase

J'essaie d'apprendre Firebase, alors je suis passé par le Codelab Android. Le projet qu'ils m'ont donné a cependant eu une erreur:

Impossible de résoudre le symbole default_web_client_id

Et je ne savais pas comment le résoudre car je ne connaissais pas la valeur de default_web_client_id ni ce que c'est. C'est dans la méthode onCreate(): SigninActivity.Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_in);
    mFirebaseAuth = FirebaseAuth.getInstance();

    // Assign fields
    mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);

    // Set click listeners
    mSignInButton.setOnClickListener(this);

    // Configure Google Sign In
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
}

Je n'ai aucune idée de ce que c'est, quelle est sa valeur et pourquoi cela me donne-t-il cette erreur. Jusqu'à présent, je n'ai rien changé sauf l'ajout du google-services.json. J'ai ajouté mon SHA-1 et activé Google dans la console.

11
Ab_

Parfois, il y a un problème lors de l'analyse google-services.json. J'ai signalé ce problème à l'équipe concernée.

En attendant, suivez les étapes ci-dessous pour résoudre ce problème et aller plus loin -

1) Ouvrez le fichier google-services.json -> client -> oauth_client -> client_id

2) Copier cet ID client et coder en dur cette .requestIdToken("your ID")

Cela permettrait de demander "IdToken" via GoogleSignInAccount après la connexion à Google avec succès et d'autoriser vos informations d'identification avec firebase.

MODIFIER

Essayez de supprimer et de recréer le projet et de réimporter le nouveau google-service.json dans votre projet Android.

26
Dexto

Une solution plus générique consisterait à ajouter le google-services.json dans le répertoire racine de l'application.
Et ajouter 

apply plugin: 'com.google.gms.google-services à la fin du fichier build.gradle.

Explication

Lorsque l'application crée les chaînes de paires clé-valeur à partir du fichier de configuration google-services.json, elles sont ensuite placées dans le fichier values.xml pour les rendre globalement disponibles pour une utilisation à partir de n'importe où dans votre code. Cela nous évite de coder en dur le client_id dans votre code.

Remarque

N'ajoutez pas le default_web_client_id avec client_id comme valeur dans le strings.xml afin d'éviter l'erreur de duplication, Error: Duplicate resources à partir de quand vous exécuterez votre code.

14
user1523292

aucune des réponses ci-dessus n'a résolu mon problème.

J'ai trouvé ceci Et les étapes suivantes dans les fichiers de niveaux de construction:

dans le fichier de niveau d'application (à la fin)

} apply plugin: 'com.google.gms.google-services'

et dans le fichier de niveau de projet:

 dependencies {
    classpath 'com.Android.tools.build:gradle:3.0.1'
    classpath 'com.google.gms:google-services:3.1.0'

En plus de cela, mon fichier json devait être dans le dossier de l'application; bien qu'il existe des options, il existe une version de débogage et une version finale de ce fichier.

La seule erreur réelle que j'ai eu était une fois que les fichiers de classement étaient exacts. Ensuite, il s'est plaint de ne pas avoir trouvé le fichier JSON. 

Vu la réponse de user1523292 après avoir écrit ceci.

Je me suis encore heurté à cela. il semble que le plugin apply doit vraiment se trouver à la fin/au bas du fichier.

3

Apparemment, R.string.default_web_client_id est généré à partir de la construction IDE 

_ {J'avais supposé que nous étions supposés l'ajouter manuellement - erreur fastidieuse} _

https://developers.google.com/Android/guides/google-services-plugin

Le plugin google-services a deux fonctions principales: 1) Traiter le fichier google-services.json et de produire des ressources Android qui peuvent être utilisé dans le code de votre application. 

~~~~

Le résultat principal du traitement JSON est de produire deux fichiers XML que vous pouvez référencer en tant que ressources Android dans votre code Java.

Et ainsi - après la construction réussie, si vous recherchez la chaîne default_web_client_id dans le IDE, vous verrez un des résultats est values.xml sous le dossier/created, et il contient les valeurs de votre configuration firebase comme l'exemple ci-dessous. 

_ {En fait, voir ce fichier a aidé à clarifier les choses ici} _

<resources>
    <string name="default_web_client_id" translatable="false">123.apps.googleusercontent.com</string>
    <string name="firebase_database_url" translatable="false">https://123.firebaseio.com</string>
    <string name="gcm_defaultSenderId" translatable="false">123</string>
    <string name="google_api_key" translatable="false">123</string>
    <string name="google_app_id" translatable="false">123</string>
</resources>
2
Gene Bo

J'ai déjà téléchargé et analysé google-services.json, mais il ne trouve toujours pas la chaîne. 

J'ai remarqué que mon oauth_client avait une clé avec client_type de 1 et c'est tout. Dans la console API Google, je n'avais qu'une clé Android.

Vous devez donc accéder à la console de l'API et générer une clé Web Server. Ensuite, téléchargez à nouveau votre fichier google-services.json et vous obtiendrez un oauth_client de type 3.

Maintenant, le plugin va générer une chaîne appelée default_web_client_id.

1
Greg Ennis

En plus de la réponse de Dexto, je voudrais mentionner une dernière chose Dans le fichier JSON, vous obtiendrez deux types d'identifiant client. 

Une qui a type_client valeur 1 et une autre avec type_client valeur 3 Assurez-vous que vous avez spécifié le id_client de type_client qui a la valeur 3

1
Praveen Panishetti

Essayez de télécharger à nouveau votre fichier .json après avoir modifié la configuration dans la console Firebase. Utilisez ce fichier de configuration plus récent, pas l'ancien.

0
user7504516
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)      
 .requestIdToken("1036904004233h4cmmfcistvfjh3phqe1peht56g.apps.googleusercontent.com")
            .requestEmail()
            .build();   

dans mon expérience, vous devez inclure l'ID client comme dans requestIdtoken et ne pas avoir un instant de default_web_client_id dans string.xml, cela a l'air bizarre mais dans mon cas, c'est la seule méthode qui fonctionne pour moi.

0
Mohamed Ben Romdhane