APNs
推送在我們的生活中無處不在,下面就已開發(fā)者的角度來為你介紹其工作原理及如何搭建push server環(huán)境兴革。
一款APP要想收到消息推送绎晃,有一個必要前提——配置推送證書蜜唾。這里不在介紹如何配置推送證書。
原理
server下發(fā)消息給APP
Provider將消息推送給APNs庶艾,APNs將消息推送給Device袁余,Device再將消息通知給APP。
remote_notif_simple_2x.png
推送原理
推送的前提是Device需向APNs發(fā)起注冊注冊咱揍,注冊成功后APNs下發(fā)一個deviceToken給APP颖榜,APP再將其發(fā)送給Provider,當有要被推送的消息時煤裙,Provider會將消息結合deviceToken按指定的消息格式打包發(fā)送給APNs掩完,然后由APNs推送給Device。
deviceToken生成
token_generation_2x.png
- Device向APNs注冊遠程推送服務
- APNs經(jīng)過內(nèi)部流程處理生成一個deviceToken硼砰,下發(fā)給Device
- Device將獲取到的deviceToken發(fā)送給Provider
推送過程
token_trust_2x.png
- APP鏈接APNs的過程中且蓬,APNs會驗證deviceToken,鏈接成功后會維持一個TCP長連接
- Provider將消息結合deviceToken封包發(fā)送給APNs
- APNs將接收到的消息發(fā)送給deviceToken設備
- 設備再將收到的消息通知給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證書和私鑰來設置一個安全的鏈接去鏈接蘋果服務器
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
結語
以前僅知道原理题翰,至于服務端如何與蘋果服務器通信沒有一點概念恶阴。于是利用閑暇時間翻閱資料寫了篇關于APNs如何在服務端發(fā)送。爭取不做口頭的巨人行動的矮子(初中的時候班主任就時刻告訴我們這句話豹障,現(xiàn)在基本上拋之腦后 冷汗冯事!冷汗!)血公。目前只是整理了基于SSL協(xié)議的TCP長連接流通訊昵仅,HTTP/2后續(xù)會整理出來。