web-dev-qa-db-fra.com

Android GCM envoyé avec succès mais non reçu sur certains appareils

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?

ÉDITER

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?

30
Jee Seok Yoon
  1. Assurez-vous d'avoir défini votre SENDER ID vous avez bien reçu de Google.
  2. Assurez-vous que votre appareil a été correctement enregistré auprès du service GCM de Google.
  3. Assurez-vous que vous envoyez le Push à l'identifiant de connexion correct que vous avez reçu de Google. et que vous n'avez pas reçu d'erreur du service Google GCM.
  4. Avez-vous défini le 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 .
  5. Parfois, il faut du temps pour que le Push arrive (mais jamais trop de temps, alors il y a un problème). Vérifiez quel est le "temps de vivre" du Push que vous avez envoyé.
18
Assaf Gamliel

si vous utilisez le wifi, le pare-feu Internet peut bloquer le gcm. essayez d'utiliser Internet avec votre carte SIM mobile.

2
Dehan Wjiesekara

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 .

2
Andros

Liste de contrôle

  • Assurez-vous que Google Play Store est mis à jour vers la dernière version
  • Assurez-vous qu'il n'y a pas de paramètres à l'échelle du système pour les notifications qui bloquent
  • Accédez à l'application dans Application Manager et décochez/revérifiez "Notifications"
  • Si sur Wifi, basculez la connexion Wifi vers un autre AP (si possible)
  • Redémarrez l'appareil
  • Installez 'Push Notification Fixer' (installez-le quand même)

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.

1
BricoleurDev