美文网首页APNs推送/share分享/author2.0iOS DeveloperOC开发
iOS接收推送后台刷新,后台操作(Background fetc

iOS接收推送后台刷新,后台操作(Background fetc

作者: JohnrayWong | 来源:发表于2017-07-06 16:47 被阅读1945次

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

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

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


49D1423FA3685A821E29F5DA4A39DB83.jpg

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


image.png

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

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

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


image.png

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

completionHandler(UIBackgroundFetchResultNewData);

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

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

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

"content-available":1

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

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

相关文章

网友评论

  • brilliance_Liu:切记一定要加 "content-available":1 这个字段:joy:
  • 黑默丁格丶:不好意思,找到原因了,接口没请求完成我就调了completionHandler(UIBackgroundFetchResultNewData);这个方法,学到了,谢谢
    JohnrayWong::smile: 找到原因就好。。。其实我感觉这个方法也不靠谱,有时后台也触发不了。。。实在是想后台处理推送的话,建议用UNNotificationServiceExtension,这个是专门后台处理推送的,不过是iOS10之后才有的
  • 黑默丁格丶:咨询一下,我这边后台推送唤醒的步骤都好了,但是推送唤醒之后我去做了网络请求,然后网络请求就无法回调,貌似是被挂起了,我把应用切到前台才会收到网络回调,请问你有咩有遇到这种情况?
  • Mr木子李:我现在也遇到同样的需求,我们的需求一模一样的。同样也是极光推送,收到推送后,可是app 处于后台时,却不能运行打印代码。
    Mr木子李:@JohnrayWong 找到问题了,现在苹果手机要在设置里面,设置允许后台应用刷新
    JohnrayWong:会不会是后台的小伙伴没有设置好推送的content-available字段,导致不能后台操作
  • 8ac3b711dcdb:app长期处于后台的情况下,打印机会出现断连的情况
    Gizone_iac:@JohnrayWong 会不会存在App在后台长时间挂起被Kill了呢?
    JohnrayWong:断开连接的情况是你蓝牙设置那里没写好吧。。。我很少出现断开连接的情况。。

本文标题:iOS接收推送后台刷新,后台操作(Background fetc

本文链接:https://www.haomeiwen.com/subject/fquacxtx.html