2
votes

Échec de la connexion Android à Google com.google.android.gms.common.api.ApiException: 12500

J'essaie donc d'utiliser l'authentification de connexion Google à l'aide de Firebase, comme indiqué par ce lien: https://firebase.google.com/docs/auth/ android / google-signin? hl = fr

J'ai suivi chaque étape, y compris l'insertion de mon empreinte SHA-1 dans le projet Firebase. Je suis actuellement en mode débogage donc je n'ai qu'une seule empreinte SHA-1 .

Voici mon code:

com.google.android.gms.common.api.ApiException: 12500: 
    at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
    at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
    at com.mfs.rumah_duka.login_activity.onActivityResult(login_activity.java:112)
    at android.app.Activity.dispatchActivityResult(Activity.java:6562)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3752)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3799)
    at android.app.ActivityThread.access$1500(ActivityThread.java:154)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5555)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:118)

Et voici l'erreur que j'ai eue:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

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

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);


    mAuth = FirebaseAuth.getInstance();

    LinearLayout gLog = (LinearLayout) findViewById(R.id.googleLogin);
    gLog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            signIn();
        }
    });

}

private void signIn() {
    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 GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);

        try {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
            Log.w("Error", "Google sign in failed", e);
            // ...
        }
    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d("Akun", "firebaseAuthWithGoogle:" + acct.getId());
    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("MsgFirebase", "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        Intent i = new Intent(login_activity.this, main_activity.class);
                        i.putExtra("nama", user.getDisplayName());
                        i.putExtra("email", user.getEmail());
                        startActivity(i);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w("MsgFirebase", "signInWithCredential:failure", task.getException());
                    }

                    // ...
                }
            });
}

I a essayé de vérifier si le resultCode de SigningIntent est un succès. Cela tourne notre n'est pas Activity.RESULT_OK . J'ai rencontré l'erreur juste après avoir choisi un compte dans la fenêtre de connexion.

Solutions que j'ai essayées:

  • L'ID client Web a été modifié dans le paramètre de connexion Google Firebase en un de mes identifiants Oath dans ma Cloud Console
  • J'ai mis à jour ma bibliothèque de services gms avec la dernière version (selon Erreur de connexion Google 12500 a>)
  • Créer un OAuth pour Android dans ma Cloud Console

Aucun de ceux-ci ne m'a apporté de solution. J'ai essayé de lire la documentation pour savoir ce que signifie le code d'erreur 12500 mais il semble qu'il n'y ait pas de cause spécifique. Il dit que essayez d'utiliser un autre e-mail et c'est toujours la même chose.

Est-ce que quelqu'un a une solution à cela?


1 commentaires

L'as-tu compris ?


4 Réponses :


0
votes

essayez de mettre à jour vos services Google Play vers la dernière version, cela peut résoudre votre problème.


0 commentaires

1
votes

J'ai rencontré le problème après avoir déployé mon application Flutter dans Play Store pour des tests internes et SHA-1 pour la clé de production ne fonctionnait pas (le fichier de clé de production était nouveau). Après quelques jours, j'ai compris - Je devais ajouter SHA-1 depuis Google Play Store> Gestion des versions> Signature d'application> Certificat de signature d'application - Empreinte digitale du certificat SHA-1 qui est différent du SHA-1 de la clé locale (ce certificat est visible dans Google Play Store> Gestion des versions> Signature d'application> Télécharger le certificat - Empreinte du certificat SHA-1 )


1 commentaires

Je vous remercie! Cela a sauvé la journée d'hier



0
votes

J'ai rencontré exactement le même problème. C'est ce que j'ai fait. Tout d'abord, je me suis assuré d'avoir le dernier fichier google-services.json dans mon projet. Ensuite, j'ai vérifié que la clé de chaîne que je transmettais au générateur GoogleSignInOptions correspondait à la clé du client Web OAuth dans la console GCP .

Enfin, j'ai mis à jour mes services Google Play et le référentiel Google (à partir du SDK Manager) vers la dernière version.

La mise à jour du référentiel Google semble avoir fait l'affaire pour moi.


2 commentaires

Merci. J'ai vérifié mon google-services.json et il semble que ma clé soit différente de celle qui est censée se trouver dans la console Firebase. Maintenant ça marche.


je le vérifie correctement mais toujours le même problème. comment puis-je le résoudre.



1
votes

Lorsque votre application s'authentifie auprès d'un serveur principal ou accède aux API Google à partir de votre serveur principal, vous devez transmettre l'ID client OAuth 2.0 créé pour votre serveur à la méthode requestIdToken lorsque vous créez l'objet GoogleSignInOptions, pour accéder à l'utilisateur informations de profil de base. N'oubliez pas non plus d'envoyer l'e-mail d'assistance dans l'écran de consentement OAuth qui se trouve sur la page Identifiants de la console API.


0 commentaires