当我尝试使用 Plus 的 People Api 访问用户的基本个人资料信息时,我收到了很多关于我的应用程序崩溃的报告。
这是我的 GoogleApiClient 设置
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(Scopes.PROFILE))
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestIdToken(<id_token>)
.requestProfile()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Plus.API)
.addConnectionCallbacks(this)
.build();
在此行获取 IllegalStateException:
Person person = Plus.PeopleApi.getCurrentPerson(mGoogleApiClientPlus)
java.lang.IllegalStateException:GoogleApiClient 有一个可选的 Plus.API 并且没有连接到 Plus。使用 GoogleApiClient.hasConnectedApi(Plus.API) 保护此调用。
只有在 google 登录返回登录用户后才会调用此代码。那为什么plus api连接不上呢?
protected synchronized void buildGoogleApiClient() {
// Configure sign-in to request the user's ID, email address, and basic profile.
// ID and basic profile are included in DEFAULT_SIGN_IN.
gGoogleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.PROFILE))
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestProfile()
.requestEmail()
.build();
// Build a GoogleApiClient with access to the Google Sign-In API
// and the options specified by gGoogleSignInOptions.
gGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, mGoogleSignInOptions)
.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) {
if (resultCode == Activity.RESULT_OK) {
// Google+
if (gGoogleApiClient.hasConnectedApi(Plus.API))
Person person = Plus.PeopleApi.getCurrentPerson(gGoogleApiClient);
else
Log.e("TAG", "Google+ not connected");
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
} else
Log.e("TAG", "Result Cancelled");
}
}
我是一名优秀的程序员,十分优秀!