iOS APNs: Background Fetch
在前面的几篇文章中, 给大家介绍了跟推送相关的内容.
今天跟大家聊一聊 iOS7 新加入的 Background Fetch
功能.
该系列博客:
iOS APNs: 远程推送
iOS APNs: 本地推送
iOS APNs: 处理数据
iOS APNs: 静默推送
iOS APNs: Background Fetch(本篇)
简介
从 Background Fetch
字面上来看, 大致意思是可在后台获取数据.
在 iOS7 中,Apple 为开发者提供了可以在后台更新应用程序界面和内容的 API, 即 Background Fetch
.
该特性允许开发者在一个周期间隔后进行特定的动作,如获取网络内容, 更新 UI 操作等.
同时在 iOS7 中, 也加入了另一个特性, 就是博文 iOS APNs: 静默推送 里面说的静默推送.
这些都是对 iOS 后台多任务的补充和完善, Apple 一直在优化系统从而增强用户体验.
开启 Background Fetch
1.需要 APP 支持
如下图所示, 勾选即可.
2.设置 fetch 时间间隔
在 AppDelegate 中设置.
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
UIApplicationBackgroundFetchIntervalMinimum
是系统自定义的时间. 如果不设置, 默认是 UIApplicationBackgroundFetchIntervalNever
, 这样就不会让 Background Fetch
生效了.
可以查看对 UIApplicationBackgroundFetchIntervalNever 的官方解释.
1 | UIApplicationBackgroundFetchIntervalNever |
当然, 你也可以设置自己定义的时间的间隔, 但是基本没有什么作用, 因为这个时间间隔完全由系统来决定, 系统会根据你的电量以及使用频率来决定.
所以, 可以理解为 setMinimumBackgroundFetchInterval
方法只是开启了 Background Fetch
功能.
3.开启了系统后台更新功能
在 iOS 系统中, 设置/通用/后台应用刷新中一定要开启对应 APP 的功能.
判断是否已经开启该功能的示例代码:
1 | if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable) { |
处理回调
在实际的应用环中,Background Fetch
事件是由系统管理的,我们开发者是无法预先知道 Fetch 事件达到的时机的.
网上很多说可以使用 Xcode 模拟这个事件, 估计也是之前的系统和 Xcode 版本, 现在的 Xcode9 貌似不行了.
但是, 你的手机在后台等几分钟, 有时候会被系统触发该事件, 触发后, 对应的系统回调(在 AppDelegate 中)会被调用.
1 | // Background fetch 回调 |
Background Fetch
会为我们的 App 争取更多的后台时间, 但是一般是几十秒左右, 不会太多. 所以, 不要在回调中做太多耗时的操作.