web-dev-qa-db-fra.com

Erreur 12501 lors de l'authentification avec Google Sign-in

J'utilise services de connexion Google pour authentifier les utilisateurs qui utilisent mon application. Je l'ai eu au travail quand je viens de demander des informations par courrier électronique

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

Ensuite, j'ai compris que j'avais également besoin de demander un jeton d'identification pour pouvoir m'authentifier auprès de mon backend.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(String.valueOf(R.string.server_client_id))
                    .requestEmail().build();

Le problème est que cela ne me permettait pas de me connecter après les modifications. Le statut que je continue à obtenir chaque fois que j'essaie de me connecter est Status{statusCode=unknown status code: 12501, resolution=null}.

J'ai cherché autour et j'ai trouvé ce post c'est à peu près la même chose. Cependant, je n'ai commis aucune des erreurs citées par les personnes qui ont répondu. L'ID client oAuth de ma console de développement est destiné à l'application Web:  clientIDs Et R.string.server_client_id est le premier ID client de la photo. les noms de paquets sont bien sûr corrects dans tous les cas, sinon cela ne fonctionnerait même pas sans la demande de jeton. 2 personnes ont également suggéré que l'application nécessite d'être signée pour que cela fonctionne, mais la documentation de Google indique que la clé de débogage devrait également fonctionner, et il est donc incohérent de faire signer les applications au débogage.

J'essaie de comprendre cela depuis des heures mais sans succès. Quel pourrait être le problème? N'hésitez pas à demander plus d'informations que j'ai peut-être oublié de mettre ici.

46
jammaster

C'est très embarrassant, mais je l'ai compris:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id))
                    .requestEmail().build();

Je lui envoyais l'ID de ressource au lieu d'une ressource de chaîne déréférencée.

20
jammaster

Évidemment, vérifiez d’abord que votre release sha1 key est correcte ou non. Mais si cela ne fonctionne toujours pas et que vous utilisez Google Play Services 8.4.0 (iecompile 'com.google.Android.gms: play-services: 8.4.0'), le problème pourrait être résolu en modifiant l'objet GoogleSignInOptionAu lieu de:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
                    .build();

Vous devez utiliser:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PLUS_LOGIN))
                .requestScopes(new Scope(Scopes.PLUS_ME))
                .requestEmail()
                .build();

Cela résout une erreur en renvoyant statusCode = INTERNAL_ERROR OR statusCode = Erreur 12501 OR statusCode = Erreur 12500 . Cet objet gso peut ensuite être utilisé pour créer GoogleApiClient comme indiqué ci-dessous:

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
               // .addApi(Plus.API, null)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
               // .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build(); 

Voir ceci pour plus de détails: La connexion Google ne fonctionne pas sur la version Android

10
silwalprabin

1.Spécifiez la signatureConfigs dans votre fichier de classement

signingConfigs {
        config {
            keyAlias 'appalias'
            keyPassword 'hunter123'
            storePassword 'hunter123'
            storeFile file('path/to/keystore.jks')
        }
}

2.Allez créer des types dans la structure de projet (dans Android Studio) et spécifiez signatureConfigs sur "config"

Maintenant nettoyez votre projet et construisez à nouveau. Ça devrait marcher.

Si ce qui précède ne fonctionne pas, votre adresse ci-dessous est votre dernier recours.
Essayez la première étape et construisez et vérifiez. Si cela ne fonctionne pas, passez à l'étape suivante et essayez de reconstruire. 

  1. Construisez un apk signé (avec rappelez-vous le mot de passe vérifié). 
  2. Avant de signer, vérifiez le nom du fichier de stockage de clés et celui que vous donnez lors de la signature de l'apk (dans Android studio). 
  3. Installez l'apk signé sur votre appareil. 
  4. Attends cinq minutes. 
  5. Essayez de chanter pour google. Si 12501 arrive encore, attendez encore cinq minutes. Tout en faisant cela, frappez gradle sync. 
  6. Réessayer. Ça devrait marcher.

Modifier: Google a ajouté la signature apk dans la console. Si vous avez déjà signé votre apk, ignorez-le OR si vous voulez l'utiliser, soyez prudent, car il pourrait casser vos paramètres de connexion Google actuels.

3
Mido Reigh

Dans mon projet, j'avais dans mon fichier Gradle un nom applicationID différent de mon nom de fichier packagename dans mon fichier manifest.xml, ce qui était à l'origine de mon problème.

La clé Android que je devais créer avait besoin de l'application idI fqdn et PAS du nom du paquet (contrairement à ce que Google vous dit) pour que cela fonctionne pour moi. 

Je pensais laisser ça ici au cas où cela ferait gagner du temps à quelqu'un.

3
Simon Avril

J'ai eu ce problème lorsque j'ai accidentellement utilisé l'ID client de l'application Android au lieu de Webapp comme paramètre requestIdToken().

Vous devriez utiliser ici l'ID client de la Webapp. Par défaut, il s'appelle Web client (auto created by Google Service)

2
Daniel Zolnai

Avez-vous déjà configuré votre signingConfigs et buildTypes dans votre Gradle? Je l'ai corrigé en spécifiant explicitement ces choses sur Gradle. Lire ici http://developer.Android.com/tools/publishing/app-signing.html

1

J'ai eu le même problème. Le problème était que j'avais en quelque sorte le mauvais "Projet API" sélectionné et donc la mauvaise clé de client Web. Il est évident que deux ID client de serveur OAuth2 ont été créés dans mes deux projets API lors de mes tentatives d'exécution de l'application de démonstration.

 configuration view

1
Bevor

Assurez-vous que vous avez ajouté l'empreinte SHA-1 pour votre clé de signature (de libération) à la console Firebase

Trouvez votre clé SHA1 : keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

Ajoutez-le à la console Firebase: accédez à https://console.firebase.google.com , sélectionnez votre application, sélectionnez les paramètres.

 enter image description here

1
Simon Epskamp

J'ai eu un problème similaire. Dans mon cas, c’est parce que l’ID client du serveur que j’utilisais provenait d’un projet différent de celui des clés client. Il s'avère qu'ils doivent appartenir au même projet.

0
Tad

Bonjour, j’ai vu les commentaires ci-dessus, mais comme j’ai fait de manière pratique, c’est une question tout entière, c’est-à-dire que si vous enregistrez le sha d’une adresse IP particulière et obtenez google.services json, vous obtiendrez un résultat parfait. 

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

ou gso = new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken (LoginActivity.this.getResources (). getString (R.string.server_client_id)) .requestEmail (). build (); mais si vous voulez créer une application sur une autre adresse IP avec une autre machine, sha vous affiche le code d'état d'erreur 12501 et vous devez donc générer à nouveau sha pour cette machine particulière. Merci 

0
Vishal

Le <meta-data> d'Androidmanifest.xml est en dehors de <application></application> Enclosure. C'est pourquoi vous obtenez une erreur 12501

    <meta-data Android:name="com.google.Android.gms.games.APP_ID"
        Android:value="@string/app_id" />
    <meta-data Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version"/>
0
Duna