精華區beta iOS 關於我們 聯絡資訊
Apple Push Notification Service (APNs) 前面有討論到 Push Notification ,在這裡我把我的理解,加上 一點個人猜測,針對這個東西做個整理與說明。 歷史 iPhone OS 2.x 之前只有使用 Microsoft Exchange 才能有 email 、通訊錄以及行事曆享有推播服務。 Apple 於 2008 年 6 月 9 日首次宣佈將提供 APNs ,但是拖延 了許久都沒推出,在 2009 年 3 月 17 日的 iPhone OS 3.0 預覽 終於宣佈 3.0 將會支援 APNs ,拖延這麼久原因是為了支援各種 程式,所以他們調查了開發者對這個服務的需求,重新設計 APNs 的架構。 觀察 1. iPhone 的程序列表裡面有下面這一個用來收取 PN 的程序 /System/Library/PrivateFrameworks/ApplePushService.framework/apsd 2. 沒經過正式啟動(activation)的 iPhone 沒辦法使用 APNs 3. 如果網路訊號斷斷續續,那麼會特別耗電。 4. 回覆 iPhone 後,還是可以照常收到之前訂閱的 PN 。 (個人經驗,待證實) APNs 原理 每個行動裝置與 APNs server 隨時保持 IP 連線,以讓 APNs 可以 隨時把訊息送到行動裝置上,大致上可以透過下圖來表示(參考文 件 3) 訊息提供者 --> APNs server --> iPhone PN 程序 --> 顯示在螢幕上 訊息顯示在螢幕上後,如果使用者選取開啟程式,則程式會主動去向 訊息提供者擷取新的訊息,這部份已經不算 PN 了。 何謂 隨時保持 IP 連線 ? 熟悉 TCP/IP 程式設計的人應該了解,兩個裝置要建立連線,得先 建立一個 socket ,而隨時保持 IP 連線的意思就是,這個 socket 建立之後,將會一直保持著,直到取消 PN 或是換 IP address 等等 其他因素。如果換了一個 IP address ,就會重新建立連線。如果裝 置失去網路,那麼也會重新建立連線。連線建立以後,理論上沒有在 使用其實不太會耗電,會耗電也只是那個負責這個連線的程序消耗的 ,不過一般要保持連線,都會定期傳回 keep alive 封包,讓對方知 道,我還在這裡,不要給我斷線。這是會消耗一些電,耗多少要看這 個 keep alive 封包多久傳一次。 關於架構的一些猜測 1. 裝置辨別 同時使用 APNs 的裝置有數百萬,那麼為了使正確的訊息跑到正確 的裝置上(你總不會希望你的甜言蜜語跑到一個你不認識的人裝置 上吧?),那麼每個裝置就需要一個不同的識別碼。而從觀察 2 可以推論,這個識別碼是在啟動 iPhone 的時候拿到的,而在啟動 iPhone 時(參考文件 4),會把裝置的 UDID 、 IMEI 以及 ICCID 回傳給 Apple ,然後 Apple 會用他的演算法回傳 Activation Token 。根據參考文件 3 給裝置用的 token 跟 acivation token 是不一樣的,而是在第一次使用 APNS 的時候才會拿到。 不過和 activation token 不同的是,這個 token 「可能」每次回 覆之後都會一樣(觀察 4 )。而我也推測這個 token 只有當裝置 有透過正常方法啟動,在 Apple 資料庫有紀錄才會發放。(可參考 文件 3 的 Service-to-Device Connection Trust 圖,那個 Device certificate 可能是正常啟動後才能拿到) 註:那些 hacktived 的機器,如果裝了 Push Fix 那麼他們都會 收到別人的訊息,因為他們都用同一個 APNs device token 。 2. 連線的建立 前面提到隨時保持 IP 連線,那是由那一方來建立這個連線呢? 合理的推測是由裝置來建立這個連線的。因為行動裝置並沒有固定 IP address ,不太可能由 APNs server 主動去建立這個連線。 另外,如果網路斷斷續續,裝置就得每次回覆有網路的時候就去跟 server 建立連線,而這個 overhead 是很耗電的,也因此如果待 在網路不穩的地方,電耗得特別快。 其他細節可參考以下文件。 參考文件 1. http://en.wikipedia.org/wiki/Apple_Push_Notification_Service 2. http://en.wikipedia.org/wiki/Push_technology 3. http://developer.apple.com/iPhone/library/documentation/ NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ ApplePushService.html http://tinyurl.com/y97trfs 4. http://theiphonewiki.com/wiki/index.php?title=Activation_token -- Some people are born on third base and go through life thinking they hit a triple. - Barry Switzer -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 129.15.127.126
poopooer:教學文 感謝! 12/10 01:56