APNs
推送在我們的生活中無處不在,下面就已開發(fā)者的角度來為你介紹其工作原理及如何搭建push server環(huán)境。
一款A(yù)PP要想收到消息推送,有一個必要前提——配置推送證書。這里不在介紹如何配置推送證書。
原理
server下發(fā)消息給APP
Provider將消息推送給APNs,APNs將消息推送給Device,Device再將消息通知給APP。

remote_notif_simple_2x.png
推送原理
推送的前提是Device需向APNs發(fā)起注冊注冊,注冊成功后APNs下發(fā)一個deviceToken給APP,APP再將其發(fā)送給Provider,當(dāng)有要被推送的消息時,Provider會將消息結(jié)合deviceToken按指定的消息格式打包發(fā)送給APNs,然后由APNs推送給Device。
deviceToken生成

token_generation_2x.png
- Device向APNs注冊遠(yuǎn)程推送服務(wù)
- APNs經(jīng)過內(nèi)部流程處理生成一個deviceToken,下發(fā)給Device
- Device將獲取到的deviceToken發(fā)送給Provider
推送過程

token_trust_2x.png
- APP鏈接APNs的過程中,APNs會驗證deviceToken,鏈接成功后會維持一個TCP長連接
- Provider將消息結(jié)合deviceToken封包發(fā)送給APNs
- APNs將接收到的消息發(fā)送給deviceToken設(shè)備
- 設(shè)備再將收到的消息通知給APP
server搭建
合成PEM證書
命令行:
- 生成公鑰
openssl x509 -in aps_development.cer -inform der -out PushPublicCert.pem
- 生成私鑰
openssl pkcs12 -nocerts -out PushPrivateKey.pem -in Push.p12
- 將剛才生成的兩個pem文件合成到一個文件中
cat PushPublicCert.pem PushPrivateKey.pem > ck.pem
- 測試證書是否正常工作
telnet gateway.sandbox.push.apple.com 2195
- 利用SSL證書和私鑰來設(shè)置一個安全的鏈接去鏈接蘋果服務(wù)器
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushPublicCert.pem -key PushPrivateKey.pem
openssl s_client -connect api.push.apple.com:443 -cert PushPublicCert.pem -key PushPrivateKey.pem
server code
舊:
開發(fā)環(huán)境:gateway.sandbox.push.apple.com:2195
發(fā)布環(huán)境:gateway.push.apple.com:2195
新:
開發(fā)環(huán)境:api.development.push.apple.com:443
發(fā)布環(huán)境:api.push.apple.com:443
結(jié)語
以前僅知道原理,至于服務(wù)端如何與蘋果服務(wù)器通信沒有一點概念。于是利用閑暇時間翻閱資料寫了篇關(guān)于APNs如何在服務(wù)端發(fā)送。爭取不做口頭的巨人行動的矮子(初中的時候班主任就時刻告訴我們這句話,現(xiàn)在基本上拋之腦后 冷汗!冷汗?。D壳爸皇钦砹嘶赟SL協(xié)議的TCP長連接流通訊,HTTP/2后續(xù)會整理出來。