天天看點

如何輕松內建多廠家推送服務(内含流程)

【融雲全球網際網路通信雲】消息推送(Push)作為業務主動觸達使用者的一種重要手段,已經成為移動開發中的标配服務。特别是随着移動網際網路的深入發展,流量紅利消減,消息推送服務承載着解決增長難題的重任。

資料顯示,APP 內建的開發服務中,消息推送占比最高,且滲透率逐年遞增。而如何內建多廠家的推送通道,則是國内開發者要面對的首要問題。

目前,iOS 裝置使用蘋果的 APNs 推送服務,Android 裝置使用谷歌 FCM 推送服務。由于谷歌服務在國内無法使用,幾大手機硬體廠商像小米、華為、OPPO、VIVO、魅族都提供了各自系統級别的推送服務。

融雲支援了上述所有的推送通道,同時還自研了 RongPush 服務,開發者無需一一對接,即可簡單、高效地實作推送業務。

本文将重點介紹融雲內建多廠家推送通道服務的實作方案。

融雲推送服務流程

推送流程主要分“推送配置”、“協商推送通道,上報推送 token”、“發送推送消息”、“推送回執”四個部分,下面分别介紹。

推送配置:開發者需要在融雲背景維護推送配置,主要是維護調用推送通道接口需要的密鑰資訊及接口參數。

協商推送通道,上報推送 token:用戶端需要內建融雲 SDK,當 APP 啟動初始化時候會請求融雲服務端進行協商,協商出最佳的推送通道。然後上報該推送通道的 token (第三方推送通道識别用戶端的唯一辨別)。

發送推送消息:融雲服務端拿到使用者配置的密鑰資訊和參數、上報的推送 token,通過調用推送通道 API  發送推送消息。

推送回執:當推送到達用戶端或用戶端點選推送資訊時,用戶端會上報回執資訊給第三方通道或融雲服務端,第三方推送通道通過回調方式将回執資訊回調給融雲服務端。APNs 和 FCM 是用戶端直接上報回執資訊給融雲服務端。具體流程如下:

如何輕松內建多廠家推送服務(内含流程)

融雲推送系統架構

時至今日,融雲已經服務 25 萬+開發者,為全球 30 萬款 APP 提供通信技術支援。同時,随着移動網際網路的深入發展,移動應用覆寫的場景越來越複雜多樣,開發者的需求也在不斷翻新更新。作為移動應用标配,推送系統自然也面對更多複雜場景和多樣需求的挑戰。

通過不斷疊代,融雲建構了一個支援靈活擴充、高并發、低延遲、按需隔離的推送系統。系統整體架構如下圖所示:

該架構分為四層:應用層、推送業務邏輯層、通道層、存儲資源層。

應用層負責對外提供使用推送服務能力的方式,滿足不同業務場景的推送需求。除了 IM 場景外,融雲對外提供了 API 接口、開發者背景等多種形式的推送使用方式,支援像标簽推送、全量廣播等推送場景。

推送邏輯層負責承接應用層轉發過來的推送請求。為了應對高并發場景,必須對流量進行合理切分,我們對每個請求按裝置 ID 次元進行一緻性 hash 計算落點,讓請求均衡分布到每個服務節點上。服務内部使用隊列進行緩沖請求,減輕服務壓力。同時應用内部利用本地緩存和 redis 對資料庫的查詢請求進行緩存,進一步減輕資料庫層的壓力。

推送邏輯層還負責處理推送過程中的一些通用業務邏輯,如推送标題、内容等參數的業務邏輯處理、國際化支援、配置加載,以及建構通道層需要的推送請求參數。

通道層主要負責調用第三方推送通道接口,目前融雲已經內建了小米、華為、OPPO、VIVO、MEIZU、FCM、APNs 推送通道。

存儲資源層使用了 mysql、hbase、solr、redis,按不同的業務資料特點采用适合的存儲中間件,提高性能。

多廠家推送對接

接口調用:小米、華為、OPPO、VIVO、MEIZU 推送提供的推送接口衆多,有單推、批量推、按标簽推等不同推送接口。

我們基于不同場景需求選擇了單推和批量推送,對于有更高實時性要求的 IM 場景,選擇單推方式;對于要求更高性能的全量廣播推送場景,選擇了批量推送接口。幾個廠家的推送接口的調用基本大同小異,大緻流程如下:

如何輕松內建多廠家推送服務(内含流程)

類圖結構如下:

推送參數支援:當我們對接第三方推送接口時會發現,需要配置的推送參數非常多。除了一些基本必選參數,如推送标題、推送内容,還有像鈴聲、點選動作、顯示效果、優先級、布局樣式等各種參數。

為友善使用者快速配置滿足自己需求的參數,我們設計了參數三級化配置模式,支援這些參數的動态擴充。

三級配置分别是消息級别配置、應用級别配置、預設配置。消息級别優先級最高,應用級别優先級次之,預設配置優先級最低。

繼續閱讀