IOS va-t-il réactiver mon application lorsque je reçois une notification push silencieuse? (Lorsque l'application n'est pas en cours d'exécution)

Mettre à jour la question:

L'exigence est; Dès que je reçois une notification silencieuse, je veux exécuter un service Web et afficher le seul recouvrement dans la barre de notification. Il doit fonctionner si l'application est également tuée. une solution de contournement?

J'essaie de suivre la méthode ci-dessous.

Je suis nouveau sur iOS et j'ai lutté avec la notification push silencieuse, googlé beaucoup et suis resté coincé. IOS activera-t-il mon application lorsque je recevrai une notification push silencieuse lorsque l'application ne sera pas lancée (c'est-à-dire lorsque l'application sera retirée du sélecteur d'applications)?

ma charge de paye est comme

{ aps: { content-available: 1, sound: "" } } 

.

 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{ int CA=[[[userInfo valueForKey:@"aps"] valueForKey:@"content-available"] intValue]; if (CA==1) { my action... } completionHandler(UIBackgroundFetchResultNewData); } 

cette méthode est appelée et fonctionne bien lorsque l'application est en premier plan et en arrière-plan.cant éveille mon application lorsque l'application n'est pas en cours d'exécution (c'est-à-dire que l'application n'est pas lancée ou supprimée)

Si l'application a été supprimée de l'application Switcher, iOS ne réveillera pas votre application, car l'user a spécifiquement demandé la fermeture de votre application.

Si l'user ouvre votre application au less une fois et ne la supprime pas de App Switcher, iOS activera votre application

Ce que nous avons fait côté server pour gérer ceci est: Si l'application de l'user ne se connecte pas dans la minute après avoir envoyé la notification silencieuse, (vous pouvez la définir comme vous le souhaitez), nous envoyons une autre notification push non-silencieuse l'user. Comme l'application (qui n'est pas fermée par l'user) devrait automatiquement récupérer datatables, cela devrait prendre less d'une minute.

Mais pour cela, bien sûr, vous avez besoin d'un code de server plus complexe que de simplement envoyer un push silencieux.

Veuillez vérifier ceci: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler:

Utilisez cette méthode pour traiter les notifications distantes entrantes pour votre application. Contrairement à l' application:didReceiveRemoteNotification: méthode, qui n'est appelée que lorsque votre application s'exécute en premier plan, le système appelle cette méthode lorsque votre application s'exécute au premier plan ou en arrière-plan. En outre, si vous avez activé le mode d'arrière-plan des notifications à distance, le système lance votre application (ou la sort de l'état suspendu) et la place dans l'état d'arrière-plan lorsqu'une notification à distance arrive. Toutefois, le système ne lance pas automatiquement votre application si l'user l'a forcée à quitter. Dans ce cas, l'user doit relancer votre application ou redémarrer l'appareil avant que le système ne tente de relancer automatiquement votre application.

Cela indique clairement que l'utilisation de la nouvelle fonctionnalité Push d'arrière-plan vous permet de réactiver l'application uniquement si votre application est suspendue, et non si elle est interrompue par l'user .

Suivez les étapes ci-dessous.

  1. Entendre la poussée silencieuse quand l'application est tuée.

  2. Quand le push arrive (dans didReceiveRemoteNotification), allez à l'appel webservice

  3. Lorsque vous obtenez des données de webservice, envoyez LOCAL PUSH (avec le text que vous recevez du webservice)

J'espère que c'est ce que tu voulais.

S'il vous plaît laissez-moi savoir si vous avez besoin d'autre chose.

Comme je l'ai testé lorsque l'application est terminée par l'user (glisser vers le haut à partir du sélecteur d'application), vous n'aurez pas de time d'exécution en arrière-plan en raison du drapeau de poussée silencieux (contenu disponible) ou de l'extraction d'arrière-plan.

Aussi ceci:

Gardez également à l'esprit que si vous tuez votre application à partir du sélecteur d'application (c'est-à-dire que l'application est supprimée), le operating system ne relance jamais l'application sans tenir count de la notification push ou de l'extraction d'arrière-plan. Dans ce cas, l'user doit relancer manuellement l'application une fois et, à partir de ce moment, les activités d'arrière-plan seront appelées. -pmarcos (ouvrier Apple)

Sur les forums Apple: https://devforums.apple.com/message/873265#873265

Vous pouvez get une notification PUSH et travailler avec. Je connais un peu le moyen de le faire … Ouvrez AppDelegate.m et et trouvez ou mettez cette méthode - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions . Après cela, mettez dans ce code de méthode comme le mien:

 NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (userInfo) { NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; NSSsortingng *alertType = [apsInfo objectForKey:@"type"]; //my own param in PUSH-notification globalPushType = alertType; //global variable for working with it in some ViewControllers after app's load } 

Je sais, cela aide beaucoup de gens. =)