iOS的消息推送機制到底是怎樣的?

iOS不是不留後台嘛,為什麼還可以及時推送消息,為什麼安卓關閉軟體之後就不推送消息了,為什麼安卓不能像iOS那樣有及時有效的推送機制。


iOS 的推送是統一掛在蘋果伺服器上的,app安裝的時候設備會把token分享給app,app的伺服器根據這個token發消息給蘋果,蘋果根據token發給設備

設備和蘋果的連接由系統掛在流量上的tcp長連接實現,裝再多app也只需要掛這麼一個連接就能保證推送,不像國產安卓app每個都要自己掛後台並且保持連接

其實安卓也是有系統級的推送服務的,這個服務因為由一個不存在的服務商提供,所以沒法用,你說怪誰?

此外說到本地通知,iOS也有方案,app可以向系統請求註冊本地通知,到時間了由系統自己發出來,也不需要app掛後台


蘋果:軟體需要推送通知??將推送發到Apple Push Notification Service??APNs再進一步轉發給用戶。

如上,所以iOS的推送不需要啥後台,YouTube Twitter這類不存在的404網站照樣能在沒破解404的情況下推送通知過來,就因為走的APNs。

安卓:軟體需要推送通知??將推送發到Google Message Service或Mi Push等推送伺服器??伺服器轉發給用戶

但Android的問題往往出在第二步,因為:

要不那個app沒有內置Mi Push、GMS等服務的接收器SDK

要不那個app支持GMS但你處於訪問不存在的網站出現404狀態

要不那個app支持Mi Push但你的系統是AOSP而不是MIUI等等...

第二步一出問題,那就變成:

軟體需要推送通知??保留後台,後台Service里有一個msfservice或notification service這種特地用來接收推送通知的伺服器??通知成功推送到用戶手中。

也就是因為Android生態整體上的一些混亂和不規整,再加上Google不在大陸,Android在這方面的問題變得很明顯。


蘋果的消息機制通俗的來講就是這樣:

APP的廠商的消息發給蘋果伺服器,蘋果伺服器發給制定iOS設備

所以iOS也會為信息推送留進程,但是只有iOS里的一個系統進程,APP不用留,你收到的通知和APP沒有半分錢關係,這就是為什麼iOS版的微信和QQ每次進入都有一段時間要收取消息。

Android是這樣:

從APP伺服器直接發給APP,APP用申請的彈窗許可權給你彈出來

所以每一個應用都得有個進程才能接收通知

為啥會這樣呢?

其實Android也有一套系統級信息推送服務

然而伺服器是Google的,後面不用我說了吧


眾人:我們要通知!

安卓APP :嘿嘿嘿我偷偷在後台掛起推送通知,你咬我呀~

蘋果伺服器:夠了!你們別操心了,我來統一給你們推送!

蘋果鬧鐘等APP :老大,我的通知不聯網的時候也要正常推送怎麼辦啊(」゜ロ゜)」

蘋果伺服器:夠了!我又不傻!這種你們在本地推送就可以了!

蘋果鬧鐘等APP:那我們沒有後台呀~

蘋果系統:夠了!我又不是某些人!(安卓系統:嗯哼?)在我的世界裡,你們不需要後台!

深度定製安卓系統:我我我。。。我也有統一推送!

觀賞了評論們的答主:夠了!我知道了!


為什麼大家談論IOS推送機制的時候都要順便黑一下安卓和Android呢。更過分的是話題標籤都被人加了Android,各位看官,如果有人要黑請先分清你要黑的是安卓還是Android。

IOS/Android/安卓,這其實是三個不同的系統好嗎。安卓可以盡情黑,畢竟是畸形網路內的畸形生態,請不要黑Android好嘛?


蘋果

來源 http://www.cocoachina.com/cms/wap.php?action=articleid=16013

安卓 自己管

如果能用下面這個更好

https://firebase.google.com/docs/cloud-messaging/

上面這個網站?不存在的!

Alphabet公司: 怪我嘍?


安卓國外有gcm國內被牆。國內各廠商有自家的推送例如小米推送,魅族推送,

但是!!!

最需要後台運行的微信QQ沒有這些國內推送,其他軟體我又不需要推送,所以國內的推送很尷尬


首先,iOS系統裡面的通知(Notification)和應用是完全獨立開的,是系統負責調配的,所以才可以殺掉應用但是還能收到通知。

如果問再細一點就大概是這張蘋果爸爸給的圖了:

以我乎為例,這個圖ProviderA就是我乎的推送伺服器,ProviderB是別的什麼應用的,所有的想要發送通知的Provider都要先把通知發送給蘋果推送服務(APNs - Apple Push Notification Service ),然後蘋果爸爸再給我們的iPhone iPad iMac iBoom等等下發通知,我們也就收到了通知了~

什麼,你還想知道蘋果是怎麼找到我的iBoom的?因為蘋果會給每一台聯網Apple設備建立一個「長連接」,find my iPhone 等功能也是因為這個長連接實現的。

話說,如果真的論及時有效的話,Android的那些直接推送會快一點的!

暫時就想到這裡。


各位大神也都寫得差不多了,差別就是Google的GCM在國內無法使用,導致各家廠商的程序員需要各顯神通自己寫推送,經常被殺所以也就收不到推送。iOS的推送則沒有這個問題。推送機制:App伺服器-&>APNS-&>iOS-&>App


來個簡潔的回答:

蘋果——所有應用都告訴我,我來給你們推送通知,這也就導致你手機有Twitter、Gmail這類軟體不掛VPN也能收到通知。

安卓——由於Geogle的某些原因,導致應用們自己推送通知,想什麼時候想怎麼推送都行,不掛VPN收不到Gmail、Twitter的消息。


這是為什麼iPhone能收到被牆app的推送了?(?)?


基於蘋果公司的推送,跟軟體商無關,軟體商只負責把消息給伺服器,然後伺服器推送

我的臉書和推特在不翻牆的情況下正常推送,但應用無法載入任何信息。


2017.5.5修改

需要修改一下。吹谷爸爸也是不行的。谷入華推廣使用gcm也是沒用的。谷歌並沒有對app開發者進行強制限制。Facebook就是這個例子。不使用gcm。常駐內存自啟軟體。關掉Facebook進程,你就接收不到消息推送。

----------------------------------------------------------------------

ios的推送其實和google的push是一樣的。都需要通過蘋果或者谷歌的伺服器進行統一push。但是呢谷歌進不了國內,因此你不掛vpn是用不了谷歌的gcm的推送的。國內的rom就各自為政。小米的mipush啊,企鵝自己的push。 而且國內的安卓軟體都不願意讓自己的數據通過別人的伺服器,就想到了常駐後台。這就是國內安卓生態亂。


糾正一下,安卓是有推送機制的。只不過國內屏蔽了服務,加上流氓廠商要控制和爭奪流量入口強行不按安卓開發標準來,造成強行長駐後台,代表性的是BAT企業的應用,記得瘋狂的愛奇藝,根本後台就關不了。良心就比如網易雲音樂,只要退出了,就真的退出了後台。

以前沒有推送機制是因為沒有強力的廠商號召,建立一套推送機制,現在小米已經搞了,很多廠商也都響應了,mipush推送。

對於蘋果推送還是很佩服的,通俗的說一家飼料公司要進原料,集團採購還是地采擺在面前。地采就是國內大部分安卓的做法,軟硬體廠商勾結,軟體龐大耗費資源,硬體廠商不斷提高配置賣貨(原料驗收員跟供應商勾結,不合格的能入庫),集團採購是蘋果推送機制(集團有自己的採購部,下面各分公司提交需求,當地原料驗收員提供接收意見,不接觸原料廠商)

華為好像也有推送機制,具體不清楚,我以前沒錢買華為,現在是沒錢買華為。


不知道,能不能讓我 QQ 一直推送啊,有時玩手機QQ 不推送是什麼鬼。蘋果


安卓上其實也有統一推送GCM,在國內也沒有被牆...但是國內軟體很少有用GCM服務的


簡而言之:iOS有蘋果提供的獨立推送服務,不依賴後台進程。


都在說蘋果推送好,我來說點政治不正確的

在網路連接不穩定的時候。(不要問我為什麼不穩定,就當是我們山區網差),你可以知道微信來了消息,但是你特么就是不知道來了什麼(通知不顯示消息內容)!!!!!然後那種抓狂的心情。。。。真是。。。。


推薦閱讀:

droidBooster 為什麼能夠十倍加速 Android 設備的性能?
HTML5 移動開發未來可否取代 iOS 和安卓?
酷安的大V有什麼用?
如何實現iOS和安卓跨平台的開發?
既然 Android 免費,那 Google 是靠什麼賺錢的?

TAG:iPhone | iOS | 手機 | Android |