Sto attivando un recupero in background utilizzando la content-available
bandiera su una notifica push. Ho il fetch
e remote-notification
UIBackgroundModes
abilitato.
Ecco l'implementazione che sto usando nel mio 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);
}
Quando l'app è in esecuzione in background, funziona benissimo. (La notifica viene ricevuta e l'app ha attivato la notifica locale "sembra che ho ricevuto una notifica", come dovrebbe fare il codice sopra).
Tuttavia, quando l'app non è in esecuzione e viene ricevuta una notifica push con il content-available
flag, l'app non viene avviata e il didRecieveRemoteNotification
metodo delegato non viene mai chiamato.
Il video del WWDC Novità del multitasking (n. 204 del WWDC 2013) mostra questo:
Dice che l'applicazione viene "lanciata in background" quando viene ricevuta una notifica push con il content-available
flag.
Perché la mia app non si avvia in background?
Quindi la vera domanda è:
IOS eseguirà attività in background dopo che l'utente ha chiuso forzatamente l'app?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions