web-dev-qa-db-ja.com

<Your App>でGoogle Playサービスに問題が発生している-GoogleApiClientを使用すると、常にonConnectionFailedがトリガーされます

現在、私のアプリは

  • minSdkVersion 14
  • targetSdkVersion 23
  • 'com.google.Android.gms:play-services-gcm:8.4.0'をコンパイルします
  • 'com.google.Android.gms:play-services-base:8.4.0'をコンパイルします
  • 'com.google.Android.gms:play-services-analytics:8.4.0'をコンパイルします
  • 'com.google.Android.gms:play-services-ads:8.4.0'をコンパイルします
  • 「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サービスで問題が発生しています。問題が解決しない場合は、開発者に連絡してください。

enter image description here

エラーダイアログボックスは、onConnectionFailedGoogleApiAvailability.getInstance().getErrorDialogコードによるものです。

いつでも

_        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) {
_

toStringを使用してconnectionResultを出力すると、

_ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null, message=null}
_

ユーザーの1人が次の仕様を持っています。

  • Sony Xperia z5
  • Android 6
  • Google Play Services 9.0.83
  • 彼のデバイスには1つのGoogleアカウントのみ

さらに、Google Play Services 9.0.1でAPKを再コンパイルしようとしています。しかし、同じ問題が引き続き発生します。

どのように問題を解決することができますか?

16
Cheok Yan Cheng

ユーザーと密接に協力した結果、ソリューションが

1. Google Play開発者サービスをアンインストールする

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

その後は正常に動作します。それでも解決しない場合は、デバイスを再起動すると解決するかもしれません。

3
Cheok Yan Cheng

他のAnrdoid 6.0デバイスで動作しており、苦情の対象となっているデバイスを指定している場合。あなたのアプリではないようです。 Sony Xperia z5には、Android 6.0。への更新に関する既知の問題があります。

ソニーはバグを修正したと主張しています。

Re:Z5プレミアムマシュマロアップデート後の「Google Playストアが停止しました」
4月

こんにちは皆さん、本日、これは間もなくリリースされる予定の次のソフトウェアアップデートで修正されるという情報を得ました。
Sony Xperiaの公式サポートスタッフ

したがって、クライアントにすべてのSony更新が最新であることを確認するようにアドバイスしてください。ただし、これはすべての消費者に対してまだ機能していません。 悪いニュースは、工場出荷時設定へのリセット以外に修正がないため、Android 5に戻り、これが失敗する場合があります。

Sonyにこれについて話し合うようにお客様に指示することをお勧めします。工場出荷時設定にリセットしても問題が解決しない場合は、電話を交換するかどうかの消費者の問題になります。

ソニーのモバイルWebサイトのこのスレッド Z5プレミアムマシュマロアップデート後の「Google Playストアは停止しました」 これらの問題について詳細に説明し(122メッセージ)、工場出荷時のリセット以外にも多くの提案があります。 Sony PCコンパニオンを使用します。

Xperia Z5の問題Android Marshmallowアップデート:Sonyからの修正です

Sony Xperia Z5ユーザーがAndroid 6.0 Marshmallowアップデートを受け取ったときの興奮は、携帯電話のユーザーがデバイスを最新のOSにアップデートした後に問題を訴えているため、短命だったようです。

スマートフォンのユーザーは、日本の会社のオンラインサポートページにアクセスして怒りを発散し、Android 6.0 Marshmallowに更新した後、Google Playストアへのアクセスが停止したことを訴えました。

Xperia Z5ユーザーの何人かは、新しいOSをインストールした後、スマートフォンが「壊れた」と苦情を言いました。また、「Google Playストアが停止しました」というポップアップサインが出されました。ユーザーはPlayストアアプリを開くこともできませんでした。

「マシュマロに更新するとすぐに、「残念ながらGoogle Playストアが停止しました...」と表示され続け、メッセージが5秒ごとに表示され続けます。キャッシュのクリア、データの削除、アンインストール、アプリの無効化、強制閉じて、Googleからサインアウトして、再びオンになります。機能しません。ポップアップをノンストップで表示し続け、Marshmallowに更新されたときにSOONとして発生しました」とサポートフォーラムのユーザーは述べています。

「はい、ここで同じ問題が発生しました。/settings/apps/googlePlay Storeのアップデートをアンインストールしてみました。また、chromeを使用して.apkをインストールしようとしました。エラーメッセージが表示されます。カスタマーサポートと話し、「修復」オプションを実行しますSony Bridgeが提供する唯一のアドバイスでした。実行する前にバックアップを作成しています...」.

ソニーはこの問題を認識しており、工場出荷時のリセットのみを提供しています。

これにより他のXperia Z5ユーザーの問題は解決しますが、一部のユーザーはリセットを実行してもPlayストアにアクセスできません。

これが他のデバイスで発生している場合は、この時点で、詳細を区別することなくこれが問題であることをお勧めします。

私は高低を精査し、ほとんどのデバイスでは機能しているが、一部のデバイスでは機能していないことを考えると、問題が何であるかを理解するのは難しい。 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

クラスの一番上に、それらを一番下に置くと混乱するので、読みやすいコードを持っている方が良いです。

この質問 connect()を起動しない複数のGoogleApiClient も役立つ場合があります。

ここに着陸する他の人の完全性のためのいくつかの副次的な問題:

また、ある時点でFirebaseに更新する必要があります GCMクライアントアプリをAndroid to Firebase Cloud Messaging に移行します。

2016年5月リリースノート-v.9. から

Google Cloud Messaging Google Cloud Messaging(GCM)はFirebaseと統合されています。 GCMの既存のユーザーは、中断することなくGCMを引き続き使用できますが、ユーザーが新しい機能と拡張機能の将来のリリースから利益を得ることができるように、新しく簡素化されたFirebase Cloud Messaging(FCM)APIにアップグレードすることを強くお勧めします。詳細については、「AndroidのFirebase Cloud MessagingへのGCMクライアントアプリの移行」を参照してください。

11
Yvette Colomb

複数の問題が原因である可能性があります。ConnectionResultのドキュメントを読みましたか?これはこう言います:

エラーを解決し、発生したエラーの種類を決定するために使用できるConnectionResult。エラーを解決するには、startResolutionForResult(Activity、int)に渡された負でないrequestCodeを持つアクティビティから解決を開始する必要があります。ユーザーが問題を解決した場合(resultCodeはRESULT_OK)、アプリケーションはアクティビティにonActivityResultを実装してconnect()を再度呼び出す必要があります。

この投稿で受け取るエラーコードに関する多くの情報もあります。 Error:ConnectionResult {statusCode = INTERNAL_ERROR、resolution = null}

問題は、コンソールにDrive APIを追加していないことも考えられます。しかし、その後、logcatメッセージが表示されるはずです。

OK:JStockアプリのテストも行っています:

Moto G3 with Android 6

そして、私はバグを再現することができません。ただし、携帯電話をフライトモードに設定しても、下部の接続バーは変わりません。

これがあなたの助けになるかどうかはわかりませんが、お知らせください。

4
jobbert

MinSdkVersion 14をminSdkVersion 16以降に更新してください。それは私と一緒に起こったので、長い間検索した後、私はそれを変更してm問題を解決したので、あなたのために働くかもしれません。

1
parik dhakan

私はまったく同じ問題を抱えており、アプリがエラーダイアログを表示する正確なポイント(OnConnectionFailed)でクラッシュします。しかし、[OK]ボタンをクリックしないとクラッシュしません。GooglePlay Serviceに接続できません。 graddleにセットアップされた2つのアプリがあり、すべてがほぼ同じで、1つのクラッシュがありますが、このアプリは以前と同じように実行されます。 https://play.google.com/store/apps/details?id=com.softphan.services.smartcallrecorder

それはどれほどばかげているべきですか? Google Nexus 5を実行しているため、問題はSony製品に限定されません。

0
Cuong Phan