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:
- Genere ID de cliente en su proyecto de Google.
- Proporcione la clave SHA-1 adecuada para ese ID de cliente. (depuración / liberación)
- Proporcione el nombre del paquete adecuado para ese ID de cliente.
-
Asegúrese de haber generado el ID de cliente en el
strings.xml
,google-services.json
ocredentials.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
Intente actualizar la pantalla de consentimiento de OAuth en console.developers.google.com/apis/credentials
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.
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.
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)
}
}
}
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