我正在使用一个应用程序,并且该应用具有一个功能,它需要Google帐户的配置文件ID。我可以通过使用代码使用Google People API获取数据:
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
// The serverClientId is an OAuth 2.0 web client ID
.requestServerAuthCode(getString(R.string.googleWebClientId))
.requestEmail()
.requestScopes(new Scope(Scopes.PLUS_LOGIN),
new Scope(PeopleScopes.CONTACTS_READONLY),
new Scope(PeopleScopes.USER_EMAILS_READ),
new Scope(PeopleScopes.USERINFO_EMAIL),
new Scope(PeopleScopes.USER_PHONENUMBERS_READ))
.build();
// To connect with Google Play Services and Sign In
mGoogleApiClient = new GoogleApiClient.Builder(this).
enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(AddContactUserToLeaderboardActivity.this, "Your account doesnot exists", Toast.LENGTH_LONG).show();
}
}).addApi(Auth.GOOGLE_SIGN_IN_API, signInOptions).
build();
People peopleService = setUp(AddContactUserToLeaderboardActivity.this, params[0]);
ListConnectionsResponse response = peopleService.people().connections()
.list("people/me")
// This line's really important! Here's why:
// http://stackoverflow.com/questions/35604406/retrieving-information-about-a-contact-with-google-people-api-java
.setRequestMaskIncludeField("person.names,person.emailAddresses,person.phoneNumbers")
.execute();
List<Person> connections = response.getConnections();
Log.e(TAG, "response: " + ((GenericJson) response).toString());
但是响应没有配置文件ID,它只有这样的联系ID:
{"connections":[{"etag":"%EgQBAgkL","names":[{"displayName":"A","givenName":"B","metadata":{"primary":true,"source":{"id":"5744b9050dfsfa281b","type":"CONTACT"}},...
我是否缺少任何字段在此行中拥有Google配置文件ID?setRequestMaskIncludeField("person.names,person.emailAddresses,person.phoneNumbers")
还是从People API Google获取个人资料ID的任何想法?请帮我。
用于获取profile_id您应该使用GoogleSignInAccount类,类似于GooglesignInoptions。
public void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
this.startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//this.onActivityResult(requestCode, resultCode, 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);
}
else {
Log.i("TAG", "request" + requestCode + " ResultCode" + resultCode + " FilterItem_Data " + data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
}
获得结果后:
private void handleSignInResult(GoogleSignInResult result) {
//Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
String personName = acct.getDisplayName();
String personEmail = acct.getEmail();
String personId = acct.getId();
一个人ID是您的个人资料_ID希望这对您有帮助。
如果您在请求蒙版中请求"person.metadata"
。然后它将返回person.metadata.sources
。您可以浏览每个源,如果源具有类型配置文件,则源ID将是配置文件ID。有关更多信息,请参见文档。
注意:每个触点可能有多个配置文件。
我找到了我的解决方案。它只是在ListConnectionsResponse分配中设置属性的" setPagesize"。完全,作业喜欢:
ListConnectionsResponse response = peopleService.people().connections()
.list("people/me")
.setPageSize(1200)
.setRequestMaskIncludeField("person.names,person.emailAddresses,person.phoneNumbers")
.execute();