Je suis implémentant GCM - la première chose que je fais est d'appeler gcmregistrar.getregistrationID pour voir si l'appareil est enregistré. Ce n'est pas (la chaîne vide est renvoyée), alors je fais un appel asynchrone à gcmregistrar.register. Comme prévu, mon service d'intention (dérivé de GCMBaseintService) obtient sa méthode intégrée () appelée, avec un jeton que mon serveur peut utiliser pour envoyer des messages GCM à ce périphérique. Jusqu'à présent, si bon.
Cependant, la prochaine fois que j'exécute l'application, je m'attendrais à ce que le premier appel à GCMregistrar.getregistrationID pour retourner le jeton que je suis rentré dans la fonction de service de mon intention. Mais je reçois à nouveau la chaîne vide. Je pensais que la bibliothèque client GCM (GCM.JAR) enregistrerait l'ID d'enregistrement GCM (jeton) à un objet privé SharedPreferences - en fait, la documentation de la classe GCMregistrar ( http://developer.android.com/guide/google/gcm/client-javadoc /com/google/android/gcm/gcmregistrar.html ) états "Remarque: cette classe utilise un objet privé SharedPreferences pour garder une trace du jeton d'enregistrement" p>
Je n'ai pas désigné l'appareil, Désinstallées l'application ou mettez à jour la versionCode. Des idées ce qui me manque? Merci P>
Note - Cette question a été postée dans Google Groupes sous la balise Android-GCM. L'URL est ici: p>
HTTPS: // Groupes .google.com / Forum / #! Sujet / Android-GCM / 4FPQZLZLVE4 P>
Mark Murphy (un gars des Commons) a été réel avec le diagnostic initial du problème, mais rien de béton a fait surface < / p>
Mise à jour Edition - Voici la partie pertinente de mon androidmanifest.xml fort> p>
7 Réponses :
* "catégorie android: nom =" écrire votre nom complet de package em> "/>" * strong> p> p>
Donnez votre colis en manifeste comme ci-dessus. P>
J'ai ajouté mon nom complet du package sur le Fainfest. "com.myapp.package.name" est juste une chaîne de remplacement pour le nom du package réel.
Vérifiez si vous avez appelé La méthode désignonne réellement le périphérique de Google Services. Il ne reçoit donc pas de jeton avant d'ouvrir votre application et d'obtenir l'action du registre. p> gcmregistrar.unregister (this); code> une méthode quelque part appelée lorsque l'application est fermée. Peut-être dans
OnDestroy () CODE> ??
Dans notre cas, c'était le problème :) p>
Veuillez consulter la documentation de l'exemple d'application. Dans le manifeste, il dit:
<service android:name=".GCMIntentService" />
Ajoutez également la permission de GCM dans votre manifeste et vérifiez la clé GMC Google. P>
application reçoit des messages GCM. p>
Mettez votre classe de service qui dérivée du service GCminTent dans le paquet racine de votre application. Je veux dire si votre package d'application est strong> com.stackoverflow.android strong> votre classe de service devrait réside dans ce paquet em> strong> pas dans L'un des autres package Pakage de votre projet d'application. Assurez-vous de mettre tout l'autorisation requise dans le fichier manifeste p>
Cette réponse ne fournit aucune nouvelle information qui n'est pas déjà fournie par d'autres réponses à cette question.
Pas de soucis, si GetregistrationID renvoie une chaîne vide, c'est-à-dire parce que parfois, il faut du temps pour vous inscrire au cloud GCM. Vous devriez attendre que la méthode d'registrement déclenche dans la classe de service GCminent.
Une fois qu'il est enregistré, vous recevrez l'enregistrementId, puis vous pouvez faire tout ce que vous voulez avec elle (vous devrez probablement l'envoyer à votre base de données Web, vous pouvez appeler Async à partir de la méthode de rappel d'registration). p>
@override
Vide protégé Onregistré (contexte arg0, chaîne arg1) { p>
J'ai vérifié l'androidmanifest pour vous assurer que notre service a été défini correctement et c'était. En fin de compte, je suis allé avec un piratage qui impliquait écrire à des préférences partagées. p>
Tout succès pour obtenir un identifiant de périphérique, j'ai le même prob ..
Oh, nous avons aussi ce problème ... y a-t-il une solution ??
Même problème: inscription réussie, mais seulement obtenir une chaîne vide avec GetregistrationID (). Avez-vous trouvé quelque chose?