推 poopooer:教學文 感謝! 12/10 01:56
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
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.