因为公司业务关系,希望在iOS在后台的时候能存活去做某些业务操作(其实就是流氓的后台保活=。=)
最早是使用后台定位实现的,信心满满的去上架,结果被苹果爸爸锤的头都破了。连续被拒3次,申请打电话苹果代表也锤了我一顿,申请苹果审核申诉又被锤了一顿。想一想我真是头铁啊emmm
闲话不多说,开始这篇博客的主题
我们的业务其实很简单,就是后台有业务数据来了,客户端哪怕在后台也要处理。
#苹果的保活无非三种方式
###1.后台播放无声音乐
###2.后台定位
###3.推送唤醒
##播放音乐
直接被我pass了,我觉得机审都会把我拒了。。。压根不考虑
##后台定位
正好我们的业务吐过硬扯还能和业务办公场所扯上关系,头铁就是上!通过后台定位让app保活,成功实现了。不过被🍎爸爸锤了。方案二,pass
##推送唤醒
那这时候,就剩这最后一种方式了。
推送分两种,本地推送和远程推送。
####本地推送
本地推送其实类似于一个定时器,到了触发的时候就会触发。一般有很多用来做闹钟或者提示用户签到一类的场景。不过根据我的测试,当应用在后台三分钟后,被挂起以后这个本地推送就不再继续推送了。(也不知道是不是我的测试问题,反正我是没能保活成功。)
####静默推送(不用voip,有的个推运营人员是非技术,回答让你搞voip,别被忽悠了)
静默推送其实是远程推送的一种。在个推中,都属于透传消息(建议看一下这一篇)个推:什么是普通推送?什么是透传消息?
相信在看我这个前老哥们肯定也搜过其他的博客文章
无一例外肯定提到了:
1 | { |
这个东西,不过万一有没搜到的呢emmm我还是再说一遍
content-available属性。0是非静默,1是静默
个推中,无声,sound属性:com.gexin.ios.silence(其他的推送是不是如此我就不太清楚了)
###alert,body切记不要写东西,要传值往最后看
###接下来是傻瓜式教程
###准备工作
####1.推送证书准备好
这部分太多教程了,随便搜一个搞一下就差不多了,不上图了。记得导出的p12要放到个推平台哟。
####2.打开开关
####3.代码部分
就在这个里面了,当被挂起的时候,收到推送,执行这里的代码,唤醒app30s左右的时间,让你尽情的做自己想做的事😝。
我把生命周期写在下面,也好复制粘贴去搜索,我是不是很体贴=。=
1 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler |
接下来怎么处理就是你们自己去做业务处理了~
####如何不要后台配合自行测试?
个推官网是干什么用的啊?
小伙子来来来,又是两篇傻瓜式教程(内容如标题,如果都会了就不用看了~)
个推-开发环境推送测试
个推-iOS特定人群推送
####打开个推官网
然后推就完事了~~~~
这时候你应该能确定是可行的了。
接下来就更简单了,让后台加入联调。
####如果后台是java
简单:
1 | payload.setContentAvailable(1); |
如果你还想传值,有自定义设置key-value方法
1 | payload.addCustomMsg("key","value"); |
就完事了。
祝各位老哥顺利完成需求,不用砍死产品经理~