Google Sign-In
をアプリケーションに統合しました。ユーザーのEmail
とDisplayName
を取得できます。次に、ユーザーのBirthdate
とGender
を取得します。
必要なすべてのrequests
&Scopes
をGoogleApiClient
に追加しました。これらはすべてAPIによって許可されています。ここにコードがあります。
// [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]
これは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
}
}
}
許可されたscopes
のログはこちら
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
これは私のGoogle Mobile Serviceの依存関係です
compile 'com.google.Android.gms:play-services-auth:10.2.0'
compile 'com.google.Android.gms:play-services-plus:10.2.0'
今、user's profile information
へのアクセス方法を知りません。
ユーザーとプロファイル情報の取得 で説明したように、追加のプロファイル情報とユーザーの連絡先を取得するには、 People API を使用します。ユーザーがサインインするときに追加の scopes を要求することにより、この情報にアクセスするためにユーザーから同意を得る必要があります。
呼び出すことができます people.get
、リソース名を渡して、各個人の個人連絡先と公開プロフィールデータを取得します。リクエストが成功した場合、レスポンスには 誕生日 と 性別 を含む Person のインスタンスが含まれます。
詳細については、私が提供したリンクをご覧ください。
これが完全な動作例です。将来の読者の助けになることを願っています。アプリが行うことは、最初にサインイン(サインインAPIに名前とメールが含まれます)、次に誕生日と性別(People API)認証を要求し、次回起動時に再利用するためにSharedPreferences
に保存します。最後に、基本情報と高度な(性別と誕生日)情報を印刷します。
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();
}
}
}
}
}
}
通知:
<uses-permission Android:name="Android.permission.INTERNET" />
を追加します。implementation 'com.google.Android.gms:play-services-auth:12.0.1'
のimplementation 'com.google.apis:google-api-services-people:v1-rev255-1.23.0'
にimplementation 'com.google.api-client:google-api-client-Android:1.23.0'
、dependencies {}
、およびbuild.gradle
を追加します。compileSdkVersion
、targetSdkVersion
、およびappcompat-v7
を27から26にダウングレードします。signingConfigs { debug { storeFile file('<path to jks file>') keyAlias '<your key alias>' keyPassword '<your key password>' storePassword '<your store password>' } }
をbuild.gradle
に追加します。jksファイルはBuild
から生成されます-> Generated Signed APK...
-> Create new...
keytool -exportcert -keystore <path to jks file> -list -v
を使用してSHA1 16進キーを取得し、プレイコンソールにアクセスして、プロジェクト名、アプリパッケージ名、SHA1 16進キーを入力します。Scopes.BIRTHDAY
がないことに気づいたため、誕生日のエンドポイントURL"https://www.googleapis.com/auth/user.birthday.read"
をハードコーディングする必要があります。このリンクは https://developers.google.com/people/v1/how-tos/authorizing#から取得できますprofile-scopes OR「Try it API」パネルの「スコープを表示」 https://developers.google.com/people/api/rest/v1/ people/getaccount.getGivenName()
およびaccount.getFamilyName()
の代わりにPROFILEスコープを使用する必要がある。グラドル
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'
}
認証
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());
}
}
私はそれが役立つことを願っています:)
以下はあなたに役立つ私の答えです。
Plus.PeopleAPIは、Googleの宣言ノートとしてGoogle Play開発者サービス9.4で非推奨になりました。代わりにGoogle People APIを使用した以下のソリューションを参照してください。
Play Services 8.3の新しいGoogleサインインで個人情報を取得します(Isabella Chenの回答)。
明示的なリクエストにもかかわらず、Google Plusアカウントから個人の誕生日を取得できません
更新終了
まず、GoogleアカウントのGoogle+プロフィールを作成したことを確認してください。その後、次のコードを参照できます。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestEmail()
.build();
そして
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Plus.API)
.build();
それから
@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());
}
}
Build.gradleファイル内
// Googleサインインの依存関係
compile 'com.google.Android.gms:play-services-auth:8.3.0'
compile 'com.google.Android.gms:play-services-plus:8.3.0'
Belo GitHubサンプルプロジェクトをご覧ください。これがあなたの問題を助け、解決することを願っています。
https://github.com/ngocchung/GoogleSignInDemo
最新の統合が必要な場合は、以下のリンクに従ってください。リンクには、ニースのドキュメントとコードの簡単な説明があり、すべてがパラメーターです。
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();
}
//Global instance of the HTTP transport.
private val HTTP_TRANSPORT: HttpTransport = AndroidHttp.newCompatibleTransport()
//Global instance of the JSON factory.
private val JSON_FACTORY: JsonFactory = JacksonFactory.getDefaultInstance()
Thread {
var meProfile: Person? = null
try {
val googleAccountCredential: GoogleAccountCredential = GoogleAccountCredential.usingOAuth2(
context, Collections.singleton(Scopes.PROFILE)
)
googleAccountCredential.selectedAccount = Account(googleSignInAccount.email, "com.google")
val service: People = People.Builder(HTTP_TRANSPORT, JSON_FACTORY, googleAccountCredential)
.setApplicationName("Google Sign In Quickstart")
.build()
meProfile = service
.people()
.get("people/me")
.set("personFields", "genders")
.execute()
} catch (e: UserRecoverableAuthIOException) {
e.printStackTrace()
} catch (e: GoogleJsonResponseException) {
e.printStackTrace()
} catch (e: IOException ) {
e.printStackTrace()
}
if (meProfile != null && !meProfile.genders.isNullOrEmpty()) {
Log.d(TAG, "Gender: ${meProfile.genders[0]["value"]}")
} else {
Log.d(TAG, "Gender only able to return if it's not private.")
}
}.start()
重要:
googleSignInAccount
は、性別を取得するアカウントです。GL
ソース:
これをbuild.gradle
依存関係に追加します
implementation 'com.google.Android.gms:play-services-auth:11.8.0'
これを試して
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) {
}
}
People APIを使用すると、生年月日と性別の詳細を取得できます。
Gradleで依存関係「com.google.apis:google-api-services-people:v1-rev4-1.22.0」を使用して、ユーザーのAPIを含めます。
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();
}
}