log google gms failed error common apiexception android google-signin

android - gms - Error de inicio de sesión en Google 12500



google log in android (26)

Asegúrese de tener las siguientes cosas configuradas correctamente:

  1. Genere ID de cliente en su proyecto de Google.
  2. Proporcione la clave SHA-1 adecuada para ese ID de cliente. (depuración / liberación)
  3. Proporcione el nombre del paquete adecuado para ese ID de cliente.
  4. Asegúrese de haber generado el ID de cliente en el strings.xml , google-services.json o credentials.json .

Estoy intentando integrar Google Sign In en mi aplicación. No tengo un servidor de fondo, solo estoy obteniendo los detalles de la cuenta de Google registrada en mi aplicación.

Primero lo probé usando el ejemplo de inicio de sesión de Google, pero recibí un error (no se realizaron cambios en el código, excepto para imprimir el seguimiento de la pila a continuación). Acabo de usar el ejemplo SignInActivity ya que no tengo un servidor de fondo.

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)

Código

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; } } }

Por lo que leí, el problema podría ser causado por SHA1 Generation .

Seguí la guide completa pero aparentemente no funciona.

Copié el 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

¿Cuál podría ser la posible causa de esto?

Gracias

PD: ¿Podría ser esta una posible causa?

Google Play services out of date. Requires 11720000 but found 10932470


Compruebe si las huellas digitales SHA-1 se agregan a la configuración del proyecto de Firebase. Si no, encuentre la huella digital SHA-1 usando

https://developers.google.com/android/guides/client-auth

Además, encuentre la huella digital SHA-1 de la tecla de liberación usando

keytool -list -v -keystore <keystore path>

Elimine <keystore path> con la ruta del almacén de claves.

Luego agregue ambas huellas digitales SHA-1 a la configuración de los proyectos de Firebase.

NB: No olvide reemplazar google-services.json con google-services.json actualizado con nuevas huellas digitales. Perdí dos días en eso.

Mientras depura

Android Studio generate automáticamente ~/.android/debug.keystore en la primera compilación de depuración y lo usa para firmar la aplicación.

Para ejecutar el SHA-1 (contraseña de android ) ( https://developers.google.com/android/guides/client-auth ):

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Este SHA-1 debe agregarse a la configuración de la aplicación en firebase para permitir el uso de las capacidades de inicio de sesión de Google mientras se prueba la compilación de depuración.


Creo que el error vino del SHA1 incorrecto. No olvide que el SHA1 es diferente entre el modo de lanzamiento y el modo de depuración en el estudio de Android. En lugar de usar keytool para obtener el SHA1, puede usar el proyecto Gradle -> Tarea -> android -> SignatureReport en el estudio de Android (puede abrirlo con el menú Ver -> Ventana de herramientas -> gradle) para obtener la versión y depurar SHA1. Después de eso, para facilitar el trabajo, debe crear 2 credenciales separadas con dos SHA1 en la consola de la nube de Google (Google solo indica crear 1 usando la versión SHA1, cuando la desarrollemos no funcionará, ya que usa la depuración SHA1).


Cuando su aplicación se autentica con un servidor de fondo o accede a las API de Google desde su servidor de fondo, debe pasar el ID de cliente OAuth 2.0 que se creó para su servidor al método requestIdToken cuando crea el objeto GoogleSignInOptions, para acceder a la información básica del perfil del usuario y luego no olvide enviar el correo electrónico de soporte en la pantalla de consentimiento de OAuth que se encuentra en la página Credenciales en la Consola API.


El correo electrónico de soporte y también todos los enlaces de proyecto y privacidad son necesarios para que Google SignIn funcione, de lo contrario arroja 12500.

Configúrelo en console.developers.google.com/apis/credentials

Esto no se menciona en NINGÚN LUGAR en las guías de Firebase.


El error se me apareció cuando la opción Google no estaba habilitada, como se muestra en la imagen .

Sucedió cuando cambié la cuenta de Google y olvidé activar la opción de conectarme con Google.


En mi caso, después de agregar la huella digital en la consola de Firebase, la consola del desarrollador de Google la recogió automáticamente y mostró las huellas digitales. Pero iniciar sesión no funcionó. Después de mirar cada paso, pensé que Google revirtió mi paquete de archivos de manifiesto como este com.xxxxxxxx.app . Pero en realidad es app.xxxxxxxx.com , en la consola de desarrolladores de Google. Así que eliminé automáticamente, creé una huella digital y agregué la huella digital con el nombre del paquete correcto. ¡¡AUGE!!. Funcionó.


En mi caso, se debe a la identificación incorrecta del cliente de Google. Cambio mi clave a la clave que aparece en google-services.json (bajo el objeto oauth_client )


Estaba atrapado en el problema de inicio de sesión de Google desde hace 2 semanas, finalmente lo resolví bien. Permítanme explicar el motivo. El problema estaba relacionado con firebase. En firebase, mencionaron un campo "correo electrónico de soporte" como opcional. Pero una vez que lo agregué (cualquiera de sus correos electrónicos personales), el problema se resolvió y obtuve la respuesta. Si obtiene un error como 12501, está relacionado con la configuración de su cuenta de Google.


Estoy usando la autenticación de Firebase. Mi SHA-1 se indicó correctamente, la identificación del cliente también era correcta pero todavía obtenía 12500.

Resultó que mi problema era que no indicaba el correo electrónico de soporte en la configuración de mi proyecto. (Configuración -> pestaña General -> sección Su proyecto (Configuración pública)).


Estuve atrapado en esto por un tiempo.

Asegúrese de realizar estos pasos

  • La clave SHA correcta se guarda en Firebase Console.
  • Descargue la última versión de google-service.json
  • Y el último y más importante consentimiento de Save OAuth bajo credenciales en la API de Google, OAuth Screen Esto tardó mucho en darse cuenta. Y funcionó bien después de esto.

Experimenté el mismo problema después de abrir mi proyecto en otra computadora (diferente Android Studio). En mi caso, lo resolví usando el Asistente de Firebase, que había utilizado para configurar Firebase inicialmente. Abrí el Asistente de Firebase (Herramientas> Firebase) y seleccioné Autenticación> Conectar. Esto reconectó el proyecto a Firebase y actualizó las configuraciones



Mi solución: (editar: 04 / ene / 2019)


Para mí, el problema era usar un ClientID de ''lanzamiento'' con mi aplicación configurada para la depuración. Asegúrese de tener una versión y una clave de depuración, utilizando cada SHA-1 respectivamente.


Parece que su SHA1 está sobrescrito por Google Play Store. Compruebe en su tienda de Google Play, inicie el panel, en la firma de la aplicación, vea si Google Play tiene un SHA1 adicional agregado.

Y copie ese SHA1, agréguelo a su lugar relevante, haría el trabajo.


Primero asegúrese de haber registrado su aplicación en la consola de desarrolladores de Google

Asegúrate de tener las claves de debug y release en tu aplicación Firebase. Si este error aparece en producción, agregue su SHA-1 release key a la aplicación base de disparo. Si aparece en desarrollo, agregue su SHA-1 debug key .

Obteniendo la clave de depuración / liberación:

keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]

Asegúrese de descargar google-services.json actualizado en su aplicación.


Prueba estas opciones:

keytool -list -v -keystore C:/Users/MG/Desktop/test.jks -alias test

Solicita contraseña y solo ingrese la contraseña. Puede ver las huellas digitales SHA1, MD5.


Si todavía hay alguien por ahí con un problema similar, si está agregando ámbitos personalizados, asegúrese de que sea un ámbito válido. En mi caso, mezclé los ámbitos de Facebook con los ámbitos de Google y ¡me tomó un tiempo descubrirlo!


Simplemente actualice sus servicios de Google Play a la última versión (o 11720000 en este caso). Si está utilizando AVD, las imágenes Nexus 5 y 5X son compatibles con Google Play. Una vez que el emulador esté en funcionamiento, vaya al Menú de controles extendidos> Google Play y luego actualice.


Vaya a su proyecto en la consola de Firebase, abra Configuración del proyecto, agregue sus huellas digitales de certificado SHA allí. Descargue el archivo google-services.json actualizado y agréguelo a la carpeta de la aplicación Proyectos.

Esto funcionó para mí.


developers.google.com/identity/sign-in/android/sign-in siga esta documentación de la API, pero tenga en cuenta que dentro de WEB_CLIENT_ID use el valor de la identificación del cliente que se genera dentro del archivo 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) } } }


para el error 12500 Debe agregar soporte de gmail solo en la configuración de firebase y para el error 10 agregar huella digital ssh en la consola de firebase como se ve en la imagen


Error PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, nulo)

Este error 12500 se puede resolver agregando una dirección de correo electrónico de soporte a su proyecto en la configuración del proyecto. Abrir enlace https://console.firebase.google.com/

Seleccione su proyecto y abra la pestaña de configuración.

Proporcione un correo electrónico de soporte válido y reinicie su aplicación ahora.


Si viene aquí desde flutter : este es uno de los casos esquimales que tenemos que solucionar según la documentación aquí: https://pub.dev/packages/google_sign_in

  • Ir a API y servicios de Google
  • Seleccione la aplicación en la que desea implementar el inicio de sesión de Google.
  • Luego haga clic en Habilitar APIS y Servicios

  • Luego busque la API de Google Peoples

  • Abra la tarjeta API de Google People y haga clic en habilitar, su aplicación podría deshacerse del problema.

También puede suceder que el compilador cordova no pueda encontrar el archivo de almacén de claves adecuado.



Solución: antes de ejecutar ionic cordova build android especifique las propiedades de firma

Paso 1 : generar un archivo de almacén de claves de depuración

Ejecutar el comando

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Usar contraseña: android

Paso 2: Copie el archivo del almacén de claves ( debug.keystore ) desde ~/.android al directorio platform/android de su proyecto actual

Paso 3: cree un archivo llamado release-signing.properties en el directorio platform/android

Paso 4: Agregue el contenido en el archivo

storeFile=debug.keystore keyAlias=androiddebugkey storePassword=android keyPassword=android

Nota: estos son los valores predeterminados. Si ha proporcionado un alias y una contraseña personalizados, utilícelos en consecuencia.

Paso 5: ahora construye ionic cordova build android