我正在创建一个iPad应用程序,我需要以下功能:
每当应用程序运行时(例如,在后台或前台), 对某些HTTP(s)进行定期(例如每小时一次)检查 可能会下载并存储一些数据。
这背后的动机是允许应用程序缓存一些数据,以便在需要时可以脱机使用。我知道这可能会缩短电池寿命,但现在这不是问题。
从我在那里阅读Apple iOS Programming Guide: Background Execution and Multitasking,应用程序可以执行后台任务。我无法找到适合我需求的案例:
audio
- 该应用在后台播放用户的可听内容。 (此内容包括使用AirPlay播放音频或视频内容。)location
- 应用会让用户随时了解他们的位置,即使它在后台运行也是如此。voip
- 该应用可让用户使用互联网连接拨打电话。newsstand-content
- 该应用是一个报亭应用,可在后台下载和处理杂志或报纸内容。external-accessory
- 该应用程序适用于需要通过外部附件框架定期提供更新的硬件附件。bluetooth-central
- 该应用与蓝牙配件配合使用,需要通过核心蓝牙框架定期提供更新。bluetooth-peripheral
- 该应用程序通过Core Bluetooth框架支持外设模式下的蓝牙通信。 实施此功能时,我该如何处理?它甚至可以在iOS中使用吗?
我正在使用6.0.1或6.1 iOS和4.6 XCode。
编辑:我想到的第一件事是报亭内容,但在引用的文件中有更深层次的内容:
当您的服务器发送推送通知以指示新问题可用时,系统会检查您的应用是否具有带有报亭内容值的UIBackgroundModes键。
但我需要PULL请求,而不是推送(iPad必须询问服务器,而不是相反)。
答案 0 :(得分:0)
你不这样做,这会让电池快速运转,因为Apple不会让你这么做。 Apple经常反对对服务器的PULL请求。也没有必要。
总结一下,你的应用程序没有一个背景类别。
您应该只在用户决定打开您的应用时更新应用数据,只有这样才能更新数据。
如果确实需要通知用户新数据,则应实施推送通知。这是告知用户应用程序需要注意的方法。如果通过通知打开您的应用程序,您可以更新数据,甚至向用户显示选择的通知数据。
想象一下,用户打开您的应用一次,然后再也不会再看它,您的应用仍然会更新。使用它应该使用的电池和带宽。
答案 1 :(得分:0)
我会亲自在应用程序处于活动状态时轮询数据,并在应用程序再次变为活动状态时在后台触发更新。在活动时定期进行应用轮询会在应用变为活动状态时为您提供较少的数据下载。
就个人而言,如果我有一个我认识的应用程序正在耗尽我的电池,我会立即删除。它可能只是我,但我注意这样的事情。
另一种方法是使用通知提醒用户有新内容,因此当应用程序有新内容时会发送通知,然后当用户选择此通知时,他们知道内容可能需要更新。
希望这是有道理的,而且很多是自以为是的