Error 12501 autenticando con inicio de sesión de Google

Estoy usando los servicios de inicio de sesión de Google para autenticar a los usuarios que usan mi aplicación. Lo tengo que funcionar cuando solicité información por correo electrónico

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

Entonces, me di cuenta de que también necesitaba solicitar un token de identificación para poder autenticar con mi backend, así que lo hice:

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

El problema es que no me permite iniciar sesión después de los cambios. El estado que sigo recibiendo cada vez que bash iniciar sesión es Status{statusCode=unknown status code: 12501, resolution=null} .

He estado buscando y encontré esta publicación que es más o menos lo mismo. Sin embargo, no cometí ninguno de los errores nombrados por las personas que respondieron, el ID de cliente de OAuth en mi consola de desarrollo es para la aplicación web: ID de cliente Y R.string.server_client_id es el primer ID de cliente de la imagen. los nombres de los paquetes son, por supuesto, correctos en todos los casos; de lo contrario, ni siquiera funcionarían sin la solicitud del token. 2 personas también sugirieron que la aplicación necesita ser firmada para que funcione, pero la documentación de Google dice que la clave de depuración también debería funcionar, y no tiene sentido que las personas firmen las aplicaciones para la depuración.

Estuve tratando de resolver esto por horas pero sin éxito. ¿Cual podría ser el problema? Por favor, siéntase libre de solicitar más información que podría haber olvidado poner aquí.

Bueno, esto es muy embarazoso, pero lo descubrí:

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

Le estaba enviando el ID del recurso en lugar de un recurso de cadena desreferenciado.

Obviamente, primero compruebe que su liberación de la tecla sha1 es correcta o no. Pero si todavía no está funcionando y estás usando google play services 8.4.0 (iecompile ‘com.google.android.gms: play-services: 8.4.0’), el problema podría resolverse modificando el objeto GoogleSignInOption. En lugar de:

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

Tienes que usar:

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

Esto resuelve el error que devuelve statusCode = INTERNAL_ERROR OR statusCode = Error 12501 O statusCode = Error 12500. Entonces este objeto gso se podría usar para crear GoogleApiClient como se muestra a continuación:

  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(); 

Ver esto para más detalles: Google signin no funciona en la versión de lanzamiento de Android

En mi proyecto, tenía una applicationId diferente en mi archivo gradle que packagename en mi manifest.xml y esa era la fuente de mi problema.

La clave de Android que tuve que crear necesitaba tener la aplicación fdn fqdn y NO el nombre del paquete (al contrario de lo que Google le dice) para que funcione para mí.

Pensé que lo dejaría aquí en caso de que le ahorre tiempo a alguien.

Tuve este problema cuando accidentalmente usé el ID de cliente de la aplicación de Android en lugar de Webapp como el parámetro requestIdToken() .

Debería usar la ID de Cliente de Webapp allí. Por defecto se llama Web client (auto created by Google Service)

1.Especifique signingConfigs en su archivo gradle

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

2. Vaya a Tipos de comstackción en la Estructura del proyecto (en Android Studio) y especifique signingConfigs en “config”

Ahora limpia tu proyecto y comstack de nuevo. Deberia de funcionar.

Si lo anterior no funciona, a continuación es su último recurso.
Pruebe el primer paso y compile y verifique. Si no funciona, vaya al siguiente paso e intente construir de nuevo.

  1. Cree una aplicación firmada (con la contraseña recordada marcada).
  2. Antes de firmar, compruebe el nombre de archivo del archivo de almacén de claves y el que cede mientras firma el apk (en el estudio de Android).
  3. Instale el apk firmado en su dispositivo.
  4. Espera cinco minutos.
  5. Intenta cantar en google. Si todavía está 12501, espere cinco minutos más. Al hacer eso, golpea la sincronización gradle.
  6. Inténtalo de nuevo. Deberia de funcionar.

Editar: Google ha agregado la firma de apk en la consola. Si ya firmó su apk, ignórela O, si desea usarla, tenga cuidado, ya que puede romper su configuración de inicio de sesión de google actual.

¿Ya configuró sus signingConfigs y buildTypes en su Gradle? Lo arreglé especificando explícitamente esas cosas en gradle. Lea aquí http://developer.android.com/tools/publishing/app-signing.html

Asegúrese de haber agregado la huella digital SHA-1 para su clave de firma de (liberación) a la consola de Firebase.

Encuentre su clave SHA1 : keytool -exportcert -list -v -alias -keystore

Agréguelo a la consola de firebase: vaya a https://console.firebase.google.com , seleccione su aplicación, seleccione configuración.

enter image description here

Yo tuve el mismo problema. El problema fue que, de alguna manera, había seleccionado el “Proyecto API” incorrecto y, por lo tanto, elegí la clave de cliente web equivocada. Obviamente, se crearon dos ID de cliente de servidor OAuth2 en mis dos proyectos de API, mientras que mis bashs de ejecutar la aplicación de demostración.

vista de configuración

Experimenté un problema similar. En mi caso, fue porque el ID del cliente del servidor que estaba usando era de un proyecto diferente al de las claves del cliente. Resulta que deben ser del mismo proyecto.

Hola, he visto los comentarios anteriores, pero como he hecho de forma práctica, es todo un problema, significa que si registras el sha de una dirección IP particular y obtienes google.services json, eso perfeccionará cualquiera de los dos.

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

o gso = new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken (LoginActivity.this.getResources (). getString (R.string.server_client_id)) .requestEmail (). build (); pero si desea crear una aplicación en otra dirección IP con otra máquina, sha le muestra el código de estado de error 12501, por lo que necesita generar de nuevo sha para esa máquina en particular. Gracias

Los de Androidmanifest.xml están fuera del gabinete . Es por eso que obtienes el error 12501