Côté serveur, j'utilise la bibliothèque GCM server 1.0.2 fournie par Google. Côté client, j'ai configuré GCM comme prévu sur le documentation officielle .
Mon problème est que tout fonctionne bien sur la plupart des appareils, mais sur quelques appareils, Push n'est pas reçu.
if (case1)
message = new Message.Builder()
.timeToLive(0)
.collapseKey("0")
.delayWhileIdle(false)
.addData("msg", msg).build();
else if (case2)
message = new Message.Builder()
.collapseKey("2")
.addData("msg", msg).build();
else
message = new Message.Builder().addData("msg", msg).build();
Result result = sender.sendNoRetry(message, regId);
System.out.println("Message ID:"+result.getMessageId());
System.out.println("Failed:" + result.getErrorCodeName());
D'après ce que je peux voir des tests avec le code ci-dessus, il n'y a pas d'erreur. L'identifiant du message est présent, mais le nom du code d'erreur est nul (ce qui est un signe Push réussi ).
J'ai essayé presque tous les réglages. Testé avec TTL, touche de repli, délai pendant l'activation et la désactivation du ralenti.
Quels sont les cas qui peuvent bloquer (?) La poussée GCM? Et comment puis-je résoudre ce problème?
Je ne sais pas pourquoi mais la solution temporaire ci-dessous a résolu mon problème.
Dans GcmIntentService # onHandleIntent, supprimez simplement
GcmBroadcastReceiver.completeWakefulIntent(intent);
Cette ligne libère le service de veille. Je suis curieux cependant car sur d'autres appareils, les messages Push sont envoyés en continu même lorsque cette ligne n'a pas été supprimée.
Ce n'est pas une solution car ce document indique que je devrais appeler completeWakeFulIntent après chaque travail. De plus, ma méthode épuisera considérablement la batterie.
Toute suggestion?
SENDER ID
vous avez bien reçu de Google.delay_while_idle = 1
? Cela signifie que le message n'atteindra pas l'appareil s'il est inactif (éteint, hors ligne, écran verrouillé, etc.). Remplacez-le par delay_while_idle = 0
si vous voulez que votre autorisation wakelock fasse une différence. Veuillez lire plus ici .si vous utilisez le wifi, le pare-feu Internet peut bloquer le gcm. essayez d'utiliser Internet avec votre carte SIM mobile.
Avez-vous la bonne version du Playstore pour recevoir la notification? Êtes-vous connecté avec un compte Google fonctionnel sur ces appareils?
J'ai également eu un problème lorsque je "force l'arrêt" d'une application, vous ne pouvez pas recevoir de notification sur une application après un "arrêt forcé" (commencez par Android 3.1) alors soyez prudent avec cela aussi .
Liste de contrôle
La configuration de la notification de la première exécution peut être arbitrairement ennuyeuse et nécessiter que le périphérique soit `` kické '' d'une ou plusieurs de ces manières.