iOS APNs: Background Fetch

2018-02-09 12:43:25来源:http://www.veryitman.com/2018/02/08/iOS-APNs-Background-Fetc作者:veryitman人点击

分享

在前面的几篇文章中, 给大家介绍了跟推送相关的内容.


今天跟大家聊一聊 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 中设置.


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 设置 fetch 时间间隔
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
}

UIApplicationBackgroundFetchIntervalMinimum 是系统自定义的时间. 如果不设置, 默认是 UIApplicationBackgroundFetchIntervalNever , 这样就不会让 Background Fetch 生效了.


可以查看对 UIApplicationBackgroundFetchIntervalNever 的官方解释.


UIApplicationBackgroundFetchIntervalNever
A fetch interval large enough to prevent fetch operations from occurring.

当然, 你也可以设置自己定义的时间的间隔, 但是基本没有什么作用, 因为这个时间间隔完全由系统来决定, 系统会根据你的电量以及使用频率来决定.


所以, 可以理解为 setMinimumBackgroundFetchInterval 方法只是开启了 Background Fetch 功能.


3.开启了系统后台更新功能

在 iOS 系统中, 设置/通用/后台应用刷新中一定要开启对应 APP 的功能.


判断是否已经开启该功能的示例代码:


if ([[UIApplication sharedApplication] backgroundRefreshStatus] != UIBackgroundRefreshStatusAvailable) {
//不可用提示用户
}

处理回调

在实际的应用环中, Background Fetch 事件是由系统管理的,我们开发者是无法预先知道 Fetch 事件达到的时机的.


网上很多说可以使用 Xcode 模拟这个事件, 估计也是之前的系统和 Xcode 版本, 现在的 Xcode9 貌似不行了.


但是, 你的手机在后台等几分钟, 有时候会被系统触发该事件, 触发后, 对应的系统回调(在 AppDelegate 中)会被调用.


// Background fetch 回调
- (void)application:(UIApplication *)application
performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
MZLOG(@"AppDelegate. Background fetch.");
//可进行对应的耗时操作, 如下载等.
completionHandler(UIBackgroundFetchResultNoData);
}

Background Fetch 会为我们的 App 争取更多的后台时间, 但是一般是几十秒左右, 不会太多. 所以, 不要在回调中做太多耗时的操作.


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台