возникли проблемы с сервисами Google Play - при использовании GoogleApiClient он всегда запускает onConnectionFailed

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

  • minSdkVersion со значением 14
  • targetSdkVersion 23
  • compile ' com.гуглить.андроид.gms: play-services-gcm: 8.4.0'
  • compile ' com.гуглить.андроид.gms: play-services-база: 8.4.0'
  • compile ' com.гуглить.андроид.gms: play-services-аналитика: 8.4.0'
  • compile ' com.гуглить.андроид.gms: play-услуги-объявления: 8.4.0'
  • компиляции Ариа.гуглить.андроид.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. Если проблема пожалуйста, свяжитесь с разработчиком для получения помощи.

enter image description here

диалоговое окно ошибка из-за 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 Services 9.0.83
  • только 1 аккаунт Google в своем устройстве

Я даже пытаться пересобрать APK с Сервисы Google Play 9.0.1. Но, такая же проблема все еще происходит.

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

5 ответов


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

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

Re:" Google Play Store остановился " после обновления Z5 Premium Marshmallow
Апрель!--5-->

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

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

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

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

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

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

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

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

" как только я обновился до зефира, я продолжаю получать "К сожалению, Google Play Store остановился..."и послание сохраняет подходит каждые 5 секунд. Я попытался очистить кэш, удалив данные, удаление, отключение приложения, force закрытие, выход из google и обратно. Не действовать. Я продолжаю получать pop up без остановки, и это произошло, как только он обновился до Marshmallow", - отметил пользователь на форум поддержки.

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

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

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

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

я рыскал повсюду и учитывая, что он работает для большинства устройств, а не для нескольких, трудно понять, в чем проблема. Я бы предложил запустить его с обновленными зависимостями, так как телефон 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 для Android в Firebase Cloud Messaging.

С примечания к выпуску май 2016-V. 9.0

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


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

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

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

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

Ok Я также протестировал приложение JStock на:

Moto G3 с Android 6

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

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


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


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

1. Удалить Google Play services

enter image description here

enter image description here

2. Обновите сервисы Google Play еще раз

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

enter image description here

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


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

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