GCM SERVICE_NOT_AVAILABLE sur Android 2.2
J'obtiens l'erreur "SERVICE_NOT_AVAILABLE" sur mon GoogleCloudMessaging.enregistrer() appel sur un Android 2.2 appareil.
Je suis en train d'écrire une application qui utilise GoogleCloudMessaging à l'aide de la " Google Play Services. J'ai mis en œuvre en utilisant les directives fournies sur l'Android site et ma source contient beaucoup de contrôle d'erreur et de manipulation de code tel que de s'assurer que les Google Play Services est installé ou mis à jour. Le GCM code d'enregistrement met également en œuvre un intervalle exponentielle comme google, comme l'a suggéré à mettre en œuvre pour gérer les SERVICE_NOT_AVAILABLE erreur.
J'ai testé mon application sur un large éventail de dispositifs, y compris ICS, JB, Peigne de Miel et même 2.3.x appareils. Le GCM fonctionne l'enregistrement et je suis en mesure d'envoyer des messages via GCM. Cependant sur un 2.2 de l'appareil, je suis en permanence faire un SERVICE_NOT_AVAILABLE erreur sur le GoogleCloudMessaging.register() appel même avec l'intervalle exponentielle en place.
L'appareil que GCM est un échec sur le Samsung SGH-I896 pour être exact, et le téléphone a 2 comptes google. J'ai lu que cette erreur peut être causée par un problème de configuration avec le temps, mais le temps est défini sur automatique. Le téléphone n'est pas moded et est en cours d'exécution samsung ROM stock.
J'ai aussi essayé de redémarrer l'appareil ainsi que la réinstallation de Google Play Services, mais sans succès. Toute aide sur ce problème sera grandement apprécié.
EDIT: j'ai essayé de mettre en œuvre GCM à l'aide de l'ancien gcm.jar et GCMRegistrar et il a fini par travailler sur l'appareil. Cependant, je peine à envisager ce une bonne solution pour le problème que Google a cessé de soutenir cette méthode autant que je sache.
EDIT2: Voir la accepté de répondre.
source d'informationauteur idunnololz
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. GCM fonctionne très bien sur ma Tablette fonctionnant sous Android 4.04, mais toujours reçu un SERVICE_NOT_AVAILABLE sur mon smartphone fonctionnant sous Android 2.3.
J'ai trouvé la solution de contournement suivante utilise pas (pour autant que je sache) tout obsolète classes. Ajoutez l'action "com.google.android.c2dm.l'intention.INSCRIPTION" pour la GCMBroadcastReceiver dans votre manifeste. Cela permettra de recevoir la registration_id à votre GCMBroadcastReceiver.
Après que votre GCMBroadcastReceiver est en mesure de recevoir le registration_id:
Bien que je suis toujours un SERVICE_NOT_AVAILABLE d'erreur, je peux gérer le registration_id dans mon GCMBroadcastReceiver et je suis en mesure d'envoyer des messages à mon smartphone. Assez bizarre, mais ça fonctionne pour moi.
Cette erreur peut également se produire pour moi, mais il l'a fait parce que j'étais à essayer de s'inscrire dans la GCM à travers un pare-feu de mon entreprise. Et dans la documentation que j'ai trouvé:
Une fois que j'ai ouvert les ports ou essayé à partir d'un autre réseau, il a travaillé.
SERVICE_NOT_AVAILABLE peut être provoquée par un vieux ou manquant GooglePlayServices.
Utilisation GooglePlayServicesUtil pour vérifier la version et si mal rediriger vers le marché de sorte que l'utilisateur peut installer manuellement - ce qui va résoudre le SERVICE_NOT_AVAILABLE et également obtenir toutes les améliorations
et des corrections de bugs ( et de nouveaux bugs :-).
Si vous ne pouvez pas le faire - il n'y a pas de point à l'aide de registre(), la méthode prévoit la correspondance de service de jeu pour récupérer le résultat. Il génère de la même émission, pour des raisons de compatibilité descendante. En utilisant le REGISTRE de l'intention de directement ou le obsolète bibliothèque continuera à travailler - je voudrais suggérer à l'aide de l'intention, GCMRegistrar est liée à l'ancienne mise en œuvre dans GoogleServicesFramework (il a un appel à l'intention.setPackage(GSF_PACKAGE)), donc il ne peut pas bénéficier de toutes les corrections.
D'avoir la dernière version de GCM - en utilisant GooglePlayServicesUtil de traiter avec des appareils qui n'ont pas l'installation automatique - peut aider non seulement à l'enregistrement.
Après avoir lu le post de marnanishj'ai essayé le code ci-dessous, et je l'ai obtenu mon Activité à recevoir une inscription. Il suffit d'ajouter ce:
dans votre AndroidManifest.xml
Pour le moment, jusqu'à ce que Google corriger ce bug ou quelqu'un fournit une meilleure solution je suis l'aide d'une solution hybride où elle utilise Google Lecteur de Services pour les premières fois (avec l'intervalle exponentielle), mais passer à GCMRegistrar par la suite.
Donc, il y a une autre chose à surveiller qui a déclenché moi.
Je l'ai eu à travailler dans l'émulateur + avec application de test, mais ensuite j'ai eu des problèmes de déploiement sur périphériques réels.
A été toujours les SERVICE_NOT_AVAILABLE erreur, et elle a opté pour une approche similaire à la réponse ci-dessus:
Ce genre de travaillé.
Mais il prenait étrangement long laps de temps pour recevoir cette information, et dans l'attente de la boucle j'ai eu, il ne serait jamais le récupérer APRÈS que je l'avais donné, et de laisser les choses se passent.
Cela m'a fait penser qu'il pourrait y avoir une autre cause de la SERVICE_NOT_AVAILABLE msg.
C'est le code que j'ai eu à faire la corvée d'/inscription GCM:
La principale chose à considérer ici est la dernière ligne.
Un "sage/tricherie" de façon à bloquer sur asynchrones hors-thread résultats.
Il s'avère, qu'est ce qui EST à l'origine du problème.
Dès que j'ai juste eu:
Le laisser passer à travers, et fait de l'algorithme/code de travail avec les dos et ne pas avoir besoin de l'identifiant d'inscription tout de suite, alors qu'il était très bien. Je n'ai même pas besoin du manuel du récepteur de radiodiffusion, il a juste travaillé comme il se doit.
Si l'marqué réponse n'est pas de travail pour vous (comme pour moi), cochez la personne en face de votre appareil, peut-être le secouer et ensuite activer la connexion internet. A travaillé pour moi 😉
Sans internet, vous recevez la même Exception et j'ai passé l'après-midi à chasser des problèmes complexes avec le service....
J'ai eu le même problème, mais c'était la même chose sur tous les appareils. Il m'a fallu une éternité pour trouver mon problème, mais je pensais poster dans le cas où il correspond à quelqu'un d'autre cas. Voici une version simplifiée de mon problème:
Lorsque j'ajoute le deuxième AsyncTask, avec un retour à l'aide de get(), je voudrais obtenir le GCM 'SERVICE_NOT_AVAILABLE" à chaque fois, même si j'ai quand même pu récupérer l'id d'enregistrement de la GcmBroadcastReceiver onReceive(). Cependant, lorsque je lance:
le GCM recevrez le numéro d'enregistrement sans problème.
Je sais que c'est un vieux post, mais je viens d'avoir le même problème, alors que tout a été correctement configurée. Le SERVICE_NOT_AVAILABLE erreur, traîne partout. Après d'aller dans paramètres = > applications => Google Play-services internes connexes, et de vider le cache et supprimer les données, il a travaillé.