iOS newsstand: la notification push ne lance pas l'application en arrière-plan

J'implémente des fonctionnalités de kiosque à journaux dans une application et bien que l'application reçoive la notification push, elle ne démarre pas en mode d'arrière-plan.
Si je tape l'alerte de notification, l'application démarre et je peux voir "content-available": 1 est présent dans le dictionary et le problème est également téléchargé, mais l'application n'est pas automatiquement lancée.

J'ai ajouté à la plist:

<key>UIBackgroundModes</key> <array> <ssortingng>newsstand-content</ssortingng> </array> 

et à didFinishLaunchingWithOptions:

 [[NSUserDefaults standardUserDefaults]setBool: YES forKey:@"NKDontThrottleNewsstandContentNotifications"]; // for testing purposes [[NSUserDefaults standardUserDefaults] synchronize]; [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeNewsstandContentAvailability )]; 

Je vois également que mon application n'est pas affichée sous Paramètres -> Store -> Téléchargements automatiques (et d'autres magazines y apparaissent).

Est-ce que je manque quelque chose? Est-ce censé fonctionner dans l'environnement sandbox?

Quelques clarifications

  1. Si vous n'envoyez pas "alert" dans votre charge utile Newsstand qui n'a que du contenu disponible: 1, rien ne sera ajouté dans le centre de notifications.
  2. L'application de lancement de notification en kiosque ne signifie pas que l'application arrivera au premier plan (comme si l'user tapait sur l'icône de l'application). Cela signifie simplement que si l'application n'est pas en arrière-plan, elle sera lancée par iOS en arrière-plan -> didFinishLaunchingWithOptions de appDelegate est appelée, où l'application doit vérifier s'il s'agit d'une notification Kiosque pour planifier le téléchargement en ajoutant des actifs dans la queue du Kiosque. Les paths d'actifs peuvent faire partie de la charge utile NS (à condition <limite de charge utile 256 octets)

NSDictionary * payload = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

if (payload && [[payload objectForKey: kContentAvailablePush] caseInsensitiveCompare: @ "1"] == NSOrderedSame) {NSLog (@ "Lancé en raison d'une notification NS"); }

Assurez-vous que UINewsstandApp = YES a été défini dans votre plist

Vous devez vous inscrire à la notification en kiosque pour apparaître dans les Paramètres et recevoir les "notifications en kiosque". Pour vous inscrire, ajoutez ceci à votre application:didFinishLaunchingWithOptions: ::

 // Add registration for newsstand notifications // In your application:didFinishLaunchingWithOptions: [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeNewsstandContentAvailability]; 

L'user sera invité à accepter le téléchargement en arrière-plan ou non.

Jetez un oeil à ce tutoriel vraiment complet sur les applications de kiosque à journaux: http://www.viggiosoft.com/blog/blog/2011/10/17/ios-newsstand-tutorial/

{"aps": {"badge": 1, "alert": "test","content-available":1}} C'est une bonne charge utile. {"aps": {"badge": 1, "alert": "test"},"content-available":1} C'est une charge utile incorrecte.

C'est ce qui arrive quand le contenu disponible est dans la charge utile:

  • Si l'application est suspendue, le système la mettra en arrière-plan
  • Si l'application a été supprimée par l'user, rien ne se passe et l'application rest dans Not Running

Il doit y avoir une action de l'user pour démarrer l'application essentiellement en ajoutant le message d'alerte dans la notification push.

la source

http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled/

Cependant, cela ne résout pas votre problème. Comme solution de contournement, vous pouvez utiliser l'extraction d'arrière-plan, qui réveille l'application à chaque intervalle de time.