在Play服务8.4中,不推荐使用getCurrentPerson方法,我使用PeopleApi获取用户的名字、姓氏和性别。
有人能告诉我如何使用另一种方法获取用户信息中的签名吗?
发布于 2016-09-13 05:49:27
Google登录API可以为您提供第一个/最后/显示名称、电子邮件和配置文件图片url。如果您需要其他配置文件信息,如性别,请与新的人民API一起使用。
// 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'然后写登录码,
// 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在处理登录结果时:
GoogleSignInResult result =
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
String personName = acct.getDisplayName();
String personGivenName = acct.getGivenName();
String personFamilyName = acct.getFamilyName();
String personEmail = acct.getEmail();
String personId = acct.getId();
Uri personPhoto = acct.getPhotoUrl();
}使用People Api检索详细的人员信息。
/** 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(personEmail, "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();
}看看JavaDoc,看看你还能得到什么其他的配置文件信息。
发布于 2015-12-24 13:33:40
更新:检查伊莎贝拉的答案。这个答案用的是不推荐的东西。
我自己找到了解决方案,所以如果其他人面临同样的问题,我会在这里发布。
虽然我在寻找一个使用GoogleSignInApi获取用户信息的解决方案,但我找不到它,我认为我们需要使用Plus Api来获取类似性别的信息。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}HandleSignInResult
private void handleSignInResult(GoogleSignInResult result)
{
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess())
{
GoogleSignInAccount acct = result.getSignInAccount();
Toast.makeText(getApplicationContext(),""+acct.getDisplayName(),Toast.LENGTH_LONG).show();
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(TAG,"Person loaded");
Log.d(TAG,"GivenName "+person.getName().getGivenName());
Log.d(TAG,"FamilyName "+person.getName().getFamilyName());
Log.d(TAG,("DisplayName "+person.getDisplayName()));
Log.d(TAG,"Gender "+person.getGender());
Log.d(TAG,"Url "+person.getUrl());
Log.d(TAG,"CurrentLocation "+person.getCurrentLocation());
Log.d(TAG,"AboutMe "+person.getAboutMe());
Log.d(TAG,"Birthday "+person.getBirthday());
Log.d(TAG,"Image "+person.getImage());
}
});
//mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName()));
//updateUI(true);
} else {
//updateUI(false);
}
}发布于 2016-02-04 08:24:30
你好,我找到了最新的Google登录的另一种方法,请使用,方法如下:
GoogleApiClient mGoogleApiClient;
private void latestGooglePlus() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestProfile().requestEmail().requestScopes(Plus.SCOPE_PLUS_LOGIN, Plus.SCOPE_PLUS_PROFILE, new Scope("https://www.googleapis.com/auth/plus.profile.emails.read"))
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Plus.API)
.build();
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, YOURREQUESTCODE);
}对于活动结果,使用以下代码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Activity Res", "" + requestCode);
if (requestCode == YOURREQUESTCODE) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
acct.getPhotoUrl();
acct.getId();
Log.e(TAG, acct.getDisplayName());
Log.e(TAG, acct.getEmail());
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(TAG, (person.getName().getGivenName()));
Log.d(TAG, (person.getName().getFamilyName()));
Log.d(TAG, (person.getDisplayName()));
Log.d(TAG, (person.getGender() + ""));
Log.d(TAG, "person.getCover():" + person.getCover().getCoverPhoto().getUrl());
}
});
}
}
}最终您的onClick将是:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.txtGooglePlus:
latestGooglePlus();
break;
default:
break;
}
}https://stackoverflow.com/questions/34412157
复制相似问题