web-dev-qa-db-fra.com

<Votre application> rencontre des problèmes avec les services Google Play - Lors de l'utilisation de GoogleApiClient, cela déclenche toujours onConnectionFailed.

Actuellement, mon application utilise

  • minSdkVersion 14
  • targetSdkVersion 23
  • compiler 'com.google.Android.gms: play-services-gcm: 8.4.0'
  • compiler 'com.google.Android.gms: base de jeux-services: 8.4.0'
  • compiler 'com.google.Android.gms: play-services-analytics: 8.4.0'
  • compiler 'com.google.Android.gms: play-services-ads: 8.4.0'
  • compiler 'com.google.Android.gms: play-services-drive: 8.4.0'

J'utilise le code suivant pour établir une connexion 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";
}

Certains utilisateurs (pas tous les utilisateurs) sont confrontés au problème suivant.

a des problèmes avec les services Google Play. Si le problème persiste, contactez le développeur pour obtenir de l'aide.

 enter image description here

La boîte de dialogue d'erreur est due au code GoogleApiAvailability.getInstance().getErrorDialog dans onConnectionFailed.

N'importe quand

        mGoogleApiClient = new GoogleApiClient.Builder(this.getContext())
                .setAccountName(accountName)
                .addApi(Drive.API)
                .addScope(Drive.SCOPE_FILE)
                .addScope(Drive.SCOPE_APPFOLDER)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();

est exécuté, il frappe toujours

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

Lorsque j’imprime connectionResult avec toString, cela donne

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

Un de mes utilisateurs a les spécifications suivantes.

  • Sony Xperia Z5
  • Android 6
  • Services Google Play 9.0.83
  • 1 seul compte Google dans son appareil

J'essaye même de recompiler l'APK avec Google Play Services 9.0.1. Mais le même problème se pose toujours.

Toute idée sur la façon dont je peux résoudre le problème?

15
Cheok Yan Cheng

Après avoir travaillé en étroite collaboration avec mon utilisateur, je réalise que la solution est

1. Désinstaller les services Google Play

 enter image description here

 enter image description here

2. Mettez à jour les services Google Play à nouveau.

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

 enter image description here

Cela fonctionne bien après cela. Si ce n'est toujours pas le cas, redémarrer votre appareil pourrait peut-être vous aider?!

1
Cheok Yan Cheng

Étant donné que cela fonctionne sur d'autres appareils Anrdoid 6.0 et que vous avez spécifié l'appareil sur lequel vous avez des problèmes. Je suppose que ce n'est pas votre application. Il existe un problème connu avec Sony Xperia z5 lors de la mise à jour vers Android 6.0. 

Sony prétend avoir corrigé le bogue.

Re: "Google Play Store s'est arrêté" après la mise à jour de Z5 Premium Marshmallow
avril

Bonjour à tous, J'ai reçu aujourd'hui des informations indiquant que cela serait résolu dans la prochaine mise à jour logicielle prévue pour bientôt.
Personnel de soutien officiel de Sony Xperia

Veillez donc à informer le client pour vous assurer que toutes les mises à jour de Sony sont à jour, mais cela ne fonctionne toujours pas pour tous les consommateurs. La mauvaise nouvelle C'est qu'il n'y a pas de solution en dehors d'une réinitialisation d'usine. Revenons donc à Android 5 et parfois cela échoue.

Je recommande d’inviter le client à en discuter avec Sony et si une réinitialisation d’usine ne résout pas le problème, il s’agit là d’une question à résoudre pour le consommateur, à savoir si le téléphone doit être remplacé ou non.

Ce fil sur le site Web mobile de Sony "Google Play Store s'est arrêté" après la mise à jour Z5 Premium Marshmallow traite longuement de ces problèmes (122 messages) et de nombreuses suggestions vont au-delà de la réinitialisation d'usine, par exemple, l'utilisation de Sony PC. un compagnon. 

Problèmes liés à Xperia Z5 après la mise à jour Android Marshmallow: voici un correctif de Sony

L'engouement des utilisateurs de Sony Xperia Z5 à l'idée de recevoir Android 6.0 La mise à jour de Marshmallow semble avoir été de courte durée en tant qu'utilisateurs du fichier les combinés se plaignent maintenant de problèmes après la mise à jour de l'appareil vers le dernier OS.

Les utilisateurs du smartphone ont rejoint la société japonaise en ligne page de support pour évacuer leur colère et se plaindre de l’accès à Google Play Store s'était arrêté après la mise à jour vers Android 6.0 Marshmallow.

Plusieurs utilisateurs de Xperia Z5 se sont plaints du fait que leurs smartphones "tombaient en panne" après l'installation du nouveau système d'exploitation. Ils ont également été accueillis par un signe pop-up qui dit que leur "Google Play Store s'est arrêté". Les utilisateurs étaient également impossible d'ouvrir l'application Play Store.

"Dès que j'ai effectué la mise à jour vers Marshmallow, je continue à recevoir le " Malheureusement, Google Play Store s'est arrêté ... "et le message continue À venir toutes les 5 secondes. J'ai essayé de vider le cache, de supprimer des données , désinstaller, désactiver l’application, forcer la fermeture, déconnecter de Google et ne pas revenir. Ne fonctionne pas. Je continue à avoir la pop-up non-stop et il se fait. a noté un utilisateur sur le forum d'entraide.

"Ouais, ayant le même problème ici. J'ai essayé de désinstaller Les mises à jour dans/settings/apps/google Play Store, mais aussi essayé d'installer Le .apk via chrome. Toujours le message d'erreur. Parlé avec Client L’assistance et l’exécution de l’option «réparation» de Sony Bridge étaient le seul conseil qu’ils avaient à offrir. Créer une sauvegarde maintenant avant d’essayer l’exécuter… », a déclaré un autre.

Sony a reconnu le problème et n'a proposé qu'une usine réinitialiser.

Bien que cela résolve le problème des autres utilisateurs de Xperia Z5, certains sont toujours impossible d'accéder au Play Store malgré la réinitialisation.

Si cela se produit sur d'autres appareils, faites-le moi savoir, car à ce stade-ci, je dirais que c'est le problème sans plus de détails différenciateurs.

J'ai parcouru haut et bas et étant donné que cela fonctionne pour la plupart des appareils et pas pour quelques-uns, il est difficile de comprendre quel est le problème. Je suggérerais de l'exécuter avec les dépendances mises à jour, car le téléphone Android 6.0 utilise Google Play Services 9.0.83, je comprends que vous ayez exécuté cela, mais il est préférable de rester au courant.

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

Compte tenu des bogues connus des services Google, des mises à jour Android 6.0 et de nombreux bogues entre Android 5.0 et ses mises à jour 5.0.1 et 5.0.2. Certains autres problèmes qui ont été corrigés dans la version 5.1 rendent difficile la résolution de certains problèmes.

J'ai également rencontré ce problème avec une application et des personnes affirmant qu'un tel appareil ne fonctionnait pas, puis tenter de le dépanner, et parfois, il peut y avoir des problèmes dans les paramètres du téléphone des utilisateurs qui peuvent également causer des problèmes avec une application et certains de ces paramètres varient d’un combiné à l’autre.

Je suggérerais de créer explicitement vos écouteurs dans Builder et d'ajouter davantage de journalisation pour vérifier exactement où il échoue dans la connexion en cas d'échec, car vous pouvez avoir une connexion dans la connexion en cas d'échec et devoir gérer votre connexion dans l'appel de connexion. dos.

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

Je voudrais aussi ajouter vos membres de classe/variables:

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

Au sommet de votre classe, car il est déroutant de les avoir en bas, et il est préférable d'avoir un code lisible.

Cette question Plusieurs GoogleApiClient ne tirant pas connect () peuvent également être utiles.

Quelques problèmes secondaires à compléter pour les autres atterrissant ici:

Il sera également nécessaire de mettre à jour Firebase à un moment donné Migrer une application client GCM pour Android vers Firebase Cloud Messaging .Extrait du Notes de version Mai 2016 - v.9.0 .

Google Cloud Messaging Google Cloud Messaging (GCM) is integrated with Firebase. Existing users of GCM can continue to use GCM without interruption, though we strongly recommend upgrading to the new and simplified Firebase Cloud Messaging (FCM) APIs, so that users can benefit from future releases of new features and enhancements. To learn more, see Migrate a GCM Client App for Android to Firebase Cloud Messaging.

10
Yvette Colomb

Cela pourrait être dû à plusieurs problèmes, avez-vous lu la documentation de ConnectionResult? Il dit ceci:

ConnectionResult qui peut être utilisé pour résoudre l'erreur et décider du type d'erreur survenu. Pour résoudre l'erreur, la résolution doit être démarrée à partir d'une activité avec un requestCode non négatif transmis à startResolutionForResult (Activity, int). Les applications doivent implémenter onActivityResult dans leur activité pour appeler connect () à nouveau si l'utilisateur a résolu le problème (resultCode est RESULT_OK).

Il existe également de nombreuses informations sur le code d'erreur que vous recevez dans cet article: Erreur: ConnectionResult {statusCode = INTERNAL_ERROR, resolution = null}

Le problème peut également être que vous n'avez pas ajouté l'API de lecteur dans votre console. Mais alors vous devriez avoir reçu un message de logcat.

Ok, j'ai aussi testé l'application JStock sur:

Moto G3 avec Android 6 

Et je ne suis pas capable de reproduire le bogue. Mais la barre de connexion en bas ne change pas lorsque vous configurez votre téléphone en mode avion.

Je ne suis pas sûr que cela vous aide, mais faites-le-moi savoir.

4
jobbert

Essayez de mettre à jour minSdkVersion 14 en minSdkVersion 16 ou supérieure. Parce que c'est arrivé avec moi et après une longue recherche, je l'ai changé et résolu m problème afin que cela fonctionne pour vous 

1
parik dhakan

J'ai exactement le même problème et mon application plante également au point exact (OnConnectionFailed) lorsqu'elle affiche la boîte de dialogue d'erreur. Mais si je ne clique pas sur le bouton OK, il ne se bloque pas, mais il ne parvient pas à se connecter au service Google Play .J'ai deux applications avec une configuration en mode graddle et tout le même et un crash, celui-ci fonctionne toujours comme il le faisait être. https://play.google.com/store/apps/details?id=com.softphan.services.smartcallrecorder

Comment devrait-il être ridicule? J'utilise Google Nexus 5, le problème ne devrait donc pas être lié aux produits Sony.

0
Cuong Phan