J'essaie d'intégrer Google Sign In dans mon application. Je n'ai pas de serveur principal, je reçois simplement les détails du compte Google connecté à mon application.
Je l'ai d'abord essayé en utilisant Exemple de connexion Google , mais une erreur s'est produite (aucune modification de code n'a été effectuée à l'exception de l'impression du chemin de pile ci-dessous). Je viens d'utiliser l'exemple SignInActivity car je n'ai pas de serveur principal.
Exception com.google.Android.gms.common.api.ApiException: 12500:
at com.google.Android.gms.common.internal.zzb.zzz(Unknown Source)
at com.google.Android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at com.ewise.Android.api.MainActivity.onActivityResult(SignInActivity.Java:89) at Android.app.Activity.dispatchActivityResult(Activity.Java:7010)
at Android.app.ActivityThread.deliverResults(ActivityThread.Java:4187)
at Android.app.ActivityThread.handleSendResult(ActivityThread.Java:4234)
at Android.app.ActivityThread.-wrap20(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1584)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6316)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:872)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:762)
Code
public class SignInActivity extends AppCompatActivity implements
View.OnClickListener {
private static final String TAG = "SignInActivity";
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private TextView mStatusTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Views
mStatusTextView = findViewById(R.id.status);
// Button listeners
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.disconnect_button).setOnClickListener(this);
// [START configure_signin]
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// [END build_client]
// [START customize_button]
// Set the dimensions of the sign-in button.
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
// [END customize_button]
}
@Override
public void onStart() {
super.onStart();
// [START on_start_sign_in]
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
// [END on_start_sign_in]
}
// [START onActivityResult]
@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);
handleSignInResult(task);
}
}
// [END onActivityResult]
// [START handleSignInResult]
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
e.printStackTrace();
updateUI(null);
}
}
// [END handleSignInResult]
// [START signIn]
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signIn]
// [START signOut]
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END signOut]
// [START revokeAccess]
private void revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END revokeAccess]
private void updateUI(@Nullable GoogleSignInAccount account) {
if (account != null) {
mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.sign_out_button:
signOut();
break;
case R.id.disconnect_button:
revokeAccess();
break;
}
}
}
D'après ce que j'ai lu, le problème pourrait être causé par Génération SHA1 .
J'ai suivi l'intégralité du guide mais apparemment cela ne fonctionne pas.
J'ai copié le SHA1 de gradle signatureReport
Variant: debug
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
quelle pourrait en être la cause possible?
Merci
P.S. Cela pourrait-il être une cause possible?
Google Play services out of date. Requires 11720000 but found 10932470
Mettez simplement à jour vos services Google Play vers la dernière version (ou 11720000 dans ce cas). Si vous utilisez AVD, les images Nexus 5 et 5X prennent en charge Google Play. Une fois que l'émulateur est opérationnel, accédez au menu Contrôles étendus> Google Play, puis mettez-le à jour.
Erreur PlatformException (sign_in_failed, com.google.Android.gms.common.api.ApiException: 12500:, null)
Cette erreur 12500 peut être résolue en ajoutant une adresse électronique de support à votre projet dans les paramètres du projet. Ouvrir lien https://console.firebase.google.com/
Sélectionnez Votre projet et ouvrez l'onglet Paramètres.
Fournissez un courrier électronique d'assistance valide et redémarrez votre application maintenant.
Vérifiez si les empreintes digitales SHA-1 sont ajoutées aux paramètres du projet Firebase. Sinon, trouvez l’empreinte SHA-1 en utilisant
https://developers.google.com/Android/guides/client-auth
Recherchez également l’empreinte SHA-1 de la clé de déblocage à l’aide de
keytool -list -v -keystore <keystore path>
Supprimez <keystore path>
avec le chemin du magasin de clés.
Ajoutez ensuite les deux empreintes digitales SHA-1 aux paramètres des projets firebase.
NB: N'oubliez pas de remplacer google-services.json par google-services.json mis à jour par de nouvelles empreintes digitales. J'ai perdu deux jours à ce sujet.
Android studio automatiquement génère~/.Android/debug.keystore
sur le premier debug build et l’utilise pour signer l’application.
Pour que SHA-1 soit exécuté (mot_de_passe Android
) ( doc ):
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.Android/debug.keystore
Ce SHA-1
doit être ajouté aux paramètres de l'application à l'adresse firebase
pour permettre l'utilisation des fonctionnalités de connexion à Google lors du test de la création du débogage.
Les e-mails de support, ainsi que tous les liens de projet et de confidentialité sont nécessaires au fonctionnement de Google SignIn, sinon la valeur est 12500.
Définissez-le sur https://console.developers.google.com/apis/credentials
Ceci n'est mentionné nulle part ailleurs dans les guides de Firebase.
Essayez de mettre à jour l'écran de consentement OAuth sur https://console.developers.google.com/apis/credentials
Je suis resté coincé pendant un moment.
Assurez-vous que ces étapes sont effectuées-
On dirait que votre SHA1 est écrasé par Google Play Store ..__ Vérifiez dans votre Google Play Store, le panneau de lancement, sous la signature de l'application, et voyez si un ajout de SHA1 a été ajouté sur Google Play.
Et copier que SHA1, ajouter à votre place pertinente, ferait le travail.
J'utilise l'authentification Firebase. Mon SHA-1 était indiqué correctement, l’identité du client était également correcte mais je recevais toujours 12500.
Il s’est avéré que mon problème était que je n’indiquais pas email de support dans les paramètres de mon projet. (Paramètres -> onglet Général -> section Votre projet (Paramètres publics)).
Tout d’abord, assurez-vous que vous avez enregistré votre application dans la console des développeurs google
Assurez-vous que vous avez les clés debug
et release
dans votre application Firebase. Si cette erreur apparaît en production, ajoutez votre SHA-1 release key
à l'application de base Fire. S'il apparaît en développement, ajoutez votre SHA-1 debug key
.
Obtenir la clé de débogage/libération:
keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]
Assurez-vous de télécharger le google-services.json
mis à jour dans votre application.
Je pense que l'erreur est venue du mauvais SHA1. N'oubliez pas que le SHA1 est différent entre le mode de publication et le mode de débogage dans le studio Android. Au lieu d'utiliser keytool pour obtenir le SHA1, vous pouvez utiliser le projet Gradle -> Tâche -> Android -> signature signant un rapport dans le studio Android (vous pouvez l'ouvrir via le menu Affichage -> Fenêtre d'outils -> gradle) pour obtenir la libération et le débogage de SHA1. Après cela, pour un travail facile, vous devez créer deux informations d’identification distinctes avec deux SHA1 sur la console google cloud (google demande simplement de créer une en utilisant la version SHA1. Lorsque nous la développerons, cela ne fonctionnera pas car elle utilise le débogage SHA1).
S'il y a toujours quelqu'un avec un problème similaire, si vous ajoutez des étendues personnalisées, assurez-vous que c'est une étendue valide. Dans mon cas, j'ai mélangé les champs d'application de Facebook avec ceux de Google et il m'a fallu un certain temps pour le comprendre!
J'ai rencontré le même problème après avoir ouvert mon projet sur un autre ordinateur (Android Studio différent) . Dans mon cas, je l'ai résolu à l'aide de l'Assistant Firebase, que j'avais utilisé pour configurer Firebase au départ. Ouverture de l’assistant Firebase Assistant (Outils> Firebase) et sélection de Authentification> Connexion . Cela a permis de reconnecter le projet à Firebase et de mettre à jour les configurations.
Je suis coincé dans le numéro de connexion de Google depuis 2 semaines, enfin, j'ai bien trié le problème. Vous pouvez expliquer la raison. Le problème était lié à la base de feu. Dans firebase, ils ont mentionné un champ "email de support" comme facultatif. Mais une fois que je l'ai ajouté (n'importe lequel de vos courriels personnels), le problème a été réglé et j'ai obtenu la réponse. Si vous obtenez une erreur 12501, elle est liée aux paramètres de votre compte Google.
Si vous venez ici de flutter : c'est l'un des coins cas nous devons résoudre selon la documentation ici: https://pub.dev/packages/google_sign_in
Pour moi, le problème consistait à utiliser un ClientID 'release' avec mon application configurée pour le débogage. Assurez-vous de disposer d'une clé de version et d'une clé de débogage, en utilisant chaque SHA-1, respectivement.
Il peut également arriver que le compilateur Cordova ne parvienne pas à trouver le fichier de magasin de clés approprié.
Solution: Avant d’exécuter ionic cordova build Android
, spécifiez les propriétés de signature
Step-1: générer un fichier de magasin de clés de débogage
Exécuter la commande
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.Android/debug.keystore
Utilisez le mot de passe: Android
Étape 2: Copiez le fichier de magasin de clés (debug.keystore
) du répertoire ~/.Android
vers le répertoire platform/Android
de votre projet actuel.
Étape 3: Créez un fichier nommé release-signing.properties dans le répertoire platform/Android
Étape 4: Ajouter le contenu du fichier
storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=Android
keyPassword=Android
Remarque: Ce sont les valeurs par défaut. Si vous avez fourni un alias et un mot de passe personnalisés, utilisez-les en conséquence.
Étape 5: Construisez maintenant ionic cordova build Android
Lorsque votre application s'authentifie auprès d'un serveur dorsal ou accède aux API Google à partir de votre serveur dorsal, vous devez transmettre l'ID client OAuth 2.0 créé pour votre serveur à la méthode requestIdToken lors de la création de l'objet GoogleSignInOptions. accédez aux informations de profil de base de l'utilisateur, puis n'oubliez pas de soumettre le courrier électronique d'assistance dans l'écran de consentement OAuth situé dans la page Informations d'identification de la console de l'API.
Assurez-vous que les éléments suivants sont correctement configurés:
strings.xml
, google-services.json
ou credentials.json
.L'erreur est apparue lorsque l'option Google n'a pas été activée, comme indiqué dans l'image .
C'est arrivé lorsque j'ai changé de compte Google et que j'ai oublié d'activer l'option de connexion à Google.
Dans mon cas, je travaillais sur une application non productive, le problème était que lors de la création d'un projet dans la console Firebase, il y avait des problèmes de synchronisation des clés SHA-1 à partir des consoles de développement Firebase & Google. J'ai donc décidé de créer le projet d'abord sur la console Google Developer, puis de le sélectionner lors de la création d'un nouveau projet sur la console Firebase.
J'ai également fait un tutoriel pour cela, cela peut vous aider.
https://developers.google.com/identity/sign-in/Android/sign-in suivez cette documentation api mais gardez à l'esprit que, dans WEB_CLIENT_ID, utilisez la valeur de l'ID client générée dans google. -services.json.
class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
private val TAG = "JSAGoogleSignIn"
private val REQUEST_CODE_SIGN_IN = 1234
private val WEB_CLIENT_ID = "354298333018-XXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
private var mAuth: FirebaseAuth? = null
private var mGoogleApiClient: GoogleApiClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var txt_register = findViewById<TextView>(R.id.txt_register)
txt_register.setOnClickListener {
var intent = Intent(this@MainActivity, RegisterActivity::class.Java)
finish()
startActivity(intent)
}
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(WEB_CLIENT_ID)
.requestEmail()
.build()
mGoogleApiClient = GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build()
mAuth = FirebaseAuth.getInstance()
sign_in_button.setOnClickListener {
val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
}
}
override fun onConnectionFailed(p0: ConnectionResult) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
private fun updateUI(user: FirebaseUser?) {
if (user != null) {
Log.e("Email", "Value" + user.email)
}
}
fun signIn() {
}
override fun onStart() {
super.onStart()
val currentUser = mAuth!!.currentUser
updateUI(currentUser)
}
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == REQUEST_CODE_SIGN_IN) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result.isSuccess) {
// successful -> authenticate with Firebase
val account = result.signInAccount
firebaseAuthWithGoogle(account!!)
} else {
// failed -> update UI
updateUI(null)
Toast.makeText(applicationContext, "SignIn: failed!" + result.status,
Toast.LENGTH_SHORT).show()
}
}
}
private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)
val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
mAuth!!.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success
Log.e(TAG, "signInWithCredential: Success!")
val user = mAuth!!.currentUser
updateUI(user)
} else {
// Sign in fails
Log.w(TAG, "signInWithCredential: Failed!", task.exception)
Toast.makeText(applicationContext, "Authentication failed!",
Toast.LENGTH_SHORT).show()
updateUI(null)
}
}
}
Dans mon cas, c'est à cause du mauvais identifiant Google Client . Je remplace ma clé par la clé répertoriée dans google-services.json
(sous l'objet oauth_client
).
Dans mon cas, après l’ajout de l’empreinte digitale dans la console Firebase, celle-ci a été automatiquement sélectionnée par la console développeur de Google et l’affiche. Mais la connexion n'a pas fonctionné. Après avoir examiné chaque étape, je me suis dit que Google inversait mon paquet de fichiers manifeste comme ceci com.xxxxxxxx.app
. Mais il s’agit en réalité de app.xxxxxxxx.com
, dans la console de développement Google. J'ai donc supprimé automatiquement créé une empreinte et ajouté une empreinte avec le nom de package correct. BOOM!!. Ça a marché.
Assurez-vous que votre projet ne contient aucun caractère spécial, y compris numérique ou tout type de symbole (le nom du projet doit être simple, par exemple com.google.testproject).