studio googlesigninoptions google example con code android google-play-services google-plus google-signin

android - example - googlesigninoptions builder



Obtenga la fecha de nacimiento y el género del usuario con Google Sign-In Android (6)

A continuación mi respuesta espero que te sirva de ayuda.

Plus.PeopleAPI ha quedado en desuso en los servicios de Google Play 9.4 como notas de declaración de Google, consulte las siguientes soluciones utilizando la API de Google People en su lugar:

Obtenga los detalles de la persona en el nuevo inicio de sesión de Google en Play Services 8.3 (la respuesta de Isabella Chen);

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

FIN DE ACTUALIZACIÓN

En primer lugar, asegúrese de haber creado el perfil de Google+ para su cuenta de Google. Luego puedes consultar el siguiente código:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestEmail() .build();

y

mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addApi(Plus.API) .build();

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); // G+ Person person = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); Log.e(TAG, "--------------------------------"); Log.e(TAG, "Display Name: " + person.getDisplayName()); Log.e(TAG, "Gender: " + person.getGender()); Log.e(TAG, "AboutMe: " + person.getAboutMe()); Log.e(TAG, "Birthday: " + person.getBirthday()); Log.e(TAG, "Current Location: " + person.getCurrentLocation()); Log.e(TAG, "Language: " + person.getLanguage()); } }

Dentro del archivo build.gradle

// Dependencia para el inicio de sesión de Google

compile ''com.google.android.gms:play-services-auth:8.3.0'' compile ''com.google.android.gms:play-services-plus:8.3.0''

Puedes echar un vistazo al proyecto de ejemplo de belo GitHub. Espero que esto ayude y resuelva su problema.

https://github.com/ngocchung/GoogleSignInDemo

Si desea la última integración, siga el siguiente enlace que contiene una buena documentación y un breve resumen del código y de todos los parámetros.

https://developers.google.com/identity/sign-in/android/start-integrating

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(); }

He integrado el Google Sign-In en mi aplicación. Puedo obtener el Email del usuario y DisplayName . Ahora, quiero obtener la fecha de Birthdate y el Gender del usuario.

He agregado todas las requests y GoogleApiClient requeridos en GoogleApiClient cuales son otorgados por API. Aquí está el 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. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestProfile() <- This .requestScopes( new Scope(Scopes.PLUS_ME), new Scope(Scopes.PROFILE) <- This ) .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 */, new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { // An unresolvable error has occurred and Google APIs (including Sign-In) will not // be available. Log.d(TAG, "onConnectionFailed:" + connectionResult); } } /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addScope(new Scope(Scopes.PLUS_ME)) <- This .addScope(new Scope(Scopes.PROFILE)) <- This .build(); // [END build_client]

Aquí están los ámbitos concedidos en GoogleSignInAccount

private void setupUserData(GoogleSignInAccount acct) { if (acct != null) { mPrefs.setName(acct.getDisplayName()); mPrefs.setEmail(acct.getEmail()); if (acct.getPhotoUrl() != null) { mPrefs.setPicURL(acct.getPhotoUrl().toString()); } Set<Scope> scopes = acct.getGrantedScopes(); <- This for (Scope scope : scopes) { Log.d(TAG, "setupUserData: " + scope.toString()); <- This } } }

Aquí está el registro de los scopes concedidos

D/SplashActivity: setupUserData: GrantedScopes size 6 D/SplashActivity: setupUserData: https://www.googleapis.com/auth/plus.me D/SplashActivity: setupUserData: https://www.googleapis.com/auth/userinfo.email D/SplashActivity: setupUserData: https://www.googleapis.com/auth/userinfo.profile D/SplashActivity: setupUserData: email D/SplashActivity: setupUserData: profile D/SplashActivity: setupUserData: openid

Aquí está la dependencia de mi servicio móvil de Google

compile ''com.google.android.gms:play-services-auth:10.2.0'' compile ''com.google.android.gms:play-services-plus:10.2.0''

Ahora, no sé cómo obtener acceso a user''s profile information .


Aquí está el ejemplo completo de trabajo, espero que sea de ayuda para el futuro lector. Lo que hace la aplicación es iniciar sesión (la API de inicio de sesión incluye el nombre y el correo electrónico), luego solicitar la autenticación de cumpleaños y sexo (API de personas) y guardarla en SharedPreferences para reutilizarla en el próximo lanzamiento. Finalmente, imprimirá información básica e información avanzada (género y cumpleaños).

public class MainActivity extends AppCompatActivity { static final private int RC_SIGN_IN = 1; static final private String TAG = "hole"; private WeakReference<MainActivity> weakAct = new WeakReference<>(this); private GoogleSignInClient mGoogleSignInClient; private GoogleSignInAccount account; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Scope myScope = new Scope("https://www.googleapis.com/auth/user.birthday.read"); Scope myScope2 = new Scope(Scopes.PLUS_ME); Scope myScope3 = new Scope(Scopes.PROFILE); //get name and id GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(myScope, myScope2) .requestEmail() .requestProfile() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); account = GoogleSignIn.getLastSignedInAccount(this); if (account == null) { reqPerm(); } else { SharedPreferences sharedPref = getSharedPreferences(account.getId(), MODE_PRIVATE); if (sharedPref.contains("gender")) { printBasic(); printAdvanced(); } else { new GetProfileDetails(account, weakAct, TAG).execute(); } } } private void reqPerm() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); } private void printBasic() { account = GoogleSignIn.getLastSignedInAccount(this); if (account != null) { Log.d(TAG, "latest sign in: " + "/n/tPhoto url:" + account.getPhotoUrl() + "/n/tEmail:" + account.getEmail() + "/n/tDisplay name:" + account.getDisplayName() + "/n/tFamily(last) name:" + account.getFamilyName() + "/n/tGiven(first) name:" + account.getGivenName() + "/n/tId:" + account.getId() + "/n/tIdToken:" + account.getIdToken() ); } else { Log.w(TAG, "basic info is null"); } } private void saveAdvanced(Person meProfile) { account = GoogleSignIn.getLastSignedInAccount(this); if (account != null) { SharedPreferences sharedPref = getSharedPreferences(account.getId(), MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); if (n.size() > 0) { try { Log.d("hole", "g name: " + n); editor.putString("givenName", n.get(0).getGivenName()); editor.putString("familyName", n.get(0).getFamilyName()); editor.putString("id", n.get(0).getMetadata().getSource().getId()); } catch (Exception e) { e.printStackTrace(); //this one should act as fallback priority since it got problem to get name without wait for ~1 minute // ... when create new account will get empty name editor.putString("id", account.getId()); editor.putString("givenName", account.getGivenName()); editor.putString("familyName", account.getFamilyName()); } } List<Gender> genders = meProfile.getGenders(); if (genders != null && genders.size() > 0) { String gender = genders.get(0).getValue(); Log.d(TAG, "onPostExecute gender: " + gender); editor.putString("gender", gender); } else { Log.d(TAG, "onPostExecute no gender if set to private "); editor.putString("gender", ""); //save as main key to know pref saved } List<Birthday> birthdays = meProfile.getBirthdays(); if (birthdays != null && birthdays.size() > 0) { for (Birthday b : birthdays) { //birthday still able to get even private, unlike gender Date bdate = b.getDate(); if (bdate != null) { String bday, bmonth, byear; if (bdate.getDay() != null) bday = bdate.getDay().toString(); else bday = ""; if (bdate.getMonth() != null) bmonth = bdate.getMonth().toString(); else bmonth = ""; if (bdate.getYear() != null) byear = bdate.getYear().toString(); else byear = ""; editor.putString("bday", bday); editor.putString("bmonth", bmonth); editor.putString("byear", byear); } } } else { Log.w(TAG, "saveAdvanced no birthday"); } editor.commit(); //next instruction is print from pref, so don''t use apply() } else { Log.w(TAG, "saveAdvanced no acc"); } } private void printAdvanced() { account = GoogleSignIn.getLastSignedInAccount(this); if (account != null) { SharedPreferences sharedPref = getSharedPreferences(account.getId(), MODE_PRIVATE); if (sharedPref.contains("gender")) { //this checking works since null still saved String gender = sharedPref.getString("gender", ""); Log.d(TAG, "gender: " + gender); if (sharedPref.contains("bday")) { //this checking works since null still saved String bday = sharedPref.getString("bday", ""); String bmonth = sharedPref.getString("bmonth", ""); String byear = sharedPref.getString("byear", ""); Log.d(TAG, bday + "/" + bmonth + "/" + byear); } else { Log.w(TAG, "failed ot get birthday from pref"); } String givenName = sharedPref.getString("givenName", ""); String familyName = sharedPref.getString("familyName", ""); String id = sharedPref.getString("id", ""); } else { Log.w(TAG, "failed ot get data from pref -2"); } } else { Log.w(TAG, "failed ot get data from pref -1"); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { if (resultCode == Activity.RESULT_OK) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } else { Log.w(TAG, "failed, user denied OR no network OR jks SHA1 not configure yet at play console android project"); } } } private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. new GetProfileDetails(account, weakAct, TAG).execute(); } catch (ApiException e) { //cancel choose acc will come here with status code 12501 if not check RESULT_OK // , more status code at: //https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInStatusCodes Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); } } static class GetProfileDetails extends AsyncTask<Void, Void, Person> { private PeopleService ps; private int authError = -1; private WeakReference<MainActivity> weakAct; private String TAG; GetProfileDetails(GoogleSignInAccount account, WeakReference<MainActivity> weakAct, String TAG) { this.TAG = TAG; this.weakAct = weakAct; GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2( this.weakAct.get(), Collections.singleton(Scopes.PROFILE)); credential.setSelectedAccount( new Account(account.getEmail(), "com.google")); HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport(); JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); ps = new PeopleService.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName("Google Sign In Quickstart") .build(); } @Override protected Person doInBackground(Void... params) { Person meProfile = null; try { meProfile = ps .people() .get("people/me") .setPersonFields("names,genders,birthdays") .execute(); } catch (UserRecoverableAuthIOException e) { e.printStackTrace(); authError = 0; } catch (GoogleJsonResponseException e) { e.printStackTrace(); authError = 1; } catch (IOException e) { e.printStackTrace(); authError = 2; } return meProfile; } @Override protected void onPostExecute(Person meProfile) { MainActivity mainAct = weakAct.get(); if (mainAct != null) { mainAct.printBasic(); if (authError == 0) { //app has been revoke, re-authenticated required. mainAct.reqPerm(); } else if (authError == 1) { Log.w(TAG, "People API might not enable at" + " https://console.developers.google.com/apis/library/people.googleapis.com/?project=<project name>"); } else if (authError == 2) { Log.w(TAG, "API io error"); } else { if (meProfile != null) { mainAct.saveAdvanced(meProfile); mainAct.printAdvanced(); } } } } } }

Recordatorio:

  1. Agregue <uses-permission android:name="android.permission.INTERNET" /> en AndroidManifest.xml.
  2. Agregue la implementation ''com.google.android.gms:play-services-auth:12.0.1'' , la implementation ''com.google.apis:google-api-services-people:v1-rev255-1.23.0'' , y la implementation ''com.google.api-client:google-api-client-android:1.23.0'' en dependencies {} de build.gradle .
  3. En mi caso, targetSdkVersion compileSdkVersion , targetSdkVersion y appcompat-v7 de 27 a 26 desde que obtuve una advertencia después de las dependencias # 2 agregadas.
  4. Agregue signingConfigs { debug { storeFile file(''<path to jks file>'') keyAlias ''<your key alias>'' keyPassword ''<your key password>'' storePassword ''<your store password>'' } } en build.gradle , que jks archivo generado desde la Build -> Generated Signed APK... -> Create new...
  5. keytool -exportcert -keystore <path to jks file> -list -v para obtener la clave hexadecimal SHA1, luego visita la consola de juegos, completa el nombre del proyecto, el nombre del paquete de la aplicación, la clave hexadecimal SHA1.
  6. Habilite la API de People en https://console.developers.google.com/apis/library/people.googleapis.com/?project= [su ID de proyecto] ", cuya ID de proyecto puede obtener desde la consola de juegos. Tenga en cuenta que no es un proyecto nombre.
  7. No noté tal Scopes.BIRTHDAY en la biblioteca, así que tengo que codificar la URL del punto final de cumpleaños "https://www.googleapis.com/auth/user.birthday.read" , que el enlace puede obtener de scopes O "Show Scopes" en el panel "Try it API" en people.get
  8. El cumpleaños es una lista, y puede incluir 2 elementos de fecha, un elemento falta de año en mi caso. Mi código siempre reemplaza para guardar esos 2 elementos. Puede haber una mejor manera de manejarlo.
  9. El género solo puede regresar si no es privado. Cumpleaños no hay tal restricción.
  10. Dado que el dispositivo Android necesita ~ 1 minuto de retraso para obtener el nuevo nombre de cuenta creado, es posible que deba usar el alcance PROFILE en lugar del simple account.getGivenName() y account.getFamilyName() .

Como se mencionó en Obtención de personas e información de perfil , para obtener información de perfil adicional y los contactos de un usuario, use la API de personas . Debe obtener el consentimiento del usuario para acceder a esta información solicitando scopes adicionales cuando el usuario inicie sesión.

Puede llamar a people.get , pasando un nombre de recurso, para obtener datos privados de contacto y de perfil público de cada persona. Si su solicitud es exitosa, la respuesta contiene una instancia de una Person incluye birthday y gender .

Es posible que desee visitar los enlaces que he proporcionado para obtener más información.


Gradle

implementation "com.google.android.gms:play-services-auth:${google_play_service_version}" implementation ''com.google.apis:google-api-services-people:v1-rev354-1.25.0'' implementation (''com.google.api-client:google-api-client-android:1.23.0'') { exclude group: ''org.apache.httpcomponents'' }

Autenticación

private void setupGoogleLogin() { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestScopes(new Scope(PeopleApi.CONTACT_SCOPE), new Scope(PeopleApi.BIRTHDAY_SCOPE)) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, mOnConnectionFailedListener) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); }

PeopleApi

public class PeopleApi { public static final String CONTACT_SCOPE = "https://www.googleapis.com/auth/contacts.readonly"; public static final String BIRTHDAY_SCOPE = "https://www.googleapis.com/auth/user.birthday.read"; private static PeopleService mInstance; private static PeopleService getService() { if (mInstance == null) mInstance = initializeService(); return mInstance; } private static PeopleService initializeService() { Context context = BHApp.getContext(); GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, Arrays.asList(CONTACT_SCOPE, BIRTHDAY_SCOPE)); credential.setSelectedAccount(GoogleSignIn.getLastSignedInAccount(context).getAccount()); return new PeopleService.Builder(AndroidHttp.newCompatibleTransport(), JacksonFactory.getDefaultInstance(), credential) .setApplicationName(context.getString(R.string.app_name)).build(); } public static Person getProfile() { try { return getService().people().get("people/me") .setPersonFields("genders,birthdays,addresses") .execute(); } catch (Exception e) { Utils.handleException(e); return null; } } public static String getBirthday(Person person) { try { List<Birthday> birthdayList = person.getBirthdays(); if (birthdayList == null) return Utils.EMPTY_STRING; Date date = null; for (Birthday birthday : birthdayList) { date = birthday.getDate(); if (date != null && date.size() >= 3) break; else date = null; } if (date == null) return Utils.EMPTY_STRING; Calendar calendar = Calendar.getInstance(); calendar.set(date.getYear(), date.getMonth() - 1, date.getDay()); return Utils.convertDateToString(calendar); } catch (Exception e) { Utils.handleException(e); return Utils.EMPTY_STRING; } } private static final String CITY_SUFFIX = " city"; public static android.location.Address getLocation(Person person) { try { List<Address> addressList = person.getAddresses(); if (addressList == null) return null; String city = null; for (Address add : addressList) { city = add.getCity(); if (!TextUtils.isEmpty(city)) break; } if (TextUtils.isEmpty(city)) return null; Geocoder geocoder = new Geocoder(BHApp.getContext()); List<android.location.Address> addresses = geocoder.getFromLocationName(city + CITY_SUFFIX, 1); if (addresses == null || addresses.isEmpty()) return null; return addresses.get(0); } catch (Exception e) { Utils.handleException(e); return null; } } public static String getGender(Person person) { List<Gender> genders = person.getGenders(); if (genders == null || genders.isEmpty()) return null; Gender gender = genders.get(0); return String.valueOf(Enum.Gender.getEnumByValue(gender.getValue()).getId()); } }

Espero que ayude :)


Usando la API de People puedes recuperar datos de fecha de nacimiento y género.

Use la dependencia ''com.google.apis: google-api-services-people: v1-rev4-1.22.0'' en gradle para incluir la api de las personas.

public void fetchProfileDetails() { GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, Collections.singleton(Scopes.PROFILE)); credential.setSelectedAccount( new Account(gsr.getSignInAccount().getEmail(), "com.google")); /** Global instance of the HTTP transport. */ HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport(); /** Global instance of the JSON factory. */ JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); People service = new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName("AppName") .build(); try { meProfile = service.people().get("people/me").execute(); List<Gender> genders = meProfile.getGenders(); if (genders != null && genders.size() > 0) { String gender = genders.get(0).getValue(); } List<Birthday> birthdays = meProfile.getBirthdays(); if (birthdays != null && birthdays.size() > 0) { String birthday = birthdays.get(0).getText(); } } catch (IOException e) { e.printStackTrace(); } }


añade esto en tus dependencias build.gradle

implementation ''com.google.android.gms:play-services-auth:11.8.0''

prueba esto

import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.plus.People; import com.google.android.gms.plus.Plus; import com.google.android.gms.plus.model.people.Person; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{ private SignInButton signInButton; private GoogleSignInOptions gso; private GoogleApiClient mGoogleApiClient; private int SIGN_IN = 30; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); signInButton = (SignInButton) findViewById(R.id.sign_in_button); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addApi(Plus.API) .build(); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, SIGN_IN); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //If signin if (requestCode == SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); //Calling a new function to handle signin handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result) { if (result.isSuccess()) { final GoogleSignInAccount acct = result.getSignInAccount(); String name = acct.getDisplayName(); final String mail = acct.getEmail(); // String photourl = acct.getPhotoUrl().toString(); final String givenname="",familyname="",displayname="",birthday=""; Plus.PeopleApi.load(mGoogleApiClient, acct.getId()).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { @Override public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { Person person = loadPeopleResult.getPersonBuffer().get(0); Log.d("GivenName ", person.getName().getGivenName()); Log.d("FamilyName ",person.getName().getFamilyName()); Log.d("DisplayName ",person.getDisplayName()); Log.d("gender ", String.valueOf(person.getGender())); //0 = male 1 = female String gender=""; if(person.getGender() == 0){ gender = "Male"; }else { gender = "Female"; } Log.d("Gender ",gender); if(person.hasBirthday()){ Log.d("Birthday ",person.getBirthday()); } } }); } else { Toast.makeText(this, "Login Failed", Toast.LENGTH_LONG).show(); } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } }