content-available
プッシュ通知のフラグを使用してバックグラウンドフェッチをトリガーしています。私が持っている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ビデオWhat's New With Multitasking(WWDC 2013の#204)はこれを示しています。
content-available
フラグ付きのプッシュ通知を受信すると、アプリケーションが「バックグラウンドで起動」されると書かれています。
アプリがバックグラウンドで起動しないのはなぜですか?
だから本当の質問は:
ユーザーがアプリを強制終了した後、iOSはバックグラウンドタスクを実行しますか?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions