I'm trying to get a user's profile using the new Google Sign In API introduced in play services 8.3. Other than Display Name, Email and Id, I also need user's gender.
Plus.PeopleApi.getCurrentPerson()
is deprecated as per play services 8.3 and also returns null for me even though
mGoogleApiClient.hasConnectedApi(Plus.API)
returns true.
GoogleSignInAccount.getGrantedScopes
returns
https://www.googleapis.com/auth/plus.me
https://www.googleapis.com/auth/plus.login
profile
email
openid
Google Developer Console doesn't show any hits on the Google+ API. I have placed the correct google-services.json file in app/ folder of application. I even generated the SHA1 fingerprint programatically to verify if I was using the correct keystore.
How can I get the person google+ profile data (gender, family name, given name etc.) using the new sign in API?
Plus.API has been deprecated. See deprecation notes below: https://developers.google.com/+/mobile/android/api-deprecation
If you need profile information other than first / last / display name, email and profile picture url (which is already provided by the Sign-in API), please use the new People API.
On Android, you can do this:
// 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'
Then write sign-in code.
// 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 to retrieve detailed person info.
/** 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();
}