iOS 和 Android 的后臺(tái)推送原理各是什么?有什么區(qū)別?

iOS 系統(tǒng)的推送(APNS,即 Apple Push Notification Service)

依托一個(gè)或幾個(gè)系統(tǒng)常駐進(jìn)程運(yùn)作,是全局的(接管所有應(yīng)用的消息推送),所以可看作是獨(dú)立于應(yīng)用之外,而且是設(shè)備和蘋果服務(wù)器之間的通訊,而非應(yīng)用的提供商服務(wù)器。你的例子里面,騰訊 QQ 的服務(wù)器(Provider)會(huì)給蘋果公司對(duì)應(yīng)的服務(wù)器(APNs)發(fā)出通知,然后再中轉(zhuǎn)傳送到你的設(shè)備(Devices)之上。當(dāng)你接收到通知,打開應(yīng)用,才開始從騰訊服務(wù)器接收數(shù)據(jù),跟你之前看到通知里內(nèi)容一樣,但卻是經(jīng)由兩個(gè)不同的通道而來。

iOS 推送機(jī)制流程圖

Android 系統(tǒng)推送機(jī)制

Android就不同,更像是傳統(tǒng)桌面電腦系統(tǒng)做法。每個(gè)需要后臺(tái)推送的應(yīng)用有各自的單獨(dú)后臺(tái)進(jìn)程,才能和各自的服務(wù)器通訊,交換數(shù)據(jù)。另外其實(shí) Android 也有類似 APNS 的 GCM(Google Cloud Message),屬于開發(fā)者可選,非強(qiáng)制。


Android 推送機(jī)制流程圖

Android 上有 GCM (Google Cloud Messaging)

iOS 上有 APNs(Apple Push Notification service)

Windows Phone 上有 MPNs(Microsoft Push Notification service)。

但是由于Windows Phone的市場(chǎng)占比不高,所以一般也就沒有人會(huì)專門做wp系統(tǒng)的推送。至于Android的GCM在國內(nèi)基本上是不可用的。原因主要有以下兩點(diǎn):

一、國內(nèi)大部分Android手機(jī)都不帶Google服務(wù),也就用不了GCM,這是主要的問題。

二、在國內(nèi)Google的服務(wù)一般都不太穩(wěn)定,原因你懂的。

所以現(xiàn)在在做消息推送的時(shí)候Android平臺(tái)采用服務(wù)器與設(shè)備直接拉一條長(zhǎng)連接的方式實(shí)現(xiàn)功能,而iOS平臺(tái)則采用蘋果自己的APNs服務(wù)。

在分別說這兩個(gè)平臺(tái)推送原理的時(shí)候,先回答一下題主關(guān)于服務(wù)器如何先找到設(shè)備、再找到app的問題。每一個(gè)設(shè)備都有一個(gè)自己的設(shè)備號(hào),而設(shè)備中的app又都有一個(gè)唯一的包名。所以服務(wù)器只需要找到設(shè)備號(hào)與包名就可以定位到某個(gè)設(shè)備的某個(gè)應(yīng)用,而這設(shè)備號(hào)與包名會(huì)一起構(gòu)成一個(gè)標(biāo)識(shí)符,叫做device_token,因此問題就簡(jiǎn)化為把device_token與消息內(nèi)容等信息交給服務(wù)器,服務(wù)器把內(nèi)容發(fā)到唯一的device_token上。這就好像你在上海要通過順豐寄送一個(gè)快件兒給某某小區(qū)的某某房間,那么快件兒首先會(huì)郵遞到順豐公司在北京的總站點(diǎn),之后再根據(jù)小區(qū)的地址投遞/路由到某某房間,這樣一個(gè)寄件過程就算完成了。在這里,你要寄送的快件兒就是你要發(fā)的“消息”,送達(dá)房間相當(dāng)于最終“接收消息的App”,順豐公司在北京的總站點(diǎn)相當(dāng)于這里提到的“設(shè)備”,送達(dá)房間的房間號(hào)就相當(dāng)于這個(gè)環(huán)節(jié)里面提到的“包名”。

首先是IOS平臺(tái),IOS的推送是通過蘋果自己的APNs服務(wù)進(jìn)行的,用戶需要將device_token以及消息內(nèi)容等推送信息交給APNs服務(wù)器,剩下的均由蘋果自己來完成。

iOS應(yīng)用的推送大部分情況下都要依賴蘋果生態(tài)提供的APNs(Apple Push Notification Service)服務(wù)。


iOS推送推送流程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容