with signinwithpopup signin googlesigninoptions google example code auth android oauth-2.0 google-play-services google-login google-oauth2

signinwithpopup - googlesigninoptions android example



El nombre de usuario de Google obtiene token de acceso con nuevas GoogleSignInOptions (2)

Mi aplicación de Android actualmente usa GoogleAuthUtil para iniciar sesión en los usuarios y recuperar un access_token que se pasa al backend (fragmentos de código debajo de los cuales se muestra la creación de GoogleApiClient y el uso de GoogleAuthUtil para obtener el token).

mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(new Scope("profile")) .build(); ... ... String accessToken = GoogleAuthUtil.getToken(GoogleLoginActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), "oauth2:profile email");

que luego envié al back-end

Ahora estoy intentando pasar al nuevo inicio de sesión de Google: https://developers.google.com/identity/sign-in/android/sign-in

y así cambió la creación de GoogleApiClient como,

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("<web client id>") .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build();

y luego para hacer el uso de inicio de sesión,

startActivityForResult(Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient), RC_GET_TOKEN);

y en el uso del resultado de la actividad (similar al ejemplo en el enlace anterior),

OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); if (opr.isDone()) { // If the user''s cached credentials are valid, the OptionalPendingResult will be "done" // and the GoogleSignInResult will be available instantly. Log.d(TAG, "Got cached sign-in"); handleSignInResult(opr.get()); } else { // If the user has not previously signed in on this device or the sign-in has expired, // this asynchronous branch will attempt to sign in the user silently. Cross-device // single sign-on will occur in this branch. showProgress(); opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(GoogleSignInResult googleSignInResult) { hideProgress(); handleSignInResult(googleSignInResult); } }); }

pero ahora parece que en handleSingInResult(GoogleSignInResult result) solo puedo obtener un id token con result.getSignInAccount().getIdToken();

¿Alguien sabe si es posible obtener un token de acceso de esto (como anteriormente) y, en caso afirmativo, cómo? Cualquier ayuda apreciada.


Después de iniciar sesión, podrás obtener el token:

final String token = GoogleAuthUtil.getToken(mAppContext, mAccountName, AUTH_TOKEN_TYPE);

no te olvides de hacerlo una Asynctask. para más detalles eche un vistazo a aquí

EDITAR:

Tenga en cuenta que, a pesar del nombre del método:

GoogleAuthUtil.getToken()

no le proporciona un Token OAuth, sino que devuelve un "código de autorización de corta duración" de acuerdo con la documentación .

¿Qué debo hacer después de obtener el Código de autorización llamando a GoogleAuthUtil.getToken ()?

Debe transmitir el Código de autorización a su servidor back-end a través de HTTPS. Solo desde su servidor debe intentar recibir el token de Acceso y / o Actualización, no en su aplicación.


Entonces estaba teniendo el mismo problema. lo han cambiado ahora para que el token aparezca en

GoogleSignInAccount acct = result.getSignInAccount(); Log.d(TAG, "handleSignInResult2: "+acct.getIdToken());

Para acceder también a este token, también lo has solicitado en

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

R.string.server_client_ID es la client ID del proyecto que usted hace en su Consola de desarrollador de Google.

Espero que esto te ayude.

aquí también está la documentación que seguí. https://developers.google.com/identity/sign-in/android/backend-auth