web-dev-qa-db-fra.com

Comment connaître le statut de livraison de la notification push

J'utilise la notification Push dans une application. Tout va bien.

Parfois, le message envoyé par le serveur mais côté application ne reçoit pas.

Dans cette situation, je dois savoir quel message est manquant à livrer (l'application n'a pas reçu).

Existe-t-il un moyen de savoir côté serveur quel message est reçu par l'application et quels ne le sont pas?

16
Salim

Nopes, les notifications push sont feu et oublie.

Apple ne vous dira pas ce qui suit:

  1. Ne dira pas si le message a été envoyé avec succès ou non
  2. Ne dira pas si l'utilisateur a désactivé les notifications push
  3. Beaucoup d'autres choses mais quand même ...

Toutefois

D'autre part, lorsque l'utilisateur a opté pour les notifications push, votre application peut gérer cela, mais dans une certaine mesure:

Fondamentalement, vous pouvez ajouter une logique dans les -didReceiveRemoteNotification: et -didFinishLaunchingWithOptions: pour contacter votre serveur et lui dire que le message a été reçu.
S'il n'a pas été reçu dans un créneau horaire particulier, vous pouvez le renvoyer.

Mais comme vous le voyez, cela pourrait conduire à un scénario possible d'inonder un utilisateur innocent avec les mêmes notifications Push.
Dans un sens, le harceler pour qu’il tape sur votre notification Push stupide, ce qui l’a peut-être amené à désactiver entièrement les notifications Push pour votre application, mais surtout qu’il supprimerait l’application et lui donnerait peut-être même une note basse?
Vous sert bien, je vais dire. 

Quoi qu'il en soit, si vous continuez avec cela, vous devrez implémenter un modèle d'identification dans lequel vous insérerez un message identifier unique dans le contenu de la notification Push et lorsque votre application obtiendra cette notification Push, elle devra renvoyer ce message identifier au serveur.
Votre serveur doit ensuite enregistrer qu’un jeton de périphérique particulier a renvoyé un message identifier, ce qui signifie qu’il a reçu cette notification Push particulière.

Votre serveur peut vérifier toutes les heures, tous les jours ou de quelque manière que ce soit et renvoyer un message particulier aux jetons de périphérique qui n'ont pas renvoyé avec le message identifier relatif. 

Encore une fois, cela signifie que votre serveur devra parfois fonctionner OT.


Il y a d'autres problèmes avec toute cette approche:

  1. L'utilisateur a reçu une notification Push, mais l'a rejetée plutôt que d'ouvrir votre application avec celle-ci
    • Votre serveur supposera que l'utilisateur n'a pas vu la notification Push et l'enverra à nouveau.
  2. Jetons de périphérique fantôme
    • L'utilisateur a d'abord accepté les notifications Push, mais a ensuite révoqué ce privilège.
    • L'utilisateur a désinstallé l'application
    • Fondamentalement, jetons de périphérique qui recevaient autrefois la notification Push mais ne le font plus, probablement en raison de votre réputation d'inondation de messages
  3. L'utilisateur a reçu une notification Push, mais le tape plus tard
    • peut recevoir la même notification Push plusieurs fois (très irritant)
  4. L'utilisateur a reçu une notification Push, mais l'utilise lorsqu'il n'y a pas de connexion Internet
  5. L'utilisateur a reçu une notification Push, mais votre serveur est en panne, éventuellement frit

Vous pouvez contourner les 3 derniers scénarios en ayant encore plus de logique dans votre application qui met en file d'attente les ID de message à envoyer au serveur et ne les supprime que lorsque le serveur répond avec succès.

Vous voyez donc trop de travail côté serveur + côté client.
De plus, c’est un énorme dégrader les performances côté serveur lorsque vous traitez avec un bon volume d’utilisateurs et que vous réduisez un peu les performances de votre application.

23
staticVoidMan

Le service de feedback

Le service de notification Apple Push comprend un service de retour d'informations vers vous donner des informations sur les notifications Push ayant échoué. Quand un Push la notification ne peut pas être livrée car l'application envisagée ne le fait pas existe sur le périphérique, le service de rétroaction ajoute le jeton de ce périphérique à sa liste. Les notifications push qui expirent avant d'être livrées sont pas considéré comme une livraison échouée et n’a pas d’impact sur les commentaires un service. En utilisant ces informations pour arrêter d’envoyer des notifications Push Si vous ne le recevez pas, vous réduisez le nombre de messages inutiles les frais généraux et améliorer les performances globales du système.

Interrogez quotidiennement le service de feedback pour obtenir la liste des jetons de périphérique. Utilisation l'horodatage pour vérifier que les jetons de périphérique n'ont pas été réenregistré depuis la saisie de la rétroaction. Pour chaque appareil qui n’a pas été réenregistré, arrêtez d’envoyer des notifications. APNs surveille les fournisseurs pour leur diligence dans la vérification des commentaires service et s’abstenant d’envoyer des notifications Push à des adresses inexistantes applications sur les appareils.

5
meda

1. Si vous vous demandez si des notifications ne sont pas livrées sur un périphérique sur lequel une application est installée et juste parce que les notifications ont expiré avant d'être livrées ou autre chose, les notifications ne sont pas livrées.

Alors la réponse est 

Nan.

Il ne fournit pas d'assistance dans laquelle vous pouvez vérifier si les notifications ont expiré et ne sont pas livrées sur un appareil valide:

Toute option pour savoir si l'application Apple reçoit la notification Push?

Reportez-vous à la réponse de Moshe dans le lien ci-dessus. J'inclus sa réponse ici pour qu'elle soit utile à tout le monde à l'avenir, même si le lien devient inactif.

La réponse courte, vous ne pouvez pas, car APNS est un moyen. Cependant, depuis L'application peut exécuter du code arbitraire à la réception d'une notification, vous pouvez utilisez ceci pour dire, envoyez une requête http à votre propre serveur lorsque le la notification est reçue.

2. Si vous demandez que les notifications ne soient pas envoyées car l'utilisateur a désinstallé l'application, vous pouvez vous reporter à la réponse de meda dans ce message.

J'espère que cela vous aide et faites-moi savoir si vous avez des questions concernant mon explication.

3
Sr.iOSDev

Vous pouvez obtenir le rapport de livraison de la notification Push, pas à partir du serveur, mais à partir de votre application, en utilisant "Service Extension" et en modifiant un peu votre Push json. Commander ce lien pour une explication détaillée.

0
manishsharma93