Estoy intentando integrar Google Sign In en mi aplicación. No tengo un servidor back-end, solo obtengo 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 obtuve 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 back-end.
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 guía completa pero aparentemente no está funcionando.
Copié el SHA1 de Gradle signingReport
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
android
google-signin
Aaron
fuente
fuente
Respuestas:
Simplemente actualice sus servicios de Google Play a la última versión (o 11720000 en este caso). Si usa AVD, las imágenes de 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.
fuente
Error PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, nulo)
fuente
Compruebe si las huellas digitales SHA-1 se agregan a la configuración del proyecto de base de fuego. Si no es así, busque la huella digital SHA-1 usando
https://developers.google.com/android/guides/client-auth
Además, busque la huella digital SHA-1 de la clave de liberación usando
Eliminar
<keystore path>
con la ruta del almacén de claves.Luego agregue ambas huellas digitales SHA-1 a la configuración de proyectos de base de fuego.
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 genera automáticamente
~/.android/debug.keystore
en la primera compilación de depuración y lo usa para firmar la aplicación.Para ejecutar SHA-1 (contraseña
android
) ( doc ):Esto
SHA-1
debe agregarse a la configuración de la aplicación enfirebase
para permitir el uso de las capacidades de inicio de sesión de Google mientras se prueba la compilación de depuración.fuente
para el error 12500, debe agregar soporte de gmail en la configuración de firebase solamente y para el error 10, agregue la huella digital ssh en la consola de firebase como se ve en la imagen
fuente
El correo electrónico de soporte y también todos los enlaces de proyectos y privacidad son necesarios para que Google SignIn funcione, de lo contrario arroja 12500.
Configúrelo en https://console.developers.google.com/apis/credentials en la parte inferior de la segunda pestaña llamada "Pantalla de consentimiento de OAuth"; allí encontrará tres enlaces que deben configurarse.
Esto no se menciona en NINGÚN LUGAR en las guías de Firebase.
fuente
Intente actualizar la pantalla de consentimiento de OAuth en https://console.developers.google.com/apis/credentials
fuente
Estuve atrapado en esto por un tiempo.
Asegúrese de que se realicen estos pasos:
fuente
Parece que Google Play Store sobrescribe tu SHA1. Verifique en su tienda de Google Play, panel de inicio, debajo de 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.
fuente
Si todavía hay alguien 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 de Google y me tomó un tiempo averiguarlo.
fuente
Estoy usando Firebase Authentication. Mi SHA-1 se indicó correctamente, la identificación del cliente también era correcta, pero todavía recibía 12500.
Resultó que mi problema fue que no indiqué el correo electrónico de soporte en la configuración de mi proyecto. (Configuración -> pestaña General -> sección Tu proyecto (Configuración pública)).
fuente
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í.
fuente
Creo que el error provino del SHA1 incorrecto. No olvide que el SHA1 es diferente entre el modo de liberación 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 -> signingReport en el estudio de Android (puede abrirlo en el menú Ver -> Ventana de herramientas -> gradle) para obtener el lanzamiento 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 que cree 1 usando la versión SHA1, cuando lo desarrollemos no funcionará ya que usa la depuración SHA1).
fuente
Primero, asegúrese de haber registrado su aplicación en la consola de desarrolladores de Google.
Asegúrese de tener las claves
debug
yrelease
en su aplicación de Firebase. Si este error aparece en producción, agregue suSHA-1 release key
aplicación a la base de fuego. Si aparece en desarrollo, agregue suSHA-1 debug key
.Obteniendo la clave de depuración / liberación:
Asegúrese de descargar la actualización
google-services.json
a su aplicación.fuente
Para mí, el problema era usar un ClientID de 'versión' con mi aplicación configurada para depurar. Asegúrese de tener una versión y una clave de depuración, utilizando cada SHA-1 respectivamente.
fuente
Si vienes aquí desde flutter : este es uno de los casos de esquina que tenemos que arreglar según la documentación aquí: https://pub.dev/packages/google_sign_in
fuente
Cuando su aplicación se autentica con un servidor backend o accede a las API de Google desde su servidor backend, debe pasar el ID de cliente OAuth 2.0 que se creó para su servidor al método requestIdToken cuando construye el objeto GoogleSignInOptions, para acceder a la información básica del perfil del usuario. . Además, 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.
fuente
También puede suceder que el compilador de 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 firmaPaso 1 : generar un archivo de almacén de claves de depuración
Ejecuta el comando
Usar contraseña:
android
Paso-2: Copia el archivo de almacén de claves (
debug.keystore
) a partir~/.android
deplatform/android
directorio de su proyecto actualPaso 3: Cree un archivo llamado release-signing.properties en el
platform/android
directorioPaso 4: agregue el contenido en el archivo
Paso 5: ahora construye
ionic cordova build android
fuente
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 usado para configurar Firebase inicialmente. Abrió el Asistente de Firebase (Herramientas> Firebase) y seleccionó Autenticación> Conectar. Esto volvió a conectar el proyecto a Firebase y actualizó las configuraciones
fuente
Estuve atrapado en el problema de inicio de sesión de Google desde la semana 2, finalmente lo solucioné bien. Permítame 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 solucionó y obtuve la respuesta. Si obtiene un error como 12501, entonces está relacionado con la configuración de su cuenta de Google.
fuente
Estuve atrapado en esto por un tiempo.
Asegúrese de que se realicen estos pasos:
fuente
En mi caso, se debe a una identificación de cliente de Google incorrecta. Cambio mi llave a la llave listada en
google-services.json
(bajooauth_client
objeto)fuente
Asegúrese de tener las siguientes cosas configuradas correctamente:
strings.xml
,google-services.json
ocredentials.json
archivo.fuente
https://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.
fuente
En mi caso, después de agregar la huella digital en la consola de Firebase, la consola de desarrolladores de Google la recogió automáticamente y mostró las huellas digitales. Pero el inicio de sesión no funcionó. Después de mirar cada paso, pensé que Google invirtió mi paquete de archivos de manifiesto de esta manera
com.xxxxxxxx.app
. Pero en realidad estáapp.xxxxxxxx.com
en la consola de desarrollo de Google. Así que eliminé automáticamente la huella digital y agregué la huella digital con el nombre correcto del paquete. ¡¡AUGE!!. Funcionó.fuente
El error me apareció cuando la opción de 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.
fuente
Asegúrese de que su proyecto no debe contener ningún carácter especial, incluidos números o cualquier tipo de símbolo (el nombre del proyecto debe ser simple como com.google.testproject)
fuente
En mi caso, estaba trabajando en una aplicación que no era de producción, el problema era que al crear un proyecto en firebase console, había problemas al sincronizar las claves SHA-1 desde las consolas de desarrollador de Firebase y Google. Entonces, decidí crear el proyecto primero en la consola de desarrollador de Google y luego seleccionarlo al crear un nuevo proyecto en la consola de Firebase.
También hice un tutorial para esto, que puede ayudarte.
fuente
En mi caso, el problema era que mi emulador no tenía Play Store. Hice el emulador (llamado API 23) a través de Visual Studio, porque también desarrollo usando Xamarin.Forms, y en el Administrador de dispositivos Android de Visual Studio puede seleccionar si su emulador debe tener Google Play Store.
Tuve que crear un emulador a través del AVD de Android Studio y asegurarme de que tuviera Play Store:
fuente
En mi caso, este error estaba allí porque el equipo senior eliminó la autenticación de Android, ya que parece que no hay necesidad de una clave de Android en la autenticación de backend. Por lo tanto, se necesitan claves de cliente web y de Android para iniciar sesión en Google.
fuente
Prueba estas opciones:
Solicita la contraseña y simplemente ingrese la contraseña. Puede ver las huellas digitales SHA1, MD5.
fuente