87 votes

L'authentification Google a échoué com.google.Android.gms.common.api.ApiException : 10 :

Je suis donc bloqué sur ce problème frustrant. Je suis assez novice en matière de Google Auth sur Firebase, mais j'ai fait tout ce que la documentation de Firebase m'a indiqué pour intégrer Google SignIn Auth, mais je reçois toujours cette erreur bizarre dans la console, composée de deux parties :

12-03 11:07:40.090 2574-3478/com.google.android.gms E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE

et aussi

Google sign in failed com.google.android.gms.common.api.ApiException: 10:

Avant que quelqu'un ne tente d'indiquer des questions similaires qui ont déjà été posées sur stack overflow, voici ce que j'ai fait jusqu'à présent après avoir vu toutes les solutions disponibles et pourtant aucune n'a résolu l'erreur.

  • J'ai mon empreinte SHA1 pour mon projet.
  • J'ai l'identifiant de mon client OAuth 2.0, à la fois l'identifiant du client Android et celui du client Web, et dans la requestIdToken(), j'ai mis l'identifiant suivant identifiant du client web .
  • Je l'ai fait. pas publier l'APK de mon projet sur google play store. ce qui signifie que je n'ai pas accidentellement généré une autre empreinte SHA1.
  • J'ai suivi pas à pas la documentation de Google Sign in Auth firebase.

Voici mon extrait de code :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    ButterKnife.bind(this);

    String webClientId = getString(R.string.web_client_id);

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(webClientId)
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);

    googleLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    });

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);

        try{

            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);

        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
            Log.w(TAG, "Google sign in failed", e);
            // [START_EXCLUDE]
            Toast.makeText(this, "Gooogle Auth failed", Toast.LENGTH_LONG);
            // [END_EXCLUDE]
        }

    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    // [START_EXCLUDE silent]
    //showProgressDialog();
    // [END_EXCLUDE]

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        Toast.makeText(LoginActivity.this, "Successful Auth", Toast.LENGTH_LONG).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        //updateUI(null);
                    }

                    // [START_EXCLUDE]
                    //hideProgressDialog();
                    // [END_EXCLUDE]
                }
            });
}

2 votes

En fait, le problème se situe au niveau de la clé SHA1 placée sur la console. Veuillez la régénérer et la replacer correctement dans le même projet.

3 votes

Oui, apparemment, vous avez été d'une grande aide !!! régénérer mon empreinte SHA1 a résolu le problème. merci. mais quand même, je suis curieux de savoir comment il y a eu un problème avec l'empreinte si firebase l'a généré en premier lieu. et je n'ai pas modifié depuis ??

0 votes

Quelle solution avez-vous suivie pour résoudre le problème ?

112voto

Dilip Points 1273

Le problème se situe essentiellement dans le SHA1 sur la console, veuillez la régénérer et la remettre correctement dans le même projet.

1)Comme les réponses, assurez-vous que votre actuel signé Android apk a le même SHA1 comme ce que vous avez spécifié dans la console de la section d'intégration Android de votre projet Firebase (la page où vous pouvez télécharger l'application google-services.json )

Pour plus d'informations, voir : Générer SHA-1 pour l'application Flutter

2)En plus de cela, allez dans les paramètres de votre projet firebase (icône d'engrenage à droite de la vue d'ensemble en haut à gauche). Puis passez à l'onglet Account Linking. Sur cet onglet, liez le Google Play à votre projet.

EDIT : L'onglet "Account Linking" n'existe plus, à la place :

  1. Connectez-vous à Firebase.
  2. Cliquez sur l'icône Paramètres, puis sélectionnez Paramètres du projet.
  3. Cliquez sur l'onglet Intégrations.
  4. Sur la carte Google Play, cliquez sur Link .

enter image description here

3 votes

Dans mon cas, Firebase avait à la fois le "certificat de signature de l'application" et mon "certificat de téléchargement" clés SHA-1 défini. J'avais donc deux clés SHA-1 dans Firebase. J'ai supprimé celle qui était identique à mon "Upload certificate" et n'ai gardé que le "App signing certificate", ce qui a résolu mon problème.

2 votes

De manière surprenante, j'avais ajouté le sha1 de la release build dans la console firebase et cela fonctionnait bien si j'installais la release build directement en passant par le gestionnaire de fichiers. Une fois que j'ai publié la même version apk sur google play store, l'identification google a cessé de fonctionner. Ensuite, en suivant votre suggestion, je suis allé à l'onglet Account Linking et j'ai lié le Google Play à mon projet, puis cela a commencé à fonctionner.

1 votes

J'ai ce problème après avoir tout essayé. Cela pourrait-il être lié au fait que je suis passé de Ionic à Flutter ? J'ai également copié le même keystore, mais je pense que cela ne devrait pas être un problème, non ? Je ne sais pas quoi essayer d'autre

31voto

Assaf S. Points 41

Lorsque vous utilisez Signature de l'application par Google Play y Firebase vous devez ajouter l'empreinte SHA-1 de l'utilisateur. Certificat de signature de l'application (trouvé sur Google Play Console/ Release Management/ App signing certificate) à la Firebase Console/ Settings/ SHA certificate fingerprints

Mise à jour de l'emplacement des SHAs : Google Play Console > Release > Setup > App integrity

3 votes

Merci beaucoup. Ça m'a sauvé. Je suis sur le point de paniquer !

3 votes

C'était le troisième sha-1 à mettre là-dedans et il a finalement fait l'affaire ! J'avais d'abord le certificat de débogage seulement, puis j'ai ajouté le certificat de téléchargement, et enfin le certificat de signature de l'application et cela a fait l'affaire, MERCI !

0 votes

@Kevin Donc, vous avez fini par ajouter quatre empreintes SHA-1 à votre console Firebase ? Quel ID client avez-vous utilisé qui correspond à l'empreinte SHA-1 ?

17voto

Chirag Savsani Points 1924

Dans mon cas, il n'y a pas de problème avec SHA-1

J'ai fait GoogleAuth en utilisant Firebase .

J'ai oublié d'ajouter implementation 'com.firebaseui:firebase-ui-auth:4.3.1'

Et j'ai mis ma propre clé au lieu de R.string.default_web_client_id C'était donc le problème. J'ai ajouté la dépendance ci-dessus et remplacé R.string.default_web_client_id avec ma propre clé.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

MISE À JOUR : 18-Dec-2020

Nous pouvons également utiliser sans requestIdToken comme ci-dessous. Pour cela vous devez ajouter votre SHA1 à la console de google.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

0 votes

Merci beaucoup, cela a fonctionné pour moi, pourquoi cela n'est-il pas documenté quelque part ? Tous les documents officiels que j'ai lus sur Google ne mentionnent même pas l'importation de firebase-ui-auth ou de R.string.default_web_client_id.

0 votes

Je ne sais pas, mais j'ai été confronté à ce problème, et j'ai passé trop de temps sur ce sujet. J'ai résolu le problème par moi-même.

14voto

Gomez NL Points 340

J'étais confronté au même problème, après avoir cherché une solution, de la régénération de l'empreinte digitale à la liaison de l'application sur firebase à la console Google play et à la publication de l'apk signé, le problème était en fait parce que j'utilisais la version SHA-1 sur la console firebase.

  • Si vous êtes toujours en mode débogage, utilisez le fichier debug.keystore SHA1
  • N'utilisez la version SHA1 que si vous êtes en mode production.

https://developer.Android.com/studio/publish/app-signing.html

0 votes

Celui-ci est important

0 votes

Je viens de réparer cette même erreur.

5voto

Si vous avez toutes les configurations valide dans firebase comme SHA-1 et que vous avez importé le bon fichier google-services.json si vous obtenez toujours une erreur alors ajouter l'email de support dans la console firebase

Vous devez ajouter l'email de support dans la console de la base de feu. Allez dans Projet-> Paramètres -> Général -> Paramètres publics et ajoutez l'email de support.

2 votes

+1 Je ne sais pas pourquoi l'email de support devrait affecter la configuration mais c'est le cas et le réglage de l'email a résolu le problème. com.google.android.gms.common.api.ApiException: 12500: Erreur SIGN_IN_FAILED

0 votes

C'est la seule réponse. MERCI.

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