2017-09-18 2 views
1

J'ai implémenté le code ci-dessous dans Java en utilisant l'API GCM pour envoyer une notification sur l'appareil Android.Comment obtenir l'ID d'enregistrement de l'échec notification push sur le périphérique Android en utilisant Java GCM API

Sender sender = new Sender(GCM_API_KEY); 
    Message.Builder builder = new Message.Builder(); 
    builder.collapseKey(collpaseKey); 
    builder.timeToLive(TTL_HOURS * 3600); 
    if (data != null) { 
     for (PushData messageData : data) { 
      builder.addData(messageData.getKey(), messageData.getValue()); 
     } 
    } 
    if (StreamType.CALL == type) { 
     for (PushData pushData : message) { 
      builder.addData(pushData.getKey(), pushData.getValue()); 
     } 
    } 
    Message msg = builder.build(); 
    try { 
     System.out.println(msg.toString()); 
     MulticastResult result = sender.send(msg, pushId, MAX_RETRY); 
     log.infof("result %s", result.toString()); 
     return true; 
    } 

Ici, pushId est un type de liste, qui contient l'identifiant push de tous les appareils, auquel, une notification doit être envoyée.

Le problème est que le résultat ne contient pas d'ID push push ou d'identification de périphérique de sorte que je puisse identifier quel périphérique n'a pas reçu de notification. Note: - Je ne veux pas envoyer une notification, un par un

Réponse - résultat

MulticastResult (multicast_id = 7588781423174816193, total = 5, le succès = 1, échec = 4, canonical_ids = 0, résultats: [[errorCode = NotRegistered], [ messageId = 0: 1505731620878025% f02bfbe47eeff668], [ errorCode = NotRegistered], [errorCode = NotRegistered], [ errorCode = NotRegistered]]

qui ne co Ntain ID d'enregistrement ou quelque chose pour que je puisse identifier l'appareil en DB.

Veuillez nous suggérer, Merci à l'avance.

Répondre

0

La réponse vous indique indirectement que les ID Push ont échoué.

Dans votre exemple:

[[ errorCode=NotRegistered ], 
[ messageId=0:1505731620878025%f02bfbe47eeff668 ], 
[ errorCode=NotRegistered ], 
[ errorCode=NotRegistered ], 
[ errorCode=NotRegistered ]] 

vous pouvez voir que le 1er, 3ème, 4ème et 5ème ID push a échoué. Comme vous devez savoir dans quel ordre vous avez envoyé les ID Push dans votre requête, vous devez savoir quels ID Push ont échoué.

Voici un exemple pertinent de la documentation:

Voici les résultats JSON pour 6 destinataires (ID 4, 8, 15, 16, 23 et 42 respectivement) avec 3 messages traités avec succès, 1 canoniques jeton d'enregistrement est retourné, et 3 erreurs:

{ "multicast_id": 216, "succès": 3, "l'échec": 3, "canonical_ids": 1, "résultats": [
{ "message_id": "1: 0408"},
{"erreur": "Indisponible"},
{ "erreur": "InvalidRegistration"},
{ "message_id": "1: 1516"},
{ "message_id": "1: 2342", "ID_enregistrement": "32"},
{ "erreur": "NotRegistered"}]}

Dans cet exemple:

  • premier message: succès, pas nécessaire.
  • Deuxième message: doit être renvoyé (au jeton d'enregistrement 8).
  • Troisième message: a eu une erreur irrécupérable (peut-être la valeur a été corrompue dans la base de données).
  • Quatrième message: succès, rien de nécessaire.
  • Cinquième message: succès, mais le jeton d'enregistrement doit être mis à jour dans la base de données du serveur (de 23 à 32).
  • Sixième message: le jeton d'enregistrement (42) doit être supprimé de la base de données du serveur car l'application a été désinstallée du périphérique .