我通过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);
}
Run Code Online (Sandbox Code Playgroud)
当应用程序在后台运行时,它可以正常工作.(收到通知,应用程序触发"看起来像我收到通知"本地通知,因为上面的代码应该这样做).
但是,当应用程序未运行并且收到带有content-available标志的推送通知时,应用程序不会启动,并且didRecieveRemoteNotification永远不会调用委托方法.
WWDC视频最新的多任务处理(来自WWDC 2013的#204)显示了这一点:
它表示当收到带有content-available标志的推送通知时,应用程序将"启动到后台" .
为什么我的应用程序没有启动到后台?
所以真正的问题是:
用户强行退出应用后,iOS会执行后台任务吗?
我们只是将VOiP功能添加到我们的应用程序(消息传递应用程序),现在我们将使用VOiP(PushKit Framework).
任何人都可以告诉我,我们是否只能使用该通知(VOIP通知)?甚至对于文本消息的含义(例如,不是用于呼叫)?我谈到Apple Appstore Guides,他们可以拒绝该应用或阻止通知,如果他们发现我们使用该通知通知用户其他事情然后是VOIP呼叫?