自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談iPhone 中Push 功能原理 推送通知

移動開發(fā) iOS
本文介紹的是淺談iPhone 中Push 功能原理 推送通知,如果不了解PUSH的功能,本文有參考圖,卡哇伊供你有利學習,先來看內(nèi)容。

iPhone Push 功能原理 推送通知是本文要介紹的內(nèi)容,主要講述了PUSH的一些功能,具體內(nèi)容先來看本文講述。

Push原理

(以下絕大多數(shù)內(nèi)容參考自、圖片來自iPhone OS Reference Library)

機制簡介

Push 的工作機制可以簡單的概括為下圖

淺談iPhone 中Push 功能原理 推送通知

圖中,

Provider是指某個iPhone軟件的Push服務(wù)器。

APNS 是Apple Push Notification Service(Apple Push服務(wù)器)的縮寫,下文統(tǒng)一使用該縮寫。

因 此,整個過程可以分為三個階段,下面用大家常用的聊天客戶端BeejiveIM來說明。(BeejiveIM是一款支持多賬戶登錄的支持Push的 iPhone聊天客戶端,支持MSN、Google Talk等)

此時Provider為BeejiveIM服務(wù)器,我們在 BeejiveIM上登陸MSN,其實軟件是先把登錄信息發(fā)送到BeejiveIM服務(wù)器,再通過其服務(wù)器來登陸MSN。因此,當我關(guān) 閉了BeejiveIM,BeejiveIM服務(wù)器會繼續(xù)為我登陸MSN,此時如果有人對我的MSN賬戶發(fā)送了消息,那么就會觸發(fā)Push。此時:

***階段:BeejiveIM服務(wù)器把要發(fā)送的消息、目的iPhone的標識打包,發(fā)給APNS。

第二階段:APNS在自身的已注冊Push服務(wù) 的iPhone列表中,查找有相應(yīng)標識的iPhone,并把消息發(fā)到iPhone。

第三階段:iPhone把發(fā)來的消息傳遞給相應(yīng)的應(yīng)用程序, 并且按照設(shè)定彈出Push通知。

Push認證

許多朋友說Push不能用。其中一大部分,就是在認證階段就出了問題。想了解原因?請細 看:

這里所說的認證機制,實際上包含兩層。一層是物理連接上的認證,另一層則才是涉及到iPhone 設(shè)備令牌的認證。

物理連接上的認證:SSL/TLS鏈接

淺談iPhone 中Push 功能原理 推送通知

(如果你了解TLS,那么這里我?guī)缀鯚o需介紹。)

iPhone在開啟Push的時候,會連接 APNS建立一條TLS加密鏈接。每一臺正常的iPhone都有一個獨有的設(shè)備證書,而APNS也有一個服務(wù)器證書。兩者建立的時候,會驗證彼此的證書有 效性。

TLS鏈接一旦建立,在沒有數(shù)據(jù)的情況下,只需要每隔15分鐘進行一次?;畹奈帐郑虼藥缀醪徽剂髁?。而 一旦因為意外原因?qū)е骆溄又袛?,iPhone會不斷重新嘗試建立TLS鏈接,直到成功。

更高一層次:基于token(令牌)的認證

在機制 簡介里,我提到過APNS判斷Push推送消息該發(fā)給哪臺iPhone的依據(jù)是一個“目的iPhone的標識”,這個 標識就是device token(設(shè)備令牌)。

設(shè)備令牌是怎么生成的呢?是每次建立TLS 連接時,APNS通過前一層次(TLS層)里我們提到的每臺正常的iPhone唯一的設(shè)備證書(unique device certificate),并用令牌密鑰(token key)加密生成的。

淺談iPhone 中Push 功能原理 推送通知

在令牌生成了之后,APNS會把設(shè)備令牌(device token)返回給iPhone,而對應(yīng)的Push應(yīng)用程序(如BeejiveIM),則把返回來的設(shè)備令牌(device token)直接發(fā)送給Provider(如BeejiveIM服務(wù)器)。這樣,當Provider有Push消息要發(fā)送時,就會把對應(yīng) 帳號的設(shè)備令牌(device token)和消息一起發(fā)送給APNS,而APNS再依據(jù)設(shè)備令牌(device token),找到相應(yīng)TLS鏈接的iPhone,并發(fā)送相應(yīng)的Push消息。

以上復(fù)雜的流程可以歸納為下面這幅圖:

淺談iPhone 中Push 功能原理 推送通知

圖中,Client App是iPhone上的Push應(yīng)用程序。(圖中缺了一條(當有Push消息時)由Provider到APNS的鏈接)

最重要的部分——每臺 iPhone獨有的設(shè)備證書和密鑰的來歷

正常的iPhone刷系統(tǒng)之后,是沒有設(shè)備證書和密鑰的。這就是為什么iPhone會需要連接到 iTunes上進行激活——激活過程中,Apple會分配給每臺iPhone***的設(shè)備證書(device certificate)和密鑰(key)。

以上我僅僅介紹了從iPhone到APNS的鏈接建立。其實從Provider到 APNS也有一條TLS鏈接,但是與本文關(guān)系不大,所以不多加介紹了。

我的PUSH問題出在哪里?

相信許多同學都抱有這樣的疑問。

正 如上文提到的,iPhone的Push需要APNS生成對應(yīng)iPhone的設(shè)備令牌,但生成這個令牌又需要iPhone上的有效的設(shè)備證書(device certificate)和密鑰(key),但是:

iPhone OS 3.X 使用blacksn0w進行解鎖的 過程,是不經(jīng)過iT

unes的,而blacksn0w本身又不生成對應(yīng)的設(shè)備證書(device certificate)和密鑰(key),因此這樣解鎖完的iPhone根本不可能與APNS建立任何的TLS鏈接,Push自然廢 了。

有關(guān)各種pushfix補丁

要修補這個問題,唯一的辦法就是重新生成唯一且有效的設(shè)備證書(device certificate)和密鑰(key)。

但是要知道,證書是需要機構(gòu)簽發(fā)的,自己一個人隨便弄的一個證書,只會被APNS 認為是無效證書。(SSL證書一個多少錢大家可以去查查)

并且對應(yīng)的文件似乎還和iPhone本機的一些內(nèi)容相關(guān),不是直接制作好的文件放進去就 可以的。

于是,最早,dev team推出了一個測試版補丁,Push fix by dev team(通過他們的twitter發(fā)布的,因此官網(wǎng)沒有消息)。這個補丁初期很有效。但是僅在iPhone 2G上比較正常。

之后某人士發(fā)布 pushfix 1.0了。由于使用了不同的生成方法,因此在新版本iPhone上也正常工作了。于是風靡一時。

然而,以上兩個 補丁都有嚴重的隱患——他們使用了一個固定的證書作為設(shè)備證書(device certificate)。因此在不同iPhone上的區(qū)別僅僅在于生成的密鑰(key)不同。(待確認)

上面提到 過,APNS依靠每臺iPhone***的設(shè)備證書(device certificate)和密鑰(key)來生成***的設(shè)備令牌(device token),用來標識每臺iPhone。

但當多個iPhone的設(shè)備證書(device certificate)完全一致時,就存在一定幾率使得多個iPhone獲得相同的設(shè)備令牌(device token)

而 隨著這兩個補丁的使用人數(shù)不斷增加,使得出現(xiàn)獲得相同設(shè)備令牌(device token)的iPhone數(shù)量大大增加了。

當 這些相同設(shè)備令牌(device token)的iPhone上啟用了同一個應(yīng)用程序的Push的時候,就極有可能出現(xiàn)彼此間的Push串發(fā)的現(xiàn)象。——如某論壇目前N多人抱怨QQ的 Push到別人iPhone上的情況就是如此。

之后,Pushfix的作者,聲稱自己可以為每臺iPhone手 工制作唯一的設(shè)備證書(device certificate)和密鑰(key),并且開始提供了付費服務(wù),并且最終推出了付費的 Pushfix 2.0——其通過cydia安裝的原理是,在安裝的時候在線連接到pushfix站點檢查對應(yīng)iPhone的imei確定是否付費再自動下載對應(yīng)的證書。

雖 然不知道他是怎么制作這些證書的。但是經(jīng)過曉曉的驗證,他制作的證書確實是有效的。Push問題確實修復(fù)了。

在這之后,某論壇上出現(xiàn)了一個叫做 Pushfix_D的補丁,聲稱無需付費也能直接修復(fù)問題。然而,

考慮到一些情況,我決定把對Pushfix_D的判斷用英文發(fā)出來。當然, 制作者肯定很清楚下面寫的東西:)

  1. it contains the same released push keys from back in July 2009. Everybody gets the same key,  
  2.  so it is going to have all the same problems of ALL the free push fixes.   
  3. Push isn't going to work very long and it is going to drain your battery. 

其他出錯的情況

我的iPhone在 cmwap下無法push?!

對的,這完全正常。在wap網(wǎng)內(nèi),TLS鏈接幾乎無法建立成功。

我的iPhone在Wi-Fi下無法 push?!

實際上這得說是iPhone與某些無線路由器的不兼容。如果無線路由器開啟了DNS轉(zhuǎn)發(fā)功能,那 么很有可能你的iPhone無法成功與APNS服務(wù)器建立TLS鏈接。

解決方法:

關(guān)閉無線路由器的DNS轉(zhuǎn)發(fā)功能,手動為iPhone的 Wi-Fi連接設(shè)置DNS為8.8.8.8

補充,實際上,這也就是為什么iPhone連接到Wi-Fi上而又不能收到Push的時候,會變得發(fā)熱 且非常耗電。因為iPhone會不斷嘗試建立TLS鏈接。

如何得知我的Push是否破解成功?

一個簡 單的方法就是安裝 Twitbird Pro版本。在其Accounts頁面,會顯示當前軟件的Push注冊狀況。

或者你可以用WinSCP之類 的軟件查看iPhone上的

  1. /var/mobile/Library/Preferences/com.apple.apsd.plist 

文件狀態(tài)。

如果其大小為119字節(jié),則說明該iPhone已經(jīng)成功取得了設(shè)備令牌(device token),并保存在該文件中。

如果 小于該大小,則說明該iPhone已經(jīng)和APNS鏈接過,但是未能取得設(shè)備令牌(device token)。

如果沒有該文件,那說明該 iPhone根本沒能成功連接到APNS。

其他一些值得注意的問題

iPod Touch與iPhone的Push機制不完全相同,鎖屏后15分鐘方檢查一次。故請勿與上文對號入座。

APNS在發(fā)送Push消息時,如果發(fā) 現(xiàn)對應(yīng)的iPhone鏈接中斷,則會延后幾分鐘再發(fā)送。超過一個時間后,Push消息會被刪除。因此請注意你的網(wǎng)絡(luò)狀況是否影響Push正常工作。

如上文所說,每臺iPhone的設(shè)備令牌(device token)儲存在/var/mobile/Library/Preferences/com.apple.apsd.plist 文件中。這就是為什么每次需要重裝Push補丁時,建議刪除push程序并刪除該文件。

使用sbsettings的EDGE開關(guān)關(guān)閉EDGE, 卻不關(guān)閉Push的話,會導(dǎo)致iPhone不斷嘗試建立TLS連接,最終耗盡電量。因此,如果你不打算或不能用Push,請關(guān)閉Push選項。

對軟件的Push服務(wù)器(Provider)而言,Wi-Fi與手機網(wǎng)絡(luò)是一樣的,在Push處理上不會有任何區(qū)別。

雖然已經(jīng)解釋的很清楚,但還 是明說一句,只要TLS連接正常,Push服務(wù)就是實時的,速度僅取決于Provider而已。

題外話,iPhone上的郵件推送為Push Mail技術(shù),與本文所說的Push完全不同。請查閱Exchange Direct Push相關(guān)內(nèi)容。

一句話,如果你覺得 Push沒什么用,那只能說明你見識太少。在以下頁面可以查看一些支持Push的優(yōu)秀軟件。

http://appadvice.com/applists/show/definitive-list-of-push-capable-apps

小結(jié):關(guān)于淺談iPhone Push 功能原理 推送通知的內(nèi)容介紹完了,希望本文對你有所幫助。

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-18 16:42:07

iPhone應(yīng)用APNS推送

2011-07-07 08:49:14

iPhone Push Notificati

2011-07-08 17:57:37

iPhone CoreData 數(shù)據(jù)庫

2024-03-12 10:05:04

應(yīng)用程序推送通知

2011-08-03 16:45:09

iPhone APNS 推送通知

2011-07-25 14:20:52

iPhone 拍照 照片庫

2011-07-27 14:37:33

iPhone Push Notif 服務(wù)器

2011-07-25 18:07:29

iPhone Push Notificati

2011-07-08 16:43:46

iPhone Cocoa 多線程

2016-08-11 10:43:56

2024-01-26 16:23:38

漏洞數(shù)據(jù)泄露網(wǎng)絡(luò)安全

2011-11-23 09:18:25

iPhone通知

2013-07-04 09:58:46

Android Pus信息推送

2011-07-29 14:48:48

iPhone開發(fā)

2011-04-22 10:36:09

Server Push推送技術(shù)

2010-09-25 13:11:48

DHCP工作原理

2013-04-25 15:15:41

Windows PhoWindows PhoWindows Pho

2012-09-18 13:26:39

CC++

2014-03-17 16:38:27

京東

2011-07-06 14:22:52

iPhone Push
點贊
收藏

51CTO技術(shù)棧公眾號