在iOS中重复的后台任务

时间:2013-02-14 07:22:17

标签: c# ios objective-c xamarin.ios background-process

我想制作一个应用程序,定期,偶尔和自动从用户定义的网站列表中下载一些数据,然后它可以根据该数据分析和显示历史图表和其他报告。

如果我在Windows中执行此操作,我将使用系统任务计划程序;如果我在Unix,我会使用cron;如果我在Android,我会使用服务。我想知道如何在iOS中做到这一点。

就我的研究而言,这在iOS中并不是微不足道的,因为没有公共界面可以做到这一点。但是,有一些解决方法可以完成这项工作:

  • 当应用程序唤醒时拉取历史数据:不可能,因为我不是数据的提供者,我支持的大多数数据提供者都不会存储或提供对历史数据的访问。

  • 自己下载数据并让客户在唤醒时拉出数据:不可取。这不仅需要额外的昂贵基础设施(这意味着向我的用户收取我打算成为免费应用程序的费用),而且还有一些内容提供商需要登录凭据。我宁愿不要求我的用户'登录信息以访问他们可以获得的信息。

  • 如果时间戳已过期,当用户将应用置于前台时,保存上次更新和下载数据的时间戳:这不符合我的目的,因为数据可能(并且预计会)迅速改变时间。此应用程序的全部目的是定期自动下载此数据,以便用户再次打开应用程序后可以使用所有历史数据。

  • 使用本地通知:它与以前几乎完全相同。它需要用户交互来启动应用程序,即使用户没有使用设备,应用程序的整个点也是获取此数据。

  • 使用推送通知:由于这些只是需要用户互动来唤醒应用的通知,因此无法使用它们与本地通知相同的原因。应用程序唤醒后,您似乎可以处理所有待处理的推送通知,但我知道您无法为这些通知定义自定义字段。

  • 使用后台任务:从技术上讲,这似乎是所有选项中最有前途的,但这仅适用于非常特定类型的应用程序。我想这是一个"报亭应用程序"是我能得到的最接近的,它实际上是指在后台下载数据。但是,正如其命名的那样,它意味着下载"杂志或报纸问题"。我是否想要做的事情可归类为完全取决于应用评论员,而​​我宁愿不制作可能因技术性而被拒绝的应用。

所以,我的问题是:有没有其他方法可以做到这一点,我不知道?是否有任何应用已经做了类似的事情?

3 个答案:

答案 0 :(得分:1)

您的评估是正确的。您唯一的两个选择是托管您自己的服务,定期下载数据(您的第二个项目符号点)或使用Newstand。对于Newstand,您的应用可能符合定义;它可能只取决于你如何表征应用程序。

答案 1 :(得分:1)

iOS中唯一的选择就是使用服务器端基础架构。不要害怕向用户收费;如果你提供的服务真的很有用,人们会付钱。我确实得到了很多额外的工作等等,但这确实是唯一的方法。

报亭应用程序每天只能下载一次数据,并且仍需要服务器端推送通知才能开始下载,因此您必须安装一些基础架构。更重要的是,苹果实际上对报刊亭非常严格;我已经过了几次:你不一定要成为杂志/期刊,但你的应用程序应主要用于内容发布。

答案 2 :(得分:1)

我认为您还有一个选项,即基于位置的更新,但这取决于您的用户定期移动。

参见例如http://blog.instapaper.com/post/24293729146http://blog.news.me/post/21643399885/introducing-paper-boy-automatically-download-your-news