谈谈接入各种第三方推送平台的技术方案和坑点
在移動互聯(lián)網(wǎng)時代,為了運營好一個APP,消息推送是一個優(yōu)質(zhì)廉價的渠道。消息推送的使用場景簡單來說,可以包括運營類的消息推送,如活動推廣期間的推送等,還包括通知類的消息推送,如社交場景中的新消息提醒等。
對于APP來說,消息推送能夠起到內(nèi)容告知、提高日活,甚至召回用戶的作用。那么如何接入第三方推送平臺呢?本篇文章中,網(wǎng)易云信資深研發(fā)工程師將和大家聊聊接入各種第三方推送平臺的技術(shù)方案,分享接入推送平臺的一些實用經(jīng)驗。
如何接入第三方推送
1. 推送的一般流程
推送是一種服務(wù)器主動push消息到設(shè)備端的行為,因此依賴于設(shè)備端和服務(wù)器的長連接。整體的架構(gòu)和流程如下:
具體如下:
1) 設(shè)備和推送服務(wù)器建立長連接
2) 設(shè)備會根據(jù)某些規(guī)則生成或從推送服務(wù)器獲取到一個DeviceToken,推送服務(wù)器可以根據(jù)DeviceToken定位到具體的設(shè)備
3) 設(shè)備會上報DeviceToken到應(yīng)用服務(wù)器(由應(yīng)用自己完成)
4) 應(yīng)用服務(wù)器根據(jù)需要調(diào)用推送的服務(wù)端接口發(fā)起推送
5) 推送服務(wù)器收到推送請求,根據(jù)請求中的DeviceToken定位到具體的設(shè)備,下發(fā)推送通知
6) 設(shè)備收到推送消息,可以進行通知欄彈窗或者其他行為
2. iOS
蘋果官方提供了APNS推送,有很高的推送送達率。早先的APNS推送提供了一套基于TCP協(xié)議的接口,但是該接口使用方式比較復(fù)雜,稍有不慎就會導(dǎo)致推送失敗,但調(diào)用方還誤以為推送成功。
后來蘋果又提供了一套新的基于HTTP2協(xié)議的接口,新接口的一個好處是可以追蹤到每個推送請求是被APNS服務(wù)器拒絕了還是成功了,再也不用去猜請求到底是被蘋果服務(wù)器給丟了還是接受了。
3. 安卓
谷歌官方最早提供了GCM推送,后來又推出了FCM推送來代替GCM,但由于國內(nèi)的環(huán)境不適合使用,因此各個手機廠商又相繼推出了各自的推送,推送的原理都是類似的,都是依賴于設(shè)備和推送服務(wù)器的長連接,但是廠商推送的優(yōu)勢在于這樣的長連接可以和自己的手機系統(tǒng)綁定到一起,從而可以不同應(yīng)用共享同一條長連接,節(jié)省了心跳的流量消耗,并且這樣的系統(tǒng)級長連接可以不用擔心應(yīng)用被殺導(dǎo)致的應(yīng)用內(nèi)長連接斷連導(dǎo)致消息推送不可達。
目前已經(jīng)推出廠商推送的包括小米、華為、魅族、OPPO等,FCM也可以算安裝了谷歌服務(wù)的設(shè)備的系統(tǒng)級推送。
不同于IOS,安卓陣營的推送服務(wù)器接口都是HTTPS接口,并且通過SecretKey的方式來進行安全校驗。
一點經(jīng)驗
1. DeviceToken的管理
我們知道DeviceToken標識了一臺具體的設(shè)備,但是推送服務(wù)本身是不知道應(yīng)用本身的賬號體系的,因此同一個APP,假設(shè)注銷了A賬號,改用B賬號登錄,此時DeviceToken一般來說是沒有變化的,此時應(yīng)用服務(wù)器需要去標識A賬號的該設(shè)備屬于注銷狀態(tài),不然一條針對A賬號的推送消息就會被B賬號收到。
2.? 應(yīng)用被卸載的情況
應(yīng)用被卸載的時候(這時候登錄的A賬號),應(yīng)用本身感知不到,此時針對A賬號的該設(shè)備的推送還是會發(fā)出去,推送服務(wù)器收到推送消息,找不到對應(yīng)的設(shè)備,此時沒有問題,只是會消耗一些資源。假設(shè)此時設(shè)備上的應(yīng)用又重新安裝了,然后登錄了另一個賬號B,假設(shè)DeviceToken沒有變化,此時針對A賬號的推送將會被B賬號收到。上面這種情況出現(xiàn)的前提條件是DeviceToken沒有發(fā)生變化,測試發(fā)現(xiàn)華為推送存在這個問題(經(jīng)過詢問華為推送技術(shù)支持,2018年3月之后的設(shè)備不存在該問題),其他推送沒有。為了解決這個問題,服務(wù)器必須自己管理DeviceToken-用戶賬號的映射關(guān)系,并在發(fā)現(xiàn)有DeviceToken沖突的情況下去把老的賬號設(shè)置為注銷狀態(tài)。
3. IM場景下推送時機問題
IM場景下,應(yīng)用服務(wù)器有自己長連接服務(wù),此時第三方推送服務(wù)的作用是利用第三方廠商推送的系統(tǒng)級長連接來提高消息推送的送達率。
首先對于IOS端,應(yīng)用無法常駐后臺,我們會在應(yīng)用切換前后臺的時候通過IM長連接發(fā)送一個標記位,服務(wù)器會在設(shè)備離線或者處于后臺的情況下觸發(fā)APNS推送,從而減少設(shè)備在前臺情況下APNS推送的流量消耗。
而對于安卓端,服務(wù)器會在設(shè)備處于離線的情況下觸發(fā)第三方推送,否則會走IM長連接下發(fā)通知,當設(shè)備處于后臺但還活著的時候,會在收到消息之后主動彈窗以便提醒用戶有新消息。對于安卓端還有一個場景是這樣的,安卓端在后臺的某個時刻進程死了,此時過來一條需要推送的消息,服務(wù)器發(fā)現(xiàn)設(shè)備處于離線狀態(tài),嘗試調(diào)用第三方推送(可能有也可能沒有)。過了一會進程自己活回來了,重新連接到了IM服務(wù)器,拿到了未讀消息,此時一般的邏輯下,進程會主動彈窗告知有消息到達,造成設(shè)備端的通知欄有兩條推送。為了解決這個問題,需要IM服務(wù)器在設(shè)備重連的時候下發(fā)未讀消息是否需要彈窗的信息。? ?
在移動互聯(lián)網(wǎng)時代,為了運營好一個APP,消息推送是一個優(yōu)質(zhì)廉價的渠道。消息推送的使用場景簡單來說,可以包括運營類的消息推送,如活動推廣期間的推送等,還包括通知類的消息推送,如社交場景中的新消息提醒等。
以上就是第三方推送平臺技術(shù)方案的介紹以及經(jīng)驗分享,想要技術(shù)干貨,了解更多實戰(zhàn)經(jīng)驗,請關(guān)注網(wǎng)易云信博客。
點擊“閱讀原文”,進入博客
總結(jié)
以上是生活随笔為你收集整理的谈谈接入各种第三方推送平台的技术方案和坑点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何保证IM实时消息的“时序性”与“一致
- 下一篇: 互联网1分钟 |1109