Comment puis-je gérer les notifications push non lues dans iOS?

J'ai une application iOS 5.1 qui s'enregistre auprès du service APNS pour recevoir des notifications. Le registre est réussi et je reçois les notifications correctement. Le problème vient quand j'essaie de gérer les notifications.

Une fois l'application exécutée, la méthode didReceiveRemoteNotification dans AppDelegate est appelée correctement et la notification est traitée comme prévu. Ceci, cependant, ne se produit que lorsque l'application s'exécute au premier plan.

Cependant, lorsque l'application s'exécute en arrière-plan ou est simplement arrêtée, cette méthode n'est pas appelée. J'ai lu que vous devriez append quelques lignes à la méthode didFinishLaunchingWithOptions méthode pour get la notification du dictionary userInfo , et le manipuler. Cela fonctionne très bien, mais seulement lorsque l'application est ouverte en cliquant sur la notification au Centre de notifications. Cela signifie que si vous ouvrez l'application en cliquant sur son badge, ou simplement en changeant de context si vous l'exécutez en arrière-plan, l'application ne réalise jamais qu'une notification est arrivée. En outre, si plus d'une notification a été reçue, nous pouvons ne manipulez que l'un d'eux à la fois en cliquant sur le Centre de notifications, ce qui est pénible 🙂

Est-il possible de lire les notifications en attente dans le centre de notifications? Je sais qu'il existe un moyen de les vider en utilisant la méthode cancelAllLocalNotifications mais je n'ai pas trouvé de moyen de les lire. Et j'ai vraiment besoin de tous les gérer. J'ai pensé mettre en œuvre un protocole de communication avec le server de notification tiers pour récupérer les informations lorsque l'application arrive au premier plan, mais comme l'information est déjà dans le operating system, je findais étrange qu'il soit impossible d'y accéder.

Alors, quelqu'un sait-il un moyen de le faire? Merci d'avance.

Lorsqu'une notification push arrive et que l'user clique sur 'annuler', votre application n'a aucun moyen de relire cette notification push. Vous devez implémenter une fonctionnalité séparée (très probablement du côté server) pour aller chercher une list de notifications envoyées à ce périphérique.

Par exemple, si une fonctionnalité de discussion est fournie dans votre application et que vous envoyez des messages de discussion via des notifications push, vous devez également conserver les messages de discussion sur le server. Si un user clique sur «Annuler» sur une notification push, ce message ne sera pas affiché sur l'appareil iOS. Dans ce cas, lorsqu'une application arrive au premier plan plus tard, vous appelez le server et récupérez tous les messages de discussion passés (envoyés par notification push).

Ok, donc une solution possible serait d'avoir une autre table de database avec les messages avec un drapeau 'read' et un champ messageID? Par défaut, le drapeau de lecture est NON, puis lorsque l'application lit avec succès et affiche, il met à jour le drapeau à OUI?

Et avec seulement 256 octets à jouer avec, quel genre de longueur de champ ID serait nécessaire?

Modifier,

Exécuté ce plan et son fonctionnement avec succès.