我有一个iOS7应用程序,它注册了后台模式远程通知:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
它在重启之前工作正常,应用程序在后台获取此事件:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
但它看起来像重启后我不再得到这个事件,直到我手动启动应用程序。
所以,问题是:我可以让iOS7在我的应用程序收到静态推送通知后重启后运行我的应用程序吗? 我的推送通知没有“alert”字段,只有“contentAvailable” - 这可能是一个原因吗? 我已经看到像whatsapp这样的应用程序能够在重启后立即接收并显示推送通知,因此它看起来至少可以用于“警报”类型的通知。
我知道我可以使用重要的位置监控在重启后的某个时刻重新启动应用程序,但我想避免一直在工具栏上显示位置图标。后台获取模式可以帮助吗? 有没有统计数据,重启后应用程序的后台获取模式会有多快?
答案 0 :(得分:9)
不,它不会工作。因为重启设备时,您的应用将处于未运行状态。
根据apple doc,新的多任务API(提取和远程通知)仅在处于暂停/后台/前景状态的应用时才有效。如果应用处于后台/前景状态,则application:didReceiveRemoteNotification:fetchCompletionHandler
将被触发。如果应用处于暂停状态,则-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
将被触发。
在您的情况下,应用处于未运行状态,因为application:didReceiveRemoteNotification:fetchCompletionHandler
永远不会被触发。
有关应用状态的详情,请参阅apple doc。