GoogleApiClient имеет дополнительный файл Plus.API и не подключен к Plus с новым знаком Google, представленным в Play Services 8.3

Я получаю множество сообщений об аварии моего приложения при попытке использовать 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 sign возвращается с подписанным пользователем. Так почему же не связан плюс апи?

 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"); } } 

Вы можете попробовать использовать следующее (конечно, убедитесь, что у вашей учетной записи 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(); 

Пожалуйста, посмотрите мой примерный проект в GitHub . Надеюсь, поможет!