Je déclenche une extraction en arrière-plan en utilisant l' content-available
indicateur sur une notification push. J'ai le fetch
et remote-notification
UIBackgroundModes
activé.
Voici l'implémentation que j'utilise dans mon AppDelegate.m:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"Remote Notification Recieved");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Looks like i got a notification - fetch thingy";
[application presentLocalNotificationNow:notification];
completionHandler(UIBackgroundFetchResultNewData);
}
Lorsque l'application s'exécute en arrière-plan, cela fonctionne bien. (La notification est reçue et l'application a déclenché la notification locale "On dirait que j'ai reçu une notification", comme le code ci-dessus devrait le faire).
Toutefois, lorsque l'application n'est pas en cours d'exécution et qu'une notification push est reçue avec l' content-available
indicateur, l'application n'est pas lancée et la didRecieveRemoteNotification
méthode déléguée n'est jamais appelée.
La vidéo WWDC Quoi de neuf avec le multitâche (# 204 de WWDC 2013) montre ceci:
Il indique que l'application est "lancée en arrière-plan" lorsqu'une notification push est reçue avec le content-available
drapeau.
Pourquoi mon application ne se lance-t-elle pas en arrière-plan?
La vraie question est donc:
IOS effectuera-t-il des tâches en arrière-plan une fois que l'utilisateur aura forcé la fermeture de l'application?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions