iOS接收推送后台刷新,后台操作(Background fetch,Remote notifications)

关于iOS推送如何配置,这个大家都不陌生了,但我今天要讲的是收到推送后,即使用户不点击,也要第一时间在程序处理一些逻辑,刷新UI,或者运行一段代码。
需求是这样的:当我应用收到推送时,不管用户有没有点击推送通知,要马上连接打印机,并打印出小票。我在网上查了好多资料,发现都不是很齐全,所以我自己决定写一下。

关于前期推送的配置我就不说了,本文主要讲的是收到推送后的后台操作,关于推送有两种,一种是普通推送(有声音,有提醒),另一种是静默推送(没有文字没有声音)只用于后台刷新用。可以根据需求选择,我用的普通推送。

其实做下来也很简单,只不过要自己踩踩坑。。。


49D1423FA3685A821E29F5DA4A39DB83.jpg

第一步:
你要后台操作,一定要打开后台刷新的开关:


iOS接收推送后台刷新,后台操作(Background fetch,Remote notifications)_第1张图片
image.png

第二步:
我们来到了AppDelegate,关于接受推送的代理方法我就不详细讲了,这里只讲到一个:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:
(void (^)(UIBackgroundFetchResult))completionHandler

这个方法是应用在后台接收到推送的回调,在这方法里可以编写我们的后台操作代码,关于这里的代码我是这样写的:


iOS接收推送后台刷新,后台操作(Background fetch,Remote notifications)_第2张图片
image.png

这里有一个需要注意的是:

completionHandler(UIBackgroundFetchResultNewData);

这个回调是告诉系统,我后台操作完毕了,之后应用又会变成墓碑模式,所以这个回调一定要在所有操作完成后再回调,我一开始没留意,所以代码总是跑一半就不执行了,调试半天才发现是这个问题,这个一定要注意!!!所以我最后在所有延时操作都完毕后再回调,这样就没问题了。

好了,到这里你就以为可以收到推送后台操作了吗?还少了一步,最后一步需要后台协助。

第三步:
一定要叫后台小伙伴在推送的时候加多一个字段:

"content-available":1

加了这个字段才会触发那个后台接受推送的代理方法。

好了,到这里,基本就可以完成接受推送后台操作了,其实也很简单,把我踩到的坑也说了一下。

你可能感兴趣的:(iOS接收推送后台刷新,后台操作(Background fetch,Remote notifications))