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閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容