iOS Remote Notification遠(yuǎn)程消息推送處理
遠(yuǎn)程消息推送處理場景有三種:分別是app還沒有運(yùn)行、app在前臺運(yùn)行以及app在后臺運(yùn)行,下面介紹相關(guān)流程及三種場景下處理步驟
1.流程
(1)注冊通知
首先是在注冊遠(yuǎn)程消息推送,需要注意的是iOS8及以后的系統(tǒng)中注冊方法有所改變(同時(shí)證書設(shè)置以及push權(quán)限也需要開啟)。這一步的目的是,允許app接收遠(yuǎn)程消息推送。


(2)綁定deviceToken
deviceToken相當(dāng)于設(shè)備的一個標(biāo)識,服務(wù)器根據(jù)這個標(biāo)識來進(jìn)行消息推送。
①當(dāng)用戶同意app接收遠(yuǎn)程消息推送后,手機(jī)會向APNs發(fā)起一個請求去獲取deviceToken;
②APNs收到請求,根據(jù)其相應(yīng)流程及算法發(fā)送對應(yīng)的deviceToken給手機(jī);
③手機(jī)再將deviceToken傳遞給app;
④app再將deviceToken發(fā)送到后臺服務(wù)器進(jìn)行保存。


后臺服務(wù)器以后就是根據(jù)deviceToken發(fā)送推送消息給APNs,APNs再根據(jù)deviceToken將消息推送到對應(yīng)設(shè)備,設(shè)備再喚起app,顯示推送而來的消息。

(3)針對遠(yuǎn)程推送消息進(jìn)行處理
遠(yuǎn)程推送消息發(fā)送過來時(shí),點(diǎn)開消息常常會有一些針對性處理或流程,最常見的就是跳轉(zhuǎn)頁面等,這里不再展開,下面將介紹不同場景下接收到推送后的處理步驟。
2.不同場景下推送消息的流程
(1)app在前臺運(yùn)行時(shí)收到推送
會調(diào)用“didReceiveRemoteNotification”方法,推送的數(shù)據(jù)在userInfo里,針對處理即可。

(2)app退出到后臺狀態(tài)時(shí)收到推送
屏幕上會出現(xiàn)通知提醒,如果點(diǎn)開消息進(jìn)入app,app運(yùn)行到前臺時(shí)會調(diào)用“didReceiveRemoteNotification”方法,這也就是之前為什么要區(qū)分一下applicationState的原因,因?yàn)槎叨际峭ㄟ^這一步來處理。
(3)app處于關(guān)閉退出狀態(tài)時(shí)收到推送
同樣屏幕上出現(xiàn)通知提醒,點(diǎn)開消息進(jìn)入app,啟動時(shí)“didFinishLaunchingWithOptions”方法里的launchOptions對應(yīng)UIApplicationLaunchOptionsRemoteNotificationKey部分內(nèi)容不再為空,含有的即是推送內(nèi)容,針對處理即可。

3.其它
(1)網(wǎng)絡(luò)狀況不佳時(shí)遠(yuǎn)程消息推送情況
如果手機(jī)不在網(wǎng)的時(shí)候,APNs會有一個QoS的東西把消息保存很短的時(shí)間,等手機(jī)在網(wǎng)時(shí)再推送過來,當(dāng)然離線時(shí)間久了,消息也就收不到了,但在實(shí)際中發(fā)現(xiàn)貌似網(wǎng)絡(luò)不佳的時(shí)候一般就收不到了。
如果手機(jī)離線時(shí),服務(wù)器推送了多條消息,即時(shí)上線了收到消息,也只會收到最新的一條
(2)推送的內(nèi)容格式
推送的內(nèi)容都有固定格式和長度,包括title(iOS8.2后增加的)、body、sound等,如果本地沒有設(shè)置對應(yīng)的聲音文件,sound的值為default,收到推送的時(shí)候響起的是默認(rèn)的提示音,并且推送消息的長度限制為256個字節(jié)(iOS8中這一限制放大到2kb),具體參考Local and Remote Notification Programming Guide中The Notification Payload這一節(jié)。
本文已被整理到了《iOS推送教程》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- iOS如何獲取手機(jī)的Mac地址
- iOS、Mac OS X系統(tǒng)中編程實(shí)現(xiàn)漢字轉(zhuǎn)拼音的方法(超級簡單)
- WMI獲取硬件信息封裝函數(shù)方法(聯(lián)想臺式機(jī)出廠編號 CPUID BIOS序列號 硬盤信息 顯卡信息 MAC地址)
- Nagios遠(yuǎn)程監(jiān)控安裝與配置詳解圖文
- iOS10 適配遠(yuǎn)程推送功能實(shí)現(xiàn)代碼
- iOS實(shí)現(xiàn)遠(yuǎn)程推送原理及過程
- iOS實(shí)現(xiàn)播放遠(yuǎn)程網(wǎng)絡(luò)音樂的核心技術(shù)點(diǎn)總結(jié)
- iOS10最新實(shí)現(xiàn)遠(yuǎn)程通知的開發(fā)教程詳解
- iOS開發(fā)之運(yùn)動事件和遠(yuǎn)程控制
- iOS-Mac遠(yuǎn)程連接控制Window
相關(guān)文章
iOS App項(xiàng)目中引入SQLite數(shù)據(jù)庫的教程
SQLite是一個極輕的嵌入式數(shù)據(jù)庫,在應(yīng)用程序中捆綁使用可以更方便地幫助操控關(guān)系型數(shù)據(jù),這里我們就來看一下iOS App項(xiàng)目中引入SQLite數(shù)據(jù)庫的教程2016-06-06
詳解使用Xcode進(jìn)行iOS設(shè)備無線調(diào)試
這篇文章主要介紹了詳解使用Xcode進(jìn)行iOS設(shè)備無線調(diào)試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
IOS 貝塞爾曲線(UIBezierPath)屬性、方法整理
這篇文章主要介紹了IOS 貝塞爾曲線(UIBezierPath)屬性、方法的相關(guān)資料,這里整理了貝塞爾 曲線的基礎(chǔ)資料,對屬性及相應(yīng)的方法一一做了詳解,需要的朋友可以參考下2016-11-11
iOS無障礙適配西瓜視頻Voice?Over實(shí)踐示例
本文從研發(fā)的視角出發(fā),講述了如何使用?Voice?Over、如何適配?Voice?Over?以及適配過程中如果遇到問題應(yīng)該如何解決。希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
詳解iOS 用于解決循環(huán)引用的block timer
這篇文章主要介紹了詳解iOS 用于解決循環(huán)引用的block timer,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
IOS 調(diào)整內(nèi)存中的圖片大小實(shí)例詳解
這篇文章主要介紹了IOS 調(diào)整內(nèi)存中的圖片大小實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
IOS 遠(yuǎn)程通知兼容(IOS7,IOS8)實(shí)例詳解
這篇文章主要介紹了IOS 遠(yuǎn)程通知兼容(IOS7,IOS8)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
理解iOS多線程應(yīng)用的開發(fā)以及線程的創(chuàng)建方法
這篇文章主要介紹了理解iOS多線程應(yīng)用的開發(fā)以及線程的創(chuàng)建方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-11-11
iOS統(tǒng)計(jì)工程里所有大于2000行代碼的文件方法
下面小編就為大家分享一篇iOS統(tǒng)計(jì)工程里所有大于2000行代碼的文件方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01

