<Ваше приложение> имеет проблемы с сервисами Google Play. При использовании GoogleApiClient он всегда запускается onConnectionFailed

В настоящее время мое приложение использует

  • minSdkVersion 14
  • targetSdkVersion 23
  • compile 'com.google.android.gms: play-services-gcm: 8.4.0'
  • compile 'com.google.android.gms: play-services-base: 8.4.0'
  • compile 'com.google.android.gms: play-services-analytics: 8.4.0'
  • compile 'com.google.android.gms: play-services-ads: 8.4.0'
  • compile 'com.google.android.gms: play-services-drive: 8.4.0'

Я использую следующий код для выполнения соединения GoogleApiClient.

public class GoogleApiClientFragment extends Fragment implements
        GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    public interface ConnectionCallbacks {
        void onConnected(GoogleApiClient googleApiClient, int action);
        void onCancel(int action);
    }

    public static GoogleApiClientFragment newInstance(String accountName, int action) {
        GoogleApiClientFragment googleApiClientFragment = new GoogleApiClientFragment();
        Bundle bundle = new Bundle();
        bundle.putString(INTENT_EXTRA_ACCOUNT_NAME, accountName);
        bundle.putInt(INTENT_EXTRA_ACTION, action);
        googleApiClientFragment.setArguments(bundle);
        return googleApiClientFragment;
    }

    /**
     * Handles resolution callbacks.
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RequestCode.REQUEST_GOOGLE_API_CLIENT_CONNECT) {
            if (resultCode == Activity.RESULT_OK) {
                mGoogleApiClient.connect();
            } else {
                Activity activity = this.getActivity();
                if (activity instanceof ConnectionCallbacks) {
                    ConnectionCallbacks connectionCallbacks = (ConnectionCallbacks)activity;
                    connectionCallbacks.onCancel(action);
                }
            }
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);

        Bundle bundle = this.getArguments();
        this.accountName = bundle.getString(INTENT_EXTRA_ACCOUNT_NAME);
        this.action = bundle.getInt(INTENT_EXTRA_ACTION);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this.getContext())
                    .setAccountName(accountName)
                    .addApi(Drive.API)
                    .addScope(Drive.SCOPE_FILE)
                    .addScope(Drive.SCOPE_APPFOLDER)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();

            mGoogleApiClient.connect();
        }
    }

    @Override
    public void onConnected(Bundle bundle) {
        Log.i(TAG, "GoogleApiClient connected");

        Activity activity = this.getActivity();
        if (activity instanceof ConnectionCallbacks) {
            ConnectionCallbacks connectionCallbacks = (ConnectionCallbacks)activity;
            connectionCallbacks.onConnected(mGoogleApiClient, action);
        }
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.i(TAG, "GoogleApiClient connection suspended");
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.i(TAG, "GoogleApiClient connection failed: " + connectionResult.toString());

        if (!connectionResult.hasResolution()) {
            Utils.showLongToast("debug two " + connectionResult.toString());

            // show the localized error dialog.
            GoogleApiAvailability.getInstance().getErrorDialog(this.getActivity(), connectionResult.getErrorCode(), 0).show();
            return;
        }
        try {
            connectionResult.startResolutionForResult(this.getActivity(), RequestCode.REQUEST_GOOGLE_API_CLIENT_CONNECT);
        } catch (IntentSender.SendIntentException e) {
            Log.e(TAG, "Exception while starting resolution activity", e);
        }
    }

    private String accountName = null;
    private int action = -1;
    private GoogleApiClient mGoogleApiClient;

    public static final int ACTION_LOAD_FROM_CLOUD = 0;
    public static final int ACTION_SAVE_TO_CLOUD = 1;
    private static final String INTENT_EXTRA_ACCOUNT_NAME = "INTENT_EXTRA_ACCOUNT_NAME";
    private static final String INTENT_EXTRA_ACTION = "INTENT_EXTRA_ACTION";

    private static final String TAG = "GoogleApiClientFragment";
}

Некоторые пользователи (не все пользователи) имеют следующую проблему.

возникает проблема с сервисами Google Play. Если проблема сохраняется, обратитесь за помощью к разработчику.

введите описание изображения здесь

Диалоговое окно ошибки связано с кодом GoogleApiAvailability.getInstance().getErrorDialog в onConnectionFailed.

Если

        mGoogleApiClient = new GoogleApiClient.Builder(this.getContext())
                .setAccountName(accountName)
                .addApi(Drive.API)
                .addScope(Drive.SCOPE_FILE)
                .addScope(Drive.SCOPE_APPFOLDER)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
Выполняется

он всегда попадает

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

Когда я распечатываю connectionResult с помощью toString, он дает

ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null, message=null}

Один из моих пользователей имеет следующую спецификацию.

  • Sony Xperia z5
  • Android 6
  • Службы Google Play 9.0.83
  • Только 1 учетная запись Google на своем устройстве

Я даже пытаюсь перекомпилировать APK с помощью Google Play Services 9.0.1. Но та же проблема все еще возникает.

Любая идея, как я могу решить проблему?

Ответы

Ответ 1

После работы с моим пользователем я понимаю, что решение

1. Удалите сервисы Google Play

введите описание изображения здесь

введите описание изображения здесь

2. Обновите службы Google Play снова

https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en

введите описание изображения здесь

После этого он отлично работает. Если этого не происходит, возможно, перезагрузка устройства может помочь?!

Ответ 2

Учитывая, что он работает с другими устройствами Anrdoid 6.0, и вы указали устройство, на которое у вас есть жалобы. Я подозреваю, это не ваше приложение. Известная проблема с Sony Xperia z5 при обновлении до Android 6.0.

Sony утверждает, что исправила ошибку.

Re: "Магазин Google Play остановился" после обновления Zarm Premium Marshmallow Update
Апреля

Приветствую всех, сегодня я получил информацию о том, что это будет исправлено в следующем обновлении программного обеспечения, которое планируется выпустить в ближайшее время. Официальный представитель службы поддержки Sony Xperia

Поэтому предоставьте клиенту подтверждение того, что все обновления Sony актуальны, но это все еще не работает для всех пользователей. Плохая новость заключается в том, что нет никаких проблем с factory reset, поэтому вернемся к Android 5, и иногда это не удается.

Я рекомендую рекомендовать клиенту обсудить это с Sony, и если factory reset не исправит проблему, это будет проблема потребителя о том, следует ли заменять телефон.

Этот поток на мобильном веб-сайте sony "Google Play Store остановился" после обновления Z5 Premium Marshmallow Update подробно обсуждает эти проблемы (122 сообщения на нем), и есть много предложений, помимо factory reset, например, с помощью компаньона Sony PC.

Проблемы Xperia Z5 после обновления Android Marshmallow: вот исправление от Sony

Восхищение пользователей Sony Xperia Z5 за получение Android 6.0 Обновление Marshmallow, похоже, было недолгим, поскольку пользователи телефоны теперь жалуются на проблемы после обновления устройства до последней ОС.

Пользователи смартфона отправились в японскую компанию онлайн страницу поддержки, чтобы выпустить их гнев и жалуются, что доступ к Google Play Store остановился после обновления до Android 6.0 Marshmallow.

Несколько пользователей Xperia Z5 жаловались, что их смартфоны "сломались", после установки новой ОС. Их также приветствовал всплывающий знак что их "Магазин Google Play прекратил". Пользователи также не удалось открыть приложение Play Store.

"Как только я обновился до Зефира, я продолжаю получать" К сожалению, Google Play Store остановлен... ", и сообщение сохраняется поднимаясь каждые 5 секунд. Я попытался очистить кеш, удалив данные, удаление, отключение приложения, принудительное закрытие, выход из Google и обратно. Не работает. Я постоянно получаю всплывающее сообщение, и он произошло как СКОРО, так как оно обновилось до Зефира", - отметил пользователь на форум поддержки.

"Yup, имея ту же проблему здесь. Пробовал удалить обновления в /settings/apps/google play store, также пытались установить .apk через хром. Все еще получаю сообщение об ошибке. Говорил с поддержка клиентов и запуск опции" ремонта "от Sony Bridge были единственный совет, который они предложили. Создание резервной копии сейчас, прежде чем я попытаюсь запустив его..." сказал другой.

Sony признала проблему и предложила только factory reset.

Хотя это решает проблему для других пользователей Xperia Z5, некоторые из них все еще не удается получить доступ к Play Store, несмотря на выполнение reset.

Если это происходит на других устройствах, дайте мне знать, так как на данный момент я бы предположил, что это проблема без каких-либо различий деталей.

Я пробирался высоко и низко и учитывая, что он работает для большинства устройств, а не для нескольких, трудно понять, в чем проблема. Я бы предложил запустить его с обновленными зависимостями, так как на телефоне android 6.0 используется Google Play Services 9.0.83, я понимаю, что вы это запустили, но лучше быть в курсе этого.

dependencies {
    compile 'com.google.android.gms:play-services:9.0.2'
}

Учитывая известные ошибки с сервисами Google, с обновлениями для Android 6.0 и было много ошибок между обновлениями для Android 5.0 и 5.0.1 и 5.0.2. Некоторые из них были исправлены в 5.1, это затрудняет устранение некоторых проблем.

Я также столкнулся с этой проблемой с приложением и людьми, говорящими о том, что такое и такое устройство не работает, а затем пытаться устранить его, иногда могут возникать проблемы в настройках телефона пользователей, которые также могут вызывать проблемы с приложение, и некоторые из этих настроек различаются между телефонами.

Я бы предложил создать ваши слушатели явно внутри вас Builder и добавить больше журналов, чтобы проверить, где именно он выходит из строя в отключенном соединении, поскольку вы можете иметь соединение в отключенном соединении и вам нужно управлять своим соединением в пределах обратный вызов соединения.

mGoogleApiClient = new GoogleApiClient.Builder(this.getContext())
                .setAccountName(accountName)
                .addApi(Drive.API)
                .addScope(Drive.SCOPE_FILE)
                .addScope(Drive.SCOPE_APPFOLDER)
                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
            @Override
            public void onConnected(Bundle bundle) {

                if(mGoogleApiClient != null) {
                    Log.i(TAG, "GoogleApiClient connected");

                    Activity activity = this.getActivity();
                    if (activity instanceof ConnectionCallbacks) {
                        ConnectionCallbacks connectionCallbacks = (ConnectionCallbacks)activity;
                        connectionCallbacks.onConnected(mGoogleApiClient, action);
                    }
                }
            }

            @Override
            public void onConnectionSuspended(int i) {
                mGoogleApiClient.connect();
            }
        })
        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed(ConnectionResult connectionResult) {
                Log.i(TAG, "GoogleApiClient connection failed: " + connectionResult.toString());

                if (!connectionResult.hasResolution()) {
                    Utils.showLongToast("debug two " + connectionResult.toString());

                    // show the localized error dialog.
                    GoogleApiAvailability.getInstance().getErrorDialog(this.getActivity(), connectionResult.getErrorCode(), 0).show();
                    return;
                }
                try {
                    connectionResult.startResolutionForResult(this.getActivity(), RequestCode.REQUEST_GOOGLE_API_CLIENT_CONNECT);
                } catch (IntentSender.SendIntentException e) {
                    Log.e(TAG, "Exception while starting resolution activity", e);
                }
            })
        .build();

    mGoogleApiClient.connect();
}

Я бы также добавил ваши члены/переменные класса:

private String accountName = null;
private int action = -1;
private GoogleApiClient mGoogleApiClient;
// etc

В начало вашего класса, так как это путает их в нижней части, и лучше иметь читаемый код.

Этот вопрос Также может помочь несколько GoogleApiClient, не запускающих connect().

Некоторые побочные проблемы для полноты для других, приземляющихся здесь:

Также будет необходимо обновить до Firebase в какой-то момент Перенести приложение GCM Client для Android в облачные сообщения Firebase.

Из Замечания к выпуску May 2016 - v.9.0

Виртуальные сообщения Google Google Cloud Messaging (GCM) интегрирован с Firebase. Существующие пользователи GCM могут продолжать использовать GCM без перерывов, хотя мы настоятельно рекомендуем перейти на новые и упрощенные API Firebase Cloud Messaging (FCM), чтобы пользователи могли извлечь выгоду из будущих выпусков новых функций и улучшений. Дополнительные сведения см. В разделе "Перенос приложения GCM Client для Android в облачные сообщения Firebase".

Ответ 3

Это может быть вызвано несколькими проблемами, прочитайте ли вы документацию ConnectionResult? В нем говорится следующее:

A ConnectionResult, который может использоваться для устранения ошибки и определения ошибки. Чтобы устранить ошибку, разрешение должно быть запущено из действия с неотрицательным кодом запроса, переданным в startResolutionForResult (Activity, int). Приложения должны реализовать onActivityResult в своей деятельности, чтобы снова вызвать connect(), если пользователь решил проблему (resultCode RESULT_OK).

Существует также много информации о коде ошибки, который вы получаете в этом сообщении: Ошибка: ConnectionResult {statusCode = INTERNAL_ERROR, resolution = null}

Проблема также может заключаться в том, что вы не добавляете API-интерфейс Drive в свою консоль. Но тогда вы должны были получить сообщение logcat.

Хорошо, я также тестировал приложение JStock:

Moto G3 с Android 6

И я не могу воспроизвести ошибку. Но панель подключения внизу не меняется, когда вы устанавливаете телефон в режим полета.

Я не уверен, что это поможет вам, но дайте мне знать.

Ответ 4

Попробуйте обновить minSdkVersion 14 до minSdkVersion 16 или выше. потому что это произошло со мной, и после долгого поиска я изменил его и решил проблему m, так что, возможно, это сработает для вас.

Ответ 5

У меня точно такая же проблема, и мое приложение также падает в точную точку (OnConnectionFailed), когда отображается диалоговое окно с ошибкой. Но если я не нажму на кнопку ОК, это не сбой, только он не сможет подключиться к Google Play. У меня есть два приложения с настройкой в ​​graddle и все почти одно и то же, и один сбой, этот все еще работает, как раньше. https://play.google.com/store/apps/details?id=com.softphan.services.smartcallrecorder

Как это смешно? Я запускаю Google Nexus 5, поэтому проблема не должна быть связана с продуктами Sony.