Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Nuevo inicio de sesión de Google en Android

Estoy tratando de obtener una identificación de token de usuario utilizando los nuevos servicios de juego de Google 8.3 y como documentado paso el ID de servidor:

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

Pero todavía estoy consiguiendo un resultado acertado como abajo:

 {statusCode=unknown status code: 12501, resolution=null} 

Y documentado aquí GoogleSignInStatusCodes

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, la recogida de cuenta o el consentimiento de OAuth.

Valor constante: 12501

Ese no es mi caso, ya que ya escogí una cuenta. ¿Alguna idea de cuál podría ser la razón?

  • Android Geofencing con Google Play Services 6.5.87
  • Android: ¿Cómo solucionar la falla de la conexión de la API de Google desde un servicio?
  • Mensaje de error del proyecto de ejemplo de GCM "No se pudo encontrar google-play-services_lib.apk"
  • Android studio no puede resolver com.google.android.gms.location.places.AutocompleteFilter
  • SecurityException: Invocación de Binder a una interfaz incorrecta en APK firmado
  • Estoy recibiendo "Error: No se encontró ningún recurso que coincida con el nombre dado (en el valor con valor @ integer / google_play_services_version)"
  • NullPointerException en los servicios de Google Play al llamar a play () en RemotePlaybackClient
  • Cómo obtener FusedLocation de IntentService
  • 30 Solutions collect form web for “Nuevo inicio de sesión de Google en Android”

    Yo tenía exactamente el mismo problema y he encontrado la solución.

    Si sigue la documentación que se encuentra aquí: https://developers.google.com/identity/sign-in/android/start-integrating

    El primer paso le dice que cree el archivo de configuración (que crea un ID de cliente OAuth 2.0 para usted e inserta en google-services.json)

    Luego, se dice de nuevo sobre la creación de un ID de cliente OAuth 2.0, pero esta vez dice que hay que hacerlo para la aplicación Web

    Y esta es la parte confusa! (Al menos para mí) porque estaba tomando el ID de cliente creado para el android OAuth y no crear uno nuevo para la aplicación web (pensé que la documentación era simplemente redundante o algo así)

    Como se dice, es éste, y solo éste el que tienes que usar como parámetro de los métodos requestIdToken o requestServerAuthCode .

    Olvídese de usar el ID de OAuth de Android en este método porque entonces obtendrá todo el tiempo la respuesta de código de estado fea 12501.

    Creo que el principal problema es que la documentación es un poco confuso sobre esto. O tal vez porque es un poco extraño el hecho de que usted tiene que crear dos identificaciones de OAuth.

    Por lo tanto, como un resumen, usted necesita DOS identificaciones de OAuth, una para Android y otra para la aplicación web, y usted tiene que configurar cada uno en el lugar correcto.

    Yo estaba luchando con esto y desperdiciado casi una semana en ella.

    Así es como lo hice funcionar.

    1. Importar proyecto en AndroidStudio
    2. Crear debug keystore para el proyecto.
    3. Cree la firma SHA1 para el proyecto utilizando debug keystore.
    4. Con la firma SHA1, registra tu aplicación en Google Signin en Google Developer Console.
    5. Genere un archivo de configuración de Google allí. (Puesto en la carpeta de la aplicación de Android Studio)
    6. Utilice el ID de cliente Web de las credenciales de OAuth 2.0 en su proyecto de Android.
    7. Ahora, desde Android Studio, genere depuración de compilación (APK) de su proyecto.
    8. Monte el dispositivo en su sistema -> copie esta versión de depuración firmada de APK e instálela.

    Los tres últimos pasos 6, 7 y 8 , son lo que realmente necesita para cuidar. Si ejecuta directamente el proyecto, entonces APK no está firmado con la depuración de almacén de claves y google no lo reconoce en absoluto.

    Tuve el mismo problema, después de la solución de investigación que se reanuda que server_client_id contenía algún valor incorrecto o su google_services.json no incluye oauth_client con client_id que se registró con su keystore.

     requestIdToken(getString(R.string.server_client_id)) 

    R.string.server_client_id utiliza el ID de cliente OAuth 2.0 para la aplicación Web . Y OAuth Client ID para uso de Android en google_services.json

    Usualmente usamos 2 keystore, 1 usando debug keystore y 1 usando keystore firmado para publicado. Así que si queremos necesitar en el modo de depuración y publicación, registre su ID de cliente de OAuth para Android dos veces, 1 utilizando SHA1 de debug keystore y 1 de keystore firmado para publicado.

    Pequeño ejemplo en mi google_services.json

      "oauth_client": [ { "client_id": "xxx-client-id.com", "client_type": 1, "android_info": { "package_name": "com.app.android", "certificate_hash": "xxxhash" } }, { "client_id": "yyy.client-id.com", "client_type": 1, "android_info": { "package_name": "com.app.android", "certificate_hash": "yyyhash" } } ], 

    Estaba recibiendo el mismo problema, fue porque creé ID de cliente del tipo de aplicación Android

    En su lugar, lo he eliminado y creado ID de cliente de tipo de aplicación web y me deshice de este problema.

    Basta con saber cómo resolver esto … Estaba recibiendo este error al intentar ejecutar la versión de depuración de mi aplicación … Para solucionarlo, agregue una credencial para su aplicación de depuración en la consola de desarrollo y también en los servicios de google .json.

    ¡Esto me lo arregló!

    Tuve el mismo problema y resolví con la siguiente solución:

    1. Cree el archivo de configuración (google-services.json) como se describe aquí y colóquelo en el directorio de su proyecto / app
    2. (Como se menciona en otras respuestas) Uso del ID de cliente de aplicación Web para el método requestIdToken .
    3. [Mi principal problema] Firme su aplicación si trabaja en modo de depuración como a continuación:
      signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" } } buildTypes { release { ... } debug { ... signingConfig signingConfigs.release } } 

    En mi caso, también tuve que comprobar que la depuración SHA-1 se agregó como un cliente OAuth Android válido.

    Ahora lo tengo.

    Así que primero debes seguir las respuestas superiores diciendo: 1. Crea una ID de cliente de OAuth para aplicaciones web en la Consola de desarrolladores de Google y requestIdToken() en requestIdToken() (deshazte del código de estado 12501) 2. Si creaste un cliente de OAuth para Android -id para su clave de hash de producción, cree una nueva ID de cliente de OAuth de Android para su clave de hash de depuración e integrela en google-services.json. (Deshágase del código de estado 12500)

    Y aquí viene la última parte: 3. No se puede llamar a requestIdToken() y requestEmail() a la vez. Al menos en mi caso me deshice de Result: Status{statusCode=INTERNAL_ERROR, resolution=null} al eliminar requestEmail() .

    Buena suerte…

    Utilizar la aplicación web como aplicación server_client_id no Android

    Tuve el mismo problema y me di cuenta de que el código 12501 se devolvió cuando mi server_client_id contenía algún valor incorrecto.

    Dado que no hay un mensaje detallado y la documentación de este código de error es bastante pobre, no sé si su problema tiene la misma causa que la mía.


    Mi aplicación se basa en el código de Android de este ejemplo (clase IdTokenActivity). Para que funcione, también necesitaba integrar el inicio de sesión de Google en mi aplicación:

    • Archivo de configuración de json generado con inicio de sesión de Google activado
    • Añadido plugin y dependencia de Google a mi archivo gradle
    • Creé el ID de cliente de OAuth para esta aplicación y lo server_client_id en mi proyecto como server_client_id

    ¿Está tu apk en modo de depuración? Creo que sólo funciona con un apk firmado.

    1. Sigue el documento ambiguo de google.
    2. Pon a google-services.json en el directorio de tu proyecto
    3. Establece tu gradle como https://stackoverflow.com/a/35216421/5886475

    4. Establecer server_client_id en string.xml. Es su cliente web no cliente android

    Un problema que tuve es que el SHA-1 generé como con el alias incorrecto. El alias DEBE SER androiddebugkey . Así que he puesto el ID de OAuth para Android en mi archivo google-service.json . He puesto el Id del Cliente Web a requestIdToken () . Y en mi caso específico, he generado el SHA-1 con alias androiddebugkey .

    Google-services.json :

     "oauth_client": [ { "client_id": "ANDROID OAUTH ID-.....apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "br.com.packagename", "certificate_hash": "SHA-1 HASH" } },{ "client_id": "WEB CLIEND ID......apps.googleusercontent.com", "client_type": 3 } ] 

    Pieza de firma:

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

    En lugar de R.string.server_client_id , sólo use R.string.default_web_client_id .

    Cuando copia el archivo google-services.json en la aplicación, crea automáticamente este valor de cadena. No es necesario copiar la clave de google-services.json a string.xml Funcionó para mí.

    Resolví este problema haciendo clic en Soporte de Firebase en Android Studio, que puede no ser relevante para usuarios que no son de Firebase.

    1. Ir al menú Herramientas-> Firebase
    2. Haga clic en Conectar su aplicación a Firebase, se mostrará como Conectado en verde una vez que la conexión sea correcta
    3. Haga clic en Agregar autenticación de Firebase en el botón de la aplicación, también se convertirá en verde.

    NOTA: Tener una enorme lista de respuestas en este definitivamente confirmar una cosa. Google necesita actualizar y mantener la documentación a toda prueba.

    Si no funciona ninguna de las opciones anteriores, compruebe si applicationId en la aplicación build.gradle es la misma que el nombre del paquete.

    No sé por qué, pero SHA1 en el estudio de Android se cambia automáticamente y es por eso que estoy recibiendo este error. Para solucionar esto actualizé el SHA1 de mi configuración de proyecto firebase con el nuevo SHA1 de mi estudio android y comenzó a funcionar de nuevo.

    En mi caso, mis credenciales para Client ID for Android en la consola de API de Google sólo contenían el SHA-1 para mi versión firmada de APK . Android Studio usaba el depurador predeterminado para firmar mis compilaciones de depuración y, en ese caso, la depuración del almacén de claves SHA-1 no coincidía con el cliente Android SHA-1 en línea. Mi solución era simplemente firmar las compilaciones de depuración con el keystore de liberación.

    En Android Studio, Build/Edit Build Types... , seleccione su tipo de compilación de depuración y asegúrese de que Config de firma está configurado en su certificado de versión.

    Firma de configuración configurada para liberarse

    Tuve el mismo problema y error 12501 y no de los anteriores no funcionan para mí.

    Mi problema era usar google Default web api que generó para mí. Después de crear mi propio error de api web desapareció y funcionó bien!

    Estos son pasos de trabajo:

    1. Primero creé la clave de depuración de SHA1 y la agregué a la consola de Firebase . Creando SHA1 desde aquí .
    2. Crear tanto la API web y el ID de cliente de OAuth 2.0 android desde aquí
    3. Consiga generado google-service.json de la consola de Firebase y ponga en la carpeta de la aplicación.
    4. Poner este código para GoogleSignnOption

    Me gusta esto:

     gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken ("put the web app client Id that get from the link in developer console ") .requestEmail().build(); 

    Punta 1: descubro que usted debe crear android y la identificación de cliente de la aplicación web para trabajar.

    Consejo 2: si usted de Irán como mí usted puede conseguir el usuario de google pero usted no puede AuthWithGoogle y el resultado fail en auth.signInWithCredential(credential) y usted tuvo que utilizar un cierto poder para volver verdadero.

    Esta es la fuente completa de trabajo de FireBaseAuthDemo en github:

    Introduzca aquí la descripción de la imagen

    Espero ayuda completa

    Si está utilizando el almacén de claves de depuración para crear el proyecto, debe agregar la huella digital SHA-1 de debug.keystore en la Consola de Firebase .

    1. En su consola Firebase , abra su proyecto
    2. Vaya a Parámetros. Tab General
    3. Al final de esta página, hay un campo para agregar una huella dactilar SHA-1
    4. Pegue el SHA-1 en el campo de la consola.

    Para obtener SHA-1 de debug.keystore:

    Mac / Linux:

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

    Ventanas:

      keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore 

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

    Eso es todo !

    Tuve este problema también, después de seguir las instrucciones de Google para Firmar automáticamente su aplicación . Si está utilizando este método para firmar sus aplicaciones, deberá incluir la huella dactilar de keystore generada en sus credenciales de API.

    En el navegador del proyecto, haga clic con el botón derecho en su aplicación y seleccione Abrir configuración del módulo.

    Captura de pantalla de Open Module Settings | App | Firma | Config

    Lo encontré menos confuso poner el archivo .jks en el .jks de mi proyecto /app . En cualquier caso, ejecute esta línea en él.

     keytool -list -v -keystore /home/user/keystores/android.jks 

    Se te solicitará una contraseña. No estoy seguro de si es la Key Password o Store Password porque los míos son los mismos. : |

    La consola escupirá un montón de huellas dactilares de certificados. Tome el SHA1 y péchelo en sus credenciales de API en la consola del desarrollador de API de Google . Tendrá que introducirlo para los OAuth 2.0 client IDs cliente OAuth 2.0 client IDs Android, aunque no utilice realmente ese id_cliente en su aplicación. Si está utilizando otras API para Android, coloque el mismo SHA1 en las credenciales de clave apropiadas bajo API keys .

    Oviously primero comprobar su liberación sha1 clave 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(); 

    Usted tiene 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 devolviendo statusCode = INTERNAL_ERROR O statusCode = Error 12501 O statusCode = Error 12500. A continuación, este objeto gso podría ser utilizado 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(); 

    Aquí hay una nueva. Estuve tratando de 6 horas para iniciar sesión en el emulador con la identificación de mi dominio corporativo de Google Apps, sin éxito, obteniendo 12501 errores. En una corazonada, probé mi identificación personal de gmail y funcionó. Idem si probé en mi teléfono con mi identificación corporativa. Resulta que el emulador no tiene la configuración adecuada de Mobile Device Management para permitir que mi ID corporativo se conecte.

    Así que si quiero probar en el emulador con este ID corporativo, tengo que instalar Google Play Store, luego el software MDM y configurarlo.

    De mi extraña experiencia con este error, puedo decir que también debes intentar reiniciar tu teléfono para deshacerse de este error 🙂 Se implementó Google Ingresar usando cuentas de Suite G que tienen una política de dispositivo asignada a través de Google Admin . Así que en el primer inicio de sesión fue necesario instalar la aplicación Device Policy. Después de todos los pasos posteriores completado, fue simplemente lanzando error 12501. Al mismo tiempo la misma aplicación funcionaba bien en otros teléfonos. Así que sólo el reinicio ayudó. Pero ayudado

    A pesar de que ya existían muchas respuestas sobrecogidas en esta pregunta, luché para entender la lógica. Así que, vienen con mi investigación.

    Para obtener SHA-1, ejecute esto en el terminal:

     keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v 

    Acerca de OAuth 2.0 client IDs

    • OAuth para la web (en la aplicación se utiliza como server_client_id )
    • OAuth para android (Esto se debe crear usando el nombre de paquete correcto y la huella dactilar de certificado de firma SHA-1 ).

    Si está utilizando el almacén de claves diferente para la depuración y la liberación, debe crear OAuth 2.0 client IDs separados usando el nombre de paquete respectivo y SHA-1 .

    Puede crear o editar sus OAuth 2.0 client IDs aquí https://console.developers.google.com/apis/credentials?project=

    1. Navegación a su aplicación.
    2. Si ya tiene un OAuth para Android, haga clic en su nombre y compruebe el nombre del paquete y SHA-1 .

    Podemos usar el mismo almacén de claves para depuración y liberación al guardar los detalles del almacén de claves en globales (locales, no dentro del proyecto) y obtenerlo en build.gradle como se muestra a continuación.

     def key_alias = "" def key_password = "" def store_file = "" def store_password = "" try { key_alias = YOUR_KEY_ALIAS key_password = YOUR_KEY_PASSWORD store_file = YOUR_KEYSTORE_PATH store_password = YOUR_KEYSTORE_PASSWORD } catch (Exception exception) { throw new IllegalStateException('Failed to find key store details. Social Login is disabled'); } android { signingConfigs { config { keyAlias key_alias keyPassword key_password storeFile file(store_file) storePassword store_password } } buildTypes { debug { signingConfig signingConfigs.config // ... } release { signingConfig signingConfigs.config // ... } } } 

    Puede utilizar el siguiente fragmento

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // ... } else if (result.getStatus().getStatusCode() == CommonStatusCodes.NETWORK_ERROR) { // No internet connection } else if (result.getStatus().getStatusCode() == CommonStatusCodes.DEVELOPER_ERROR) { // Wrong server OAuth key(server_client_id) } else if (result.getStatus().getStatusCode() == 12501) { // Wrong app signing-certificate fingerprint SHA1 } else { Log.e("Google sign in error", result.getStatus().toString()); } } } 

    Nota: Si habilitó sólo el inicio de sesión de Google cuando generó el archivo de configuración, no necesita agregar el archivo google-servies.json en su proyecto (generar el archivo realiza los pasos de configuración necesarios).

    Intente seguir estos pasos:

    1. Clonar el siguiente proyecto https://github.com/googlesamples/google-services

    2. Siga la guía en https://developers.google.com/identity/sign-in/android/start

    3. Utilice el cliente Web (creado automáticamente por Google Service) y agréguelo en requestIdToken (…)

       GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com") .build(); 
    4. Asegúrese de que está utilizando el mismo almacén de claves utilizado que se agrega al proyecto de Google. Por ejemplo, si ha utilizado el siguiente comando para generar la clave SHA-1

       keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore 
    5. A continuación, agregue el siguiente código en el archivo app / build.gradle dentro de android {…} [Resuelto mi problema]

       signingConfigs { debug { storeFile file("/home/ashwin/.android/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.debug } } 

    Nota: Su keyPassword y keyAlias ​​deben ser los mismos utilizados durante la generación del certificado SHA-1.

    1.Specifique signatureConfigs en su archivo gradle

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

    2.Go para construir tipos en la estructura del proyecto (en Android Studio) y especificar signedConfigs a "config"

    Ahora limpie su proyecto y construya de nuevo. Deberia de funcionar.

    Si lo anterior no funciona, a continuación, es el último recurso.
    Pruebe el paso uno y construya y compruebe. Si no funciona, vaya al siguiente paso e intente volver a crear.

    1. Construir un apk firmado (Con la contraseña de recuerdo marcada).
    2. Antes de firmar, compruebe el nombre de archivo del archivo de almacén de claves y el de un miembro del equipo al firmar el apk (en el android studio).
    3. Instale el apk firmado en su dispositivo.
    4. Espere cinco minutos.
    5. Trate de cantar en google. Si sigue esperando 12501, espere cinco minutos más. Al hacer eso hit gradle sincronización.
    6. Inténtalo de nuevo. Deberia de funcionar.

    Dado que la aplicación solicita que Google inicie sesión desde la vista web, necesitamos crear una aplicación web auth client id v2.0

    1. Ir a las credenciales de API de Google

      Elige tu proyecto de Android desde la esquina superior izquierda

      2

    2. Haga clic en Crear credenciales -> Id de cliente de OAuth -> Elegir aplicación Web

    3. Haga clic en Aceptar

    4. Ahora, si ha sincronizado Android Studio con Firebase (logueado), simplemente reconstruya el proyecto. De lo contrario, descargue el archivo google-services.json actualizado y reemplace el existente.

      Debe funcionar bien.

    Tengo el mismo problema también, se resolvió como sigue:

    1. Me hicieron para suprimir el SHA1 pensado previamente y crear y fijar nuevo SHA1.

    2. Generar nuevo google-services.json y establecerlo en mi directorio de aplicaciones

    3. Utilicé exactamente los códigos de desarrollador de google

    4. Mi result.isSucces() devuelto true después de ejecutar el proyecto

    Como resumen, elimine el antiguo sha1 y cree el nuevo sha1 y descargue el nuevo google-services.json

    Yo estaba enfrentando el mismo error de 12501 status . Esto se debe a SHA-1 desajuste de la versión APK y depurar APK.

    1. Hacer un APK firmado. Para firmar un APK, elija la ruta existente del almacén de claves que ha utilizado para crear SHA-1. Eg /.android/debug.keystore
    2. Dar alias-name: androiddebugkey
    3. Storepass y keypass: android.
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.