当我尝试使用Plus'Heople Api来访问用户的基本个人资料信息时,我收到很多关于我的应用程序崩溃的报告.
这是我的GoogleApiClient设置
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestScopes(new Scope(Scopes.PROFILE)) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestIdToken() .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登录后使用已登录用户返回时调用.那么为什么不能连接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"); } }