2010-01-05 3 views
3

ma notification APNS fonctionne bien, mais j'ai remarqué un comportement étrange pour lequel je voudrais demander des confirmations.Aucune option de lancement APNS si elle est lancée plus tard?

Je récupère la charge utile de notification soit pendant "didFinishLaunchingWithOptions" ou "didReceiveRemoteNotification". Dans "didFinishLaunchingWithOptions" je vérifie

NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; 

afin de dériver les paramètres. Dans "didReceiveRemoteNotification" l'apsInfo est dérivé de NSDictionary * apsInfo = [userInfo objectForKey: @ "aps"]; Cela fonctionne très bien, à une exception près: si j'ignore la fenêtre de notification et que je clique sur "Fermer" au lieu de "Afficher" pour finalement lancer mon application plus tard depuis le tableau de bord, il n'y a plus d'apsInfo. Est-ce "par conception"? L'information de notification n'est-elle disponible que si vous cliquez sur "Afficher" ou lance l'application à partir de la boîte de dialogue d'informations de notification?

Cordialement

+0

Oui Je crois que c'est le bon débit. Vous obtenez uniquement les options de lancement lorsque l'utilisateur appuie sur "Voir" – NWCoder

+1

Voici l'api Je pense que cela confirme ceci: http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html # // apple_ref/occ/intfm/UIApplicationDelegate/application: didFinishLaunchingWithOptions: – NWCoder

+0

Merci. Je pense que, vous faites référence à « launchOptions Un dictionnaire contenant des informations relatives à l'une des deux situations: .... Le dictionnaire est nul si l'utilisateur a lancé l'application en appuyant sur l'icône de l'application. » Donc, fondamentalement, cela signifie: La notification est perdue, si l'utilisateur reporte la gestion. Cela ne me semble pas logique ... – neil

Répondre

-1

Le même problème. La notification est arrivée sur le téléphone et l'utilisateur a appuyé sur Fermer au lieu de Afficher sur la boîte de message. Un badge apparaît sur l'icône de l'application. Bien joué. Maintenant, ouvrez l'application et que la documentation d'Apple dit: « utiliser didFinishLaunchingWithOptions quand vous voulez launchOptions rempli de notification et bla, bla ... »

Le problème est que lorsque didFinishLaunchingWithOptions est tiré launchOptions est encore vide . Essayé de nombreuses combinaisons de solution: pas de résultat

Le bug du SDK?

MISE À JOUR ================================== Dans la documentation d'Apple, didFinishLaunchingWithOptions est écrit : "Le dictionnaire est nul si l'utilisateur a lancé l'application en appuyant sur l'icône de l'application."

Donc, je ne sais pas s'il est même possible de récupérer le corps de la notification lorsque l'application est lancée après la boîte aux lettres de notification fermée de l'utilisateur (et il y a badge sur l'icône de l'application). Le corps de notification est-il perdu dans l'espace lorsque l'utilisateur ferme la boîte de message de notification? MISE À JOUR =================================== Après une enquête plus approfondie, j'ai trouvé la réponse. Oui, les données non livrées sont perdues. Pas d'attente pour l'utilisateur d'être en ligne, pas de stockage, pas d'info de notification de livraison. APNS dans le service non payé et Apple n'a pas la responsabilité de la livraison à 100% des données.

-1

Semble, c'est le chemin, c'est. Je suppose que nous sommes tous censés contacter nos serveurs afin de récupérer la charge utile de notification (à nouveau). C'est plutôt ridicule, car une charge utile de notification ne dépasse pas 256 octets, donc Apple aurait pu fournir un moyen de conserver la charge utile de notification pour une utilisation ultérieure. Au moins, vous pouvez récupérer les informations qui vous sont envoyées dans l'élément "badge". Ceci est sauvegardé. Le reste est perdu, malheureusement ...

-1

J'ai une idée, même si je n'ai pas le temps de l'implémenter pour l'instant. Lorsque vous envoyez une notification Push, enregistrez dans la base de données de votre serveur Web chaque utilisateur auquel la notification a été envoyée. La prochaine fois qu'un utilisateur ouvre l'application (directement depuis la notification push ou plus tard en appuyant sur l'icône de l'application), vous envoyez une requête ping à votre serveur pour voir si cet utilisateur a ouvert l'application depuis l'envoi de la notification push .

  • Si c'est la première fois que l'utilisateur ouvre l'application depuis l'envoi de la notification, votre application lit les données appropriées sur votre serveur et passe à l'état souhaité. Juste une idée à ce stade, mais je pense que cela va fonctionner. Cela dépend si cela vaut la peine de l'implémenter.

  • Questions connexes