android - studio - Error 12501 autenticando con inicio de sesión de google
google log in android (12)
¿Ya ha configurado su
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
Estoy usando los servicios de inicio de sesión de Google para autenticar a los usuarios que usan mi aplicación. Lo puse a trabajar cuando solo solicité información por correo electrónico
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail().build();
Luego, descubrí que también necesito solicitar un token de identificación para poder autenticarme con mi back-end, 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 dejaba iniciar sesión después de los cambios.
El estado que
Status{statusCode=unknown status code: 12501, resolution=null}
cada vez que intento 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 oAuth en mi consola de desarrollo es para la aplicación web:
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 lugares; de lo contrario, ni siquiera funcionaría sin la solicitud del token.
2 personas también sugirieron que la aplicación debe estar firmada para que esto funcione, pero la documentación de Google dice que la clave de depuración también debería funcionar, y no tiene sentido hacer que las personas firmen las aplicaciones para la depuración.
He estado tratando de resolver esto por horas pero sin éxito. ¿Cual podría ser el problema? No dude en solicitar más información que podría haber olvidado poner aquí.
Asegúrese de agregar la huella digital SHA-1 para su clave de firma (versión) a la consola Firebase
Encuentre su clave SHA1
:
keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
Agréguelo a la consola de Firebase: vaya a https://console.firebase.google.com , seleccione su aplicación, seleccione configuración.
Bueno, esto es muy vergonzoso, 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 la ID del recurso en lugar del recurso de cadena desreferenciado.
El
<meta-data>
de Androidmanifest.xml está fuera del gabinete
<application></application>
.
Es por eso que obtienes el error 12501
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
En mi proyecto, tenía un ID de aplicación diferente en mi archivo gradle que el nombre del paquete en mi manifest.xml y esa fue la fuente de mi problema.
La clave de Android que tuve que crear necesitaba tener el ID de aplicación fqdn y NO el nombre del paquete (al contrario de lo que Google te dice) para que funcione para mí.
Pensé que lo dejaría aquí en caso de que ahorre tiempo a alguien.
Experimenté un problema similar. En mi caso, fue porque la 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 en la práctica, todo es cuestión de sha, significa que si registras el sha de una dirección IP particular y obtienes google.services json, eso será perfecto, ya sea que puedas usar
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="@string/app_id" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
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 debe generar nuevamente sha para esa máquina en particular. Gracias
No sé cuán relevante es esta pregunta en 2019. Sin embargo, el código de error 12501 significa:
El inicio de sesión fue cancelado por el usuario. es decir, el usuario canceló algunas de las resoluciones de inicio de sesión, por ejemplo, selección de cuenta o consentimiento de OAuth.
Consulte el siguiente enlace para obtener más información:
Obviamente, primero verifique que su clave sha1 de liberación sea correcta o no. Pero si todavía no funciona y está utilizando los servicios de Google Play 8.4.0 (es decir, compile ''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 OR statusCode = Error 12500. Entonces este objeto gso podría usarse 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();
Vea esto para más detalles: el inicio de sesión de Google no funciona en la versión de lanzamiento de Android
Tuve este problema cuando accidentalmente utilicé el ID de cliente de la aplicación de Android en lugar de Webapp como el parámetro
requestIdToken()
.
Debe usar la ID de cliente de la aplicación web allí.
Por defecto se llama
Web client (auto created by Google Service)
Yo tuve el mismo problema. El problema era que de alguna manera había seleccionado el "Proyecto API" incorrecto y, por lo tanto, elegí la clave de cliente web incorrecta. Obviamente, se crearon dos ID de cliente de servidor OAuth2 en mis dos proyectos de API mientras intentaba ejecutar la aplicación de demostración.
1.Especifique signConfigs en su archivo gradle
signingConfigs {
config {
keyAlias ''appalias''
keyPassword ''hunter123''
storePassword ''hunter123''
storeFile file(''path/to/keystore.jks'')
}
}
2. Vaya a Tipos de compilación en la Estructura del proyecto (en Android Studio) y especifique signConfigs en "config"
Ahora limpia tu proyecto y construye de nuevo. Deberia de funcionar.
Si lo anterior no funciona, entonces a continuación es su último recurso.
Prueba el primer paso, compila y comprueba.
Si no funciona, vaya al siguiente paso e intente construir de nuevo.
- Construya un apk firmado (con recordar contraseña marcada).
- Antes de firmar, verifique el nombre de archivo del archivo de almacén de claves y el que entregó al firmar el apk (en el estudio de Android).
- Instala el apk firmado en tu dispositivo.
- Espera cinco minutos.
- Intenta cantar en google. Si todavía viene 12501, espere cinco minutos más. Al hacer ese golpe gradle sync.
- Inténtalo de nuevo. Deberia de funcionar.
Editar: Google ha agregado la firma apk en la consola. Si ya firmó su apk, ignórelo O si desea usarlo, tenga cuidado porque puede romper su configuración actual de inicio de sesión de Google