Google signe un échec de la com.Google.Android.gms.commun.API.ApiException: 10:

alors je suis coincé sur cette question frustrante. Je suis tout à fait nouveau à Google Auth sur Firebase mais j'ai fait tout le firebase docs instruits dans la façon d'intégrer le Google SignIn Auth, pourtant je suis toujours en train de recevoir cette erreur étrange dans la console se composait 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

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

avant que Quelqu'un ne tente de souligner des questions similaires qui ont déjà été posées sur le débordement de la pile, voici ce que j'ai fait jusqu'à présent après avoir vu tous les solutions disponibles et pourtant non a résolu l'erreur

  • j'ai mon empreinte SHA1 pour mon projet
  • j'ai mon ID client OAuth 2.0, à la fois l'ID client android et le client web et dans le requestIdToken() j'ai mis le id du client web.
  • j'ai fait publier APK de mon projet sur google play store. ce qui veut dire que je n'ai pas accidentellement généré une autre empreinte SHA1.
  • j'ai suivi pas à pas le signe Google dans Auth firebase docs.

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]
                }
            });
}
16
demandé sur Hudi Ilfeld 2017-12-03 17:12:27

2 réponses

Fondamentalement, le problème est dans le SHA1 touche mise sur console régénérez-la et remettez correctement le même projet.

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

2)en plus de cela, allez dans les paramètres de votre projet firebase (l'icône d'engrenage à droite de l'aperçu à la zone en haut à gauche. Puis passez à l'onglet lien de Compte. Sur cet onglet lien le Google Play à votre projet.

24
répondu Dilip 2017-12-03 16:20:22

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

  • si vous êtes toujours en mode debut, utilisez le déboguage.keystore SHA1
  • n'utilisez la version SHA1 que si vous êtes en production mode

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

2
répondu Gomez NL 2018-03-17 14:28:16