遠(yuǎn)程消息推送處理場(chǎng)景有三種:分別是app還沒(méi)有運(yùn)行、app在前臺(tái)運(yùn)行以及app在后臺(tái)運(yùn)行,下面介紹相關(guān)流程及三種場(chǎng)景下處理步驟
1.流程
(1)注冊(cè)通知
首先是在注冊(cè)遠(yuǎn)程消息推送,需要注意的是ios8及以后的系統(tǒng)中注冊(cè)方法有所改變(同時(shí)證書(shū)設(shè)置以及push權(quán)限也需要開(kāi)啟)。這一步的目的是,允許app接收遠(yuǎn)程消息推送。
(2)綁定devicetoken
devicetoken相當(dāng)于設(shè)備的一個(gè)標(biāo)識(shí),服務(wù)器根據(jù)這個(gè)標(biāo)識(shí)來(lái)進(jìn)行消息推送。
①當(dāng)用戶同意app接收遠(yuǎn)程消息推送后,手機(jī)會(huì)向apns發(fā)起一個(gè)請(qǐng)求去獲取devicetoken;
②apns收到請(qǐng)求,根據(jù)其相應(yīng)流程及算法發(fā)送對(duì)應(yīng)的devicetoken給手機(jī);
③手機(jī)再將devicetoken傳遞給app;
④app再將devicetoken發(fā)送到后臺(tái)服務(wù)器進(jìn)行保存。
后臺(tái)服務(wù)器以后就是根據(jù)devicetoken發(fā)送推送消息給apns,apns再根據(jù)devicetoken將消息推送到對(duì)應(yīng)設(shè)備,設(shè)備再喚起app,顯示推送而來(lái)的消息。
(3)針對(duì)遠(yuǎn)程推送消息進(jìn)行處理
遠(yuǎn)程推送消息發(fā)送過(guò)來(lái)時(shí),點(diǎn)開(kāi)消息常常會(huì)有一些針對(duì)性處理或流程,最常見(jiàn)的就是跳轉(zhuǎn)頁(yè)面等,這里不再展開(kāi),下面將介紹不同場(chǎng)景下接收到推送后的處理步驟。
2.不同場(chǎng)景下推送消息的流程
(1)app在前臺(tái)運(yùn)行時(shí)收到推送
會(huì)調(diào)用“didreceiveremotenotification”方法,推送的數(shù)據(jù)在userinfo里,針對(duì)處理即可。
(2)app退出到后臺(tái)狀態(tài)時(shí)收到推送
屏幕上會(huì)出現(xiàn)通知提醒,如果點(diǎn)開(kāi)消息進(jìn)入app,app運(yùn)行到前臺(tái)時(shí)會(huì)調(diào)用“didreceiveremotenotification”方法,這也就是之前為什么要區(qū)分一下applicationstate的原因,因?yàn)槎叨际峭ㄟ^(guò)這一步來(lái)處理。
(3)app處于關(guān)閉退出狀態(tài)時(shí)收到推送
同樣屏幕上出現(xiàn)通知提醒,點(diǎn)開(kāi)消息進(jìn)入app,啟動(dòng)時(shí)“didfinishlaunchingwithoptions”方法里的launchoptions對(duì)應(yīng)uiapplicationlaunchoptionsremotenotificationkey部分內(nèi)容不再為空,含有的即是推送內(nèi)容,針對(duì)處理即可。
3.其它
(1)網(wǎng)絡(luò)狀況不佳時(shí)遠(yuǎn)程消息推送情況
如果手機(jī)不在網(wǎng)的時(shí)候,apns會(huì)有一個(gè)qos的東西把消息保存很短的時(shí)間,等手機(jī)在網(wǎng)時(shí)再推送過(guò)來(lái),當(dāng)然離線時(shí)間久了,消息也就收不到了,但在實(shí)際中發(fā)現(xiàn)貌似網(wǎng)絡(luò)不佳的時(shí)候一般就收不到了。
如果手機(jī)離線時(shí),服務(wù)器推送了多條消息,即時(shí)上線了收到消息,也只會(huì)收到最新的一條
(2)推送的內(nèi)容格式
推送的內(nèi)容都有固定格式和長(zhǎng)度,包括title(ios8.2后增加的)、body、sound等,如果本地沒(méi)有設(shè)置對(duì)應(yīng)的聲音文件,sound的值為default,收到推送的時(shí)候響起的是默認(rèn)的提示音,并且推送消息的長(zhǎng)度限制為256個(gè)字節(jié)(ios8中這一限制放大到2kb),具體參考local and remote notification programming guide中the notification payload這一節(jié)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。