iOS Silent Remote Notification一步一步实现(推送背景为个推)

总所周知,苹果在iOS7.0后在后台任务上增加了如下新特性:

后台获取(Background Fetch)

推送唤醒(静默推送,Silent Remote Notifications)

后台传输(Background Transfer Service)

由于最近项目需求上的变更,需要应用在退至后台时在某一个时间点唤醒设备更新一下UI,在用户下次点击应用图标进入应用的时候就能看到已经更新好的UI了。所以,研究了一下静默推送,下面我给小伙伴们一一呈现我所实现的整个过程。

首先,在官方文档中找到下面一段关于静默推送的描述:

Configuring a Silent Notification

The aps dictionary can also contain the content-available property. The content-available property with a value of 1 lets the remote notification act as a silent notification. When a silent notification arrives, iOS wakes up your app in the background so that you can get new data from your server or do background information processing. Users aren’t told about the new or changed information that results from a silent notification, but they can find out about it the next time they open your app.

For a silent notification, take care to ensure there is no alert, sound, or badge payload in the aps dictionary. If you don’t follow this guidance, the incorrectly-configured notification might be throttled and not delivered to the app in the background, and instead of being silent is displayed to the user.

说的很明白,要想实现静默推送,首先要在aps这个字典里增加content-available这个属性,并且这个属性的值要设置成1。之前在网上也查了一些资料,都千篇一律的贴着下面这张图:

大部分关于设置静默推送后台推送格式的贴图

可是,参照这张图的意思是,alert里面也是可以有内容的,可是事实上官方文档里的第二段话被好多人忽略了:take care to ensure there is no alert, sound, or badge payload in the aps dictionary。好吧,看来alert里面必须为空才行。本人亲测,alert里面有内容的话就是普通推送,是不能在当应用在后台挂起时唤醒应用的。OK,alert字段确认了,是必须为空的,那么sound呢?由于项目的推送SDK用的是个推,本人跟个推的技术支持交流了一下让服务端在设置sound的时候设成空串:

服务端推送格式

结果,静默推送虽然收到了,但是它是有声音的静默推送,后来个推的技术支持更正了传入的字段:

服务端推送格式

好了,静默推送收到了,整个世界也都清净了。

OK,到这儿,我们可以基本确认静默推送在后台的格式:(a) 增加content-available字段,并设成1 (b) alert字段必须为空,否则收到的就不是静默推送 (c)sound字段设不设不影响静默推送的接收,只不过会出现符不符合需求的问题。对了,还有一个badge属性,设置的话也不影响静默推送的接收,但是和sound一样,看需求是怎样的了。

最后,服务端关于静默推送就设置成了这样:

服务端静默推送代码

而前端收到静默推送时的log是这样的:

静默推送log

最后,总结一下,静默推送只能在应用在前台和应用在后台挂起时收到,也就是说,如果应用未启动或进程被杀掉,静默推送是唤醒不了设备的。应用在后台挂起时,收到静默通知时在appdelegate里实现-application:didReceiveRemoteNotification:fetchCompletionHandle:这个方法,在这个方法里执行想要在系统被唤醒时想做的比如更新UI,请求网络等想做的事。当应用在前台时,网上查资料说还是在这个方法里执行,可是我打断点却不走这个方法,不知道是不是我们的SDK用的是个推的原因,反而会走个推的接收payload的那个方法。

最后,提醒一下小伙伴们,实现静默推送别忘了Xcode这边还要勾选remote notifications选项:

Xcode里capabilities设置

在简书的处女作就是这篇了,感谢小伙伴们捧场,荆轲刺秦王!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容