Ich löse einen Hintergrundabruf aus, indem ich das content-available
Flag in einer Push-Benachrichtigung verwende. Ich habe das fetch
und remote-notification
UIBackgroundModes
aktiviert.
Hier ist die Implementierung, die ich in meinem AppDelegate.m verwende:
- (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);
}
Wenn die App im Hintergrund ausgeführt wird, funktioniert sie einwandfrei. (Die Benachrichtigung wird empfangen und die App hat die lokale Benachrichtigung "Es sieht so aus, als hätte ich eine Benachrichtigung erhalten" ausgelöst, wie es der obige Code tun sollte.)
Allerdings , wenn die App nicht läuft und eine Push - Benachrichtigung mit der empfangenen content-available
Flagge, wird die App nicht gestartet und die didRecieveRemoteNotification
delegierte Methode nie aufgerufen.
Das WWDC-Video Was ist neu mit Multitasking (# 204 von WWDC 2013) zeigt dies:
Es heißt, dass die Anwendung "im Hintergrund gestartet" wird, wenn eine Push-Benachrichtigung mit dem content-available
Flag empfangen wird .
Warum wird meine App nicht im Hintergrund gestartet?
Die eigentliche Frage lautet also:
Führt iOS Hintergrundaufgaben aus, nachdem der Benutzer die App zwangsweise beendet hat?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions