0

我正在创建一个 iPad 应用程序,我需要以下功能:

每当应用程序运行时(例如,在后台或前台),定期(例如,每小时一次)检查一些 HTTP(s)并可能下载和存储一些数据。

这背后的动机是允许应用程序缓存一些数据,以便在需要时可以离线使用。我知道这会缩短电池寿命,但现在这不是问题。

根据我在Apple iOS Programming Guide: Background Execution and Multitasking中阅读的内容,应用程序可以执行后台任务。我找不到适合我需要的案例:

  • 在后台执行有限长度任务:这仅适用于“从前台进入后台”任务。
  • 安排本地通知的传递:显然不是这样,我正在创建任何通知,我只需要下载一些数据。
  • 实现长时间运行的后台任务:这似乎是一个问题,但在探索时,它有几个类别,我没有找到任何可以涵盖我的用例(从 apple.com 复制粘贴):
    • audio— 应用程序在后台向用户播放有声内容。(此内容包括使用 AirPlay 的流式音频或视频内容。)
    • location- 该应用程序让用户随时了解他们的位置,即使它在后台运行。
    • voip— 该应用程序使用户能够使用 Internet 连接拨打电话。
    • newsstand-content— 该应用程序是一个报亭应用程序,可在后台下载和处理杂志或报纸内容。
    • external-accessory— 该应用程序与需要通过外部附件框架定期提供更新的硬件附件配合使用。
    • bluetooth-central— 该应用程序与需要通过核心蓝牙框架定期提供更新的蓝牙配件配合使用。
    • bluetooth-peripheral——应用通过Core蓝牙框架支持外设模式下的蓝牙通信。

实现此功能时应该如何进行?在iOS中甚至可能吗?

我正在使用 6.0.1 或 6.1 iOS 和 4.6 XCode。

编辑:我首先想到的是报亭内容,但在参考文件的更深处有:

当您的服务器发送推送通知以指示有新问题可用时,系统会检查您的应用程序是否具有带有 newsstand-content 值的 UIBackgroundModes 键。

但我需要 PULL 请求,而不是推送(iPad 必须询问服务器,而不是相反)。

4

2 回答 2

0

你不这样做,这会很快耗尽电池,Apple 不希望你这样做。Apple 经常反对对服务器的 PULL 请求。也没有必要。

正如您所总结的,您的应用程序不属于任何一个背景类别。

您应该只在用户决定打开您的应用程序时更新应用程序数据,只有这样才是更新数据的好时机。

如果确实需要将新数据通知用户,则应实现推送通知。这是通知用户应用程序需要关注的方式。如果通过通知打开您的应用程序,您可以更新数据,甚至向用户展示选择的通知数据。

想象一下,用户打开你的应用程序一次,然后再也不看它,你的应用程序仍然会更新。使用它应该使用的电池和带宽。

于 2013-02-04T12:44:04.123 回答
0

我会经常在应用程序处于活动状态时亲自轮询数据,并在应用程序再次处于活动状态时触发幕后更新。在应用程序处于活动状态时定期进行轮询将使您在应用程序处于活动状态时下载更少的数据。

就个人而言,如果我有一个应用程序我知道会耗尽我的电池,我会立即删除。可能只是我,但我会注意类似的事情。

另一种方法是使用通知提醒用户有新内容,因此当应用程序有新内容时,会发送通知,然后当用户选择此通知时,他们知道可能需要更新内容。

希望这是有道理的,而且很多都是自以为是的

于 2013-02-04T12:49:27.357 回答