版本記錄
| 版本號 | 時(shí)間 |
|---|---|
| V1.0 | 2018.07.15 |
前言
我們做APP很多時(shí)候都需要推送功能,以直播為例,如果你關(guān)注的主播開播了,那么就需要向關(guān)注這個(gè)主播的人發(fā)送開播通知,提醒用戶去看播,這個(gè)只是一個(gè)小的方面,具體應(yīng)用根據(jù)公司的業(yè)務(wù)邏輯而定。前面已經(jīng)花了很多篇幅介紹了極光推送,其實(shí)極光推送無非就是將我們客戶端和服務(wù)端做的很多東西封裝了一下,節(jié)省了我們很多處理邏輯和流程,這一篇開始,我們就利用系統(tǒng)的原生推送類結(jié)合工程實(shí)踐說一下系統(tǒng)推送的集成,希望我的講解能讓大家很清楚的理解它。感興趣的可以看上面幾篇。
1. 系統(tǒng)推送的集成(一) —— 基本集成流程(一)
2. 系統(tǒng)推送的集成(二) —— 推送遇到的幾個(gè)坑之BadDeviceToken問題(一)
3. 系統(tǒng)推送的集成(三) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 本地和遠(yuǎn)程通知概覽(一)
4. 系統(tǒng)推送的集成(四) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 管理您的應(yīng)用程序的通知支持(二)
5. 系統(tǒng)推送的集成(五) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 調(diào)度和處理本地通知(三)
6. 系統(tǒng)推送的集成(六) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 配置遠(yuǎn)程通知支持(四)
7. 系統(tǒng)推送的集成(七) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 修改和顯示通知(五)
8. 系統(tǒng)推送的集成(八) —— 本地和遠(yuǎn)程通知編程指南之蘋果推送通知服務(wù)APNs - APNs概覽(一)
9. 系統(tǒng)推送的集成(九) —— 本地和遠(yuǎn)程通知編程指南之蘋果推送通知服務(wù)APNs - 創(chuàng)建遠(yuǎn)程通知Payload(二)
10. 系統(tǒng)推送的集成(十) —— 本地和遠(yuǎn)程通知編程指南之蘋果推送通知服務(wù)APNs - 與APNs通信(三)
11. 系統(tǒng)推送的集成(十一) —— 本地和遠(yuǎn)程通知編程指南之蘋果推送通知服務(wù)APNs - Payload Key參考(四)
Binary Provider API - 二進(jìn)制Provider API
legacy二進(jìn)制接口要求provider服務(wù)器使用本附錄中描述的二進(jìn)制API。 所有開發(fā)人員都應(yīng)將其遠(yuǎn)程通知provider服務(wù)器遷移到與Communicating with APNs中描述的功能更強(qiáng)大且更高效的基于HTTP / 2的API。
General Provider Requirements - 基本Provider要求
作為provider,您可以通過二進(jìn)制接口與Apple Push Notification服務(wù)進(jìn)行通信。 該接口對于providers是一個(gè)高速,高容量接口;它使用流式TCP套接字設(shè)計(jì)和二進(jìn)制內(nèi)容。 二進(jìn)制接口是異步的。 支持該接口,但如果可能,您應(yīng)該最好使用APNs API。
生產(chǎn)環(huán)境的二進(jìn)制接口可通過gateway.push.apple.com,port 2195獲得; 開發(fā)環(huán)境的二進(jìn)制接口可通過gateway.sandbox.push.apple.com,port 2195獲得。
對于每個(gè)接口,使用TLS(或SSL)建立安全通信通道。 這些連接所需的SSL證書是從您的開發(fā)者帳戶獲得的。 (有關(guān)詳細(xì)信息,請參閱APNs Overview。),要建立可信的provider身份,請?jiān)谶B接時(shí)使用對等身份驗(yàn)證將此證書提供給APNs。
注意:要與
APNs建立TLS會(huì)話,必須在provider的服務(wù)器上安裝Entrust Secure CA根證書。 如果服務(wù)器正在運(yùn)行macOS,則此根證書已存在于鑰匙串中。 在其他系統(tǒng)上,證書可能不可用。 您可以從Entrust SSL Certificates website下載此證書。
作為provider,您負(fù)責(zé)遠(yuǎn)程通知的以下方面:
您必須合成通知
payload(請參閱Creating the Remote Notification Payload)。您有責(zé)任提供要在應(yīng)用程序圖標(biāo)上顯示的徽章編號。
定期與反饋服務(wù)連接,并獲取反復(fù)報(bào)告失敗傳遞嘗試的那些設(shè)備的當(dāng)前列表。然后停止向與這些應(yīng)用關(guān)聯(lián)的設(shè)備發(fā)送通知。有關(guān)更多信息,請參閱The Feedback Service。
如果您打算支持多種語言的通知消息,但不使用aps有效負(fù)載字典的loc-key和loc-args屬性進(jìn)行客戶端提取本地化警報(bào)字符串,則需要本地化服務(wù)器端警報(bào)消息的文本。為此,您需要從客戶端應(yīng)用程序中找出當(dāng)前的語言首選項(xiàng)。 Supplying the User’s Language Preference to Your Server講述了獲取此信息的方法。有關(guān)loc-key和loc-args屬性的信息,請參閱 Creating the Remote Notification Payload。
The Binary Interface and Notification Format - 二進(jìn)制接口和通知格式
二進(jìn)制接口使用普通的TCP套接字來實(shí)現(xiàn)流式傳輸?shù)亩M(jìn)制內(nèi)容。 為了獲得最佳性能,可以通過接口批量或使用TCP / IP Nagle算法在單個(gè)傳輸中批量多個(gè)通知。 通知格式如圖A-1所示。

注意:所有數(shù)據(jù)都按網(wǎng)絡(luò)順序指定,即大端。
通知格式的頂層由以下組成,按照順序排列:
Table A-1 Top-level fields for remote notifications

幀數(shù)據(jù)由一系列項(xiàng)組成。 每個(gè)項(xiàng)按以下順序組成:
Table A-2 Fields for remote notification frames

項(xiàng)目及其標(biāo)識(shí)符如下:
Table A-3 Item identifiers for remote notifications



如果您發(fā)送APNs接受的通知,則不會(huì)返回任何內(nèi)容。
如果發(fā)送格式錯(cuò)誤或無法識(shí)別的通知,APNs將返回錯(cuò)誤響應(yīng)數(shù)據(jù)包并關(guān)閉連接。 在使用相同連接的格式錯(cuò)誤通知后發(fā)送的任何通知都將被丟棄,并且必須重新發(fā)送。 圖A-2顯示了錯(cuò)誤響應(yīng)數(shù)據(jù)包的格式。
Figure A-2 Format of error-response packet

數(shù)據(jù)包的命令值為8,后跟一個(gè)字節(jié)的狀態(tài)代碼和格式錯(cuò)誤的通知的通知標(biāo)識(shí)符。 表A-4列出了可能的狀態(tài)代碼及其含義。
Table A-4 Codes in error-response packet

狀態(tài)代碼10表示APNs服務(wù)器關(guān)閉連接(例如,執(zhí)行維護(hù))。 錯(cuò)誤響應(yīng)中的通知標(biāo)識(shí)符指示已成功發(fā)送的上一個(gè)通知。 您發(fā)送的任何通知被丟棄后,必須重新發(fā)送。 收到此狀態(tài)代碼后,請停止使用此連接并打開新連接。
請注意,生產(chǎn)環(huán)境中的設(shè)備令牌和開發(fā)環(huán)境中的設(shè)備令牌不是相同的值。
The Feedback Service - 反饋服務(wù)
Apple推送通知服務(wù)包括反饋服務(wù),為您提供有關(guān)失敗的遠(yuǎn)程通知的信息。如果由于設(shè)備上不存在預(yù)期的應(yīng)用程序而無法傳遞遠(yuǎn)程通知,則反饋服務(wù)會(huì)將該設(shè)備的令牌添加到其列表中。在傳遞之前過期的遠(yuǎn)程通知不被視為傳遞失敗,并且不會(huì)影響反饋服務(wù)。通過使用此信息來停止發(fā)送無法傳遞的遠(yuǎn)程通知,可以減少不必要的消息開銷并提高整體系統(tǒng)性能。
每天查詢反饋服務(wù)以獲取設(shè)備令牌列表。使用時(shí)間戳來驗(yàn)證自生成反饋條目以來尚未重新注冊設(shè)備令牌。對于尚未重新注冊的每個(gè)設(shè)備,請停止發(fā)送通知。 APNs監(jiān)控providers在檢查反饋服務(wù)方面的努力,并避免向設(shè)備上不存在的應(yīng)用程序發(fā)送遠(yuǎn)程通知。
注意:反饋服務(wù)為每個(gè)推送主題維護(hù)單獨(dú)的列表。 如果您有多個(gè)應(yīng)用,則必須使用相應(yīng)的證書為每個(gè)應(yīng)用連接一次反饋服務(wù),以便接收所有反饋。
反饋服務(wù)具有類似于用于發(fā)送遠(yuǎn)程通知的接口的二進(jìn)制接口。 您可以通過端口2196上的feedback.push.apple.com訪問生產(chǎn)反饋服務(wù),并通過端口2196上的feedback.sandbox.push.apple.com訪問開發(fā)反饋服務(wù)。與遠(yuǎn)程通知的二進(jìn)制接口一樣,使用TLS(或SSL) )建立安全的通信渠道。 在用于發(fā)送通知時(shí),使用相同的SSL證書連接到反饋服務(wù)。 要建立可信的提供者身份,請?jiān)谶B接時(shí)使用對等身份驗(yàn)證將此證書提供給APNs。
連接后,立即開始傳輸;您不需要向APNs發(fā)送任何命令。 從反饋服務(wù)中讀取流,直到?jīng)]有更多數(shù)據(jù)要讀取。 收到的數(shù)據(jù)采用以下格式的元組:

Table A-5 Table

閱讀后,反饋服務(wù)列表將被清除。 每次連接到反饋服務(wù)時(shí),它返回的信息僅列出自上次連接以來發(fā)生的故障。
后記
本篇主要講述了二進(jìn)制Provider API,感興趣的給個(gè)贊或者關(guān)注~~~~
