Я запускаю фоновий збір, використовуючи content-available
прапор на сповіщення про push. У мене є fetch
і remote-notification
UIBackgroundModes
включено.
Ось реалізація, яку я використовую у своєму 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);
}
Коли програма працює у фоновому режимі, вона працює чудово. (Повідомлення отримано, і додаток викликає локальне сповіщення "схоже на те, що я отримав сповіщення", як це повинен робити код).
Однак, коли програма не працює та надходить поштове сповіщення із content-available
прапором, додаток не запускається і didRecieveRemoteNotification
метод делегування ніколи не викликається.
Відео WWDC Що нового у багатозадачності (№204 від WWDC 2013) показує це:
У ньому йдеться про те, що додаток "запускається у фоновий режим", коли надходить натиснене повідомлення із content-available
прапором.
Чому мій додаток не запускається на другий план?
Тож справжнє питання:
Чи буде iOS виконувати фонові завдання після того, як користувач примусить запустити додаток?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions