android google-play-services google-api-client google-signin google-plus-signin

android - Obtenga detalles de la persona en el nuevo inicio de sesión de Google en Play Services 8.3



google-play-services google-api-client (3)

¡Para obtener información de perfil, Google introdujo la forma más fácil hasta ahora, creo!

GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(getActivity()); if (acct != null) { String personName = acct.getDisplayName(); String personGivenName = acct.getGivenName(); String personFamilyName = acct.getFamilyName(); String personEmail = acct.getEmail(); String personId = acct.getId(); Uri personPhoto = acct.getPhotoUrl(); }

Estoy tratando de obtener el perfil de un usuario utilizando la nueva API de inicio de sesión de Google introducida en los servicios de juego 8.3. Además de Nombre para mostrar, Correo electrónico e Id, también necesito el género del usuario.

Plus.PeopleApi.getCurrentPerson()

está en desuso según los servicios de Play 8.3 y también devuelve nulo para mí aunque

mGoogleApiClient.hasConnectedApi(Plus.API)

devuelve verdadero

GoogleSignInAccount.getGrantedScopes

devoluciones

https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.login profile email openid

Google Developer Console no muestra ningún resultado en la API de Google+. He colocado el archivo google-services.json correcto en la aplicación / carpeta de la aplicación. Incluso generé la huella digital SHA1 programáticamente para verificar si estaba usando el almacén de claves correcto.

¿Cómo puedo obtener los datos de perfil de google + de la persona (género, apellido, nombre de pila, etc.) usando la nueva API de inicio de sesión?


Plus.API ha quedado en desuso. Consulte las notas de desaprobación a continuación: https://developers.google.com/+/mobile/android/api-deprecation

Si necesita información de perfil que no sea nombre / apellido / nombre para mostrar, correo electrónico y URL de imagen de perfil (que ya proporciona la API de inicio de sesión ), utilice la nueva API de personas .

En Android, puedes hacer esto:

// Add dependencies compile ''com.google.api-client:google-api-client:1.22.0'' compile ''com.google.api-client:google-api-client-android:1.22.0'' compile ''com.google.apis:google-api-services-people:v1-rev4-1.22.0''

Luego escriba el código de inicio de sesión.

// Make sure your GoogleSignInOptions request profile & email GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // Follow official doc to sign-in. // https://developers.google.com/identity/sign-in/android/sign-in

Use People Api para recuperar información detallada de la persona.

/** Global instance of the HTTP transport. */ private static HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport(); /** Global instance of the JSON factory. */ private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); // On worker thread GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(MainActivity.this, Scopes.PROFILE); credential.setSelectedAccount( new Account(googleSignInAccount.getEmail(), "com.google")); People service = new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName(APPLICATION_NAME /* whatever you like */) .build(); // All the person details Person meProfile = service.people().get("people/me").execute(); // e.g. Gender List<Gender> genders = meProfile.getGenders(); String gender = null; if (genders != null && genders.size() > 0) { gender = genders.get(0).getValue(); }


ACTUALIZACIÓN: según los comentarios de @Isabella Chen a continuación, para quién no quiere usar getCurrentPerson que está marcado como obsoleto, puede comenzar a usar la API de Google People , también puede ver mi otra respuesta en la siguiente pregunta SO:

No se puede obtener un cumpleaños privado de la cuenta de Google Plus aunque la solicitud explícita

OMI, puedes consultar el siguiente código:

// [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. // FOR PROFILE PICTURE: // Ref: https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount.html#getPhotoUrl%28%29 // getPhotoUrl(): Gets the photo url of the signed in user. // Only non-null if requestProfile() is configured and user does have a Google+ profile picture. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope(Scopes.PROFILE)) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestProfile() .requestEmail() .build(); // [END configure_signin] // [START build_client] // Build a GoogleApiClient with access to the Google Sign-In API and the // options specified by gso. mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addApi(Plus.API) .build(); // [END build_client]

Entonces:

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); Person person = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); Log.i(TAG, "Gender: " + person.getGender()); } }

Información de Logcat:

11-20 09:06:35.431 31289-31289/com.example.googlesignindemo I/GoogleSignIn: Gender: 0

¡Espero que esto ayude!