我通过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视频多任务处理的新功能(WWDC 2013的#204)显示了以下内容:
它说收到带有content-available
标志的推送通知时,应用程序“启动到后台” 。
为什么我的应用程序没有启动到后台?
因此,真正的问题是:
用户强制退出应用后,iOS会执行后台任务吗?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions