2013-12-19 24 views
4

我有一个iOS7应用程序,它注册了后台模式远程通知:如果在UIBackgroundModes中定义了远程通知和新的推送通知,iOS是否会在后台启动应用程序?

<key>UIBackgroundModes</key> 
<array> 
    <string>remote-notification</string> 
</array> 

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

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

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

所以,问题是:我可以让iOS7在重启后运行我的应用程序到后台,当它接收我的应用程序的静默推送通知? 我的推送通知没有“提醒”字段,只有“contentAvailable” - 这可能是一个原因吗? 我见过像whatsapp这样的应用程序能够在重新启动后立即接收并显示推送通知,因此它至少可以用于“警报”类型的通知。

我知道我可以在重新启动后的某个时间点使用重要的位置监控来重新启动应用程序,但我希望避免在工具栏上始终显示位置图标。后台获取模式可以提供帮助吗? 是否有任何统计数据,在执行后台获取模式的应用程序重启后有多快?

回答

9

不,它不会工作。因为您的应用将在您重启设备时处于未运行状态。

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

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

+0

我在我的测试中看到了这种行为。但问题是“我可以让iOS7在重新启动后运行我的应用到后台,当它接收到我的应用的静默推送通知?”。 那么,有没有什么办法可以在重新启动后重新获得远程通知,以便用户不需要手动启动应用程序? –

+0

重新启动设备后,无法在后台启动应用程序。用户需要在重新启动后至少打开一次该应用。那么只有远程通知才会起作用。 – Nandha

+1

我接受这个答案。如果用户长时间不报告,我们决定添加视觉通知 - 它允许提醒用户在设备重新启动后重新启动应用程序。 –

相关问题