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!