如果在UIBackgroundModes中定义了远程通知并且新的推送通知到来,iOS是否会在重启后启动应用程序?

我有一个iOS7应用程序注册后台模式远程通知:

UIBackgroundModes  remote-notification  

它在重新启动之前工作正常,应用程序在后台获取此事件:

 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 

但它看起来像重启后我不再得到这个事件,直到我手动启动应用程序。

所以,问题是:我可以让iOS7在我的应用程序收到静态推送通知后重新启动后将我的应用程序运行到后台吗? 我的推送通知没有“alert”字段,只有“contentAvailable” – 这可能是个原因吗? 我已经看到像whatsapp这样的应用程序能够在重新启动后立即接收并显示推送通知,因此它看起来至少可以用于“警报”类型的通知。

我知道我可以使用重要的位置监控在重启后的某个时刻重新启动应用程序,但我想避免在工具栏上一直显示位置图标。 后台获取模式可以帮助吗? 有没有统计数据,重启后应用程序的后台获取模式会有多快?

不,它不会起作用。 因为您重启设备时应用程序将处于“ 未运行”状态。

根据apple doc,新的多任务API(提取和远程通知)仅在应用程序处于挂起/后台/前台状态时才有效。 如果应用程序处于后台/前台状态,则application:didReceiveRemoteNotification:fetchCompletionHandler将被触发。 如果应用程序处于挂起状态,则-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions将触发-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 。 在您的情况下,应用程序处于“ 未运行”状态,因为该application:didReceiveRemoteNotification:fetchCompletionHandler永远不会被触发。

有关应用程序状态的更多信息,请参阅apple doc 。