ios - 安排后台任务

标签 ios swift xcode swift2

我目前正在开发一个警报应用程序,并且正在实现一个智能警报功能,我必须从服务器获取数据以确定是否是唤醒用户的正确时间。

假设情况是:

  • 闹钟设置为上午 06:30

  • 智能闹钟功能设置为 06:30 之前 30 分钟,从 06:00AM 到 06:25AM 期间,将执行 5 次数据获取,间隔 5 分钟

  • 如果,假设,在上午 06:15 服务器返回唤醒用户所需的数据,则所有计划的任务将立即取消
  • 当前时间为晚上 11:30
  • 晚上 11:30 至次日凌晨 06:00 期间不会执行智能闹钟任务

最佳答案

您可以使用推送通知/静默推送通知来完成此任务。 请注意,用户必须选择加入推送通知才能正常工作。 以下是如何实现这一目标的概述

  • 每当用户设置闹钟时,都会通过网络服务将此时间发送到服务器。
  • 服务器将向 APNS 发送推送通知负载,并根据设备 token 重定向到应用程序。
  • 设备收到通知有效负载后,将调用委托(delegate)。您可以处理此负载中与警报相关的数据或调用 Web 服务。
  • 使用 beginBackgroundTaskWithExpirationHandler 执行 5 分钟间隔任务。 beginBackgroundTaskWithExpirationHandler 向操作系统请求额外时间来执行任务。 Apple 没有(故意)指定这个额外时间有多长,但实际上大约是 10 分钟。

请详细阅读以下内容:推送通知、静默推送通知和后台任务处理程序。


后台获取 API:在 iOS 7 中,Apple 添加了对后台获取的支持 - 一种智能的、按应用程序的 crontab,可在机会时唤醒。无法强制后台提取以精确的时间间隔执行。在安排 future 的回调时,iOS 会检查先前后台提取期间使用了多少数据和电池电量。 添加支持涉及编辑应用程序的属性列表(请参阅 UIBackgroundModes)并在应用程序生命周期的早期设置获取间隔

More Details Here

关于ios - 安排后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40371713/

相关文章:

ios - 对每个 Collection View 单元格使用单个 TableView Controller

ios - UILabel.text 与 NSString (iOS) 没有变化

ios - 错误域=NSOSStatusErrorDomain 代码=1954115647 "(null)"

ios - TableViewController 内容不显示内容(reloadData)

iphone - splitView/Objective C - 无法从第二个 tableViewController 更新 detailView

ios - Swift 3.0 调用结果未使用

ios - 成功完成NSBundleResourceRequest之后,NSURL为零

swift - 如何快速将pdf文件上传到电子邮件

swift - 在 Xcode 的 UILabel 上显示 Double 类型的数组

ios - 如何上传这张照片?