廣大融雲開發者在進行融雲相關開發過程中,經常遇到對消息體系、推送機制的各種概念困擾。同時,大家對通知、推送,廣播、系統消息等概念又沒有統一的認識,造成了認知和溝通困難。這里我們為大家詳細的解答下融雲的整個消息
和推送
體系設計,以便大家可以更好的使用融雲進行開發。
命名約定與概念解析
融雲所有技術和業務文檔都將遵循下述命名約定,大家在提交工單時,也請注意用准確的概念描述您的需求或者問題。
通知
通知(Notification)是一種用戶界面展現概念,是指在設備端以某種形式彈出一條提示。
在 iOS 平台,表現為如圖:

在 Android 平台,表現為如圖:

通知分為本地通知
(Local Notification)和遠程通知
(Remote Notification)。盡管您看到的是一樣的界面展現,但是他們分別來自本地發起和遠程發起。本地通知
指的是您的應用程序在前台、或者在后台但仍然在生命周期存活,此時收到消息,會直接通過前台的應用程序彈出提示窗口。遠程通知
指的是您的應用程序已經完全退出,應用進程已經不存在,此時通過 iOS 上的 APNS 系統服務或者 Android 上的服務進程收到消息,並彈出提示欄。大家開發和調試過程中,務必要清楚本地通知和遠程通知的區別。
推送
推送(Push)是一種技術概念,是指從服務端實時發送信息到客戶端。
大家概念中的典型推送服務是類似 APNS(Apple Push Notification Service)
、GCM(Google Cloud Messaging)
等服務。在國內,由於谷歌服務不能使用,因此您的應用必須使用第三方或者自己研發的服務來推送。
因為融雲是使用長連接技術
來實現 IM 服務的,和典型的 Push
服務具有相同的長連接機制,所以,很多開發者也會直接使用融雲來實現推送功能。
在某些場合,iOS 平台的推送
(通過 APNS 的 Push)和遠程通知
(Remote Notification)表示相同的意思,可以互相替換使用。
融雲現在已推出 Push 服務產品,詳情請參見融雲推送服務開發指南。
廣播
廣播(Broadcast)是一種業務概念,是通過后台管理界面或者調用服務端接口,向 App
中的所有用戶發送一條消息。通常“廣播”和“推送”是開發者容易產生混淆的地方。
系統消息
系統消息(System Message)是一種業務概念,是指利用系統帳號(非用戶帳號,用戶不可登錄)向用戶發送的消息,既可以是通過調用廣播接口發送給所有人的消息,也可以是加好友等單條通知消息。
在融雲平台中,其實並不存在系統消息的概念,一般系統消息特指會話類型(ConversationType)為“系統(SYSTEM)”的會話中的消息。
iOS 平台消息與推送邏輯解析
本地通知與遠程通知
首先要了解 iOS 的通知推送概念。大家平時看到的 iOS 彈出的提示,其實是由兩種完全不同的機制產生的:

第一種:本地通知(Local Notification)
本地通知是通過調用本地接口 [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
,由 iOS 設備直接生成發布的。
第二種:遠程通知(Remote Notification)
遠程通知是通過蘋果 APNS(Apple Push Notification Service)
服務發送到客戶端的通知。
遠程通知的注冊
開發者必須在融雲開發者平台上傳推送證書並在客戶端注冊、獲取 deviceToken
后,將 deviceToken
告訴融雲,才能具備遠程通知能力。
推送證書
如果您的業務需要 iOS 應用程序具備接收推送的能力,那么您就必須要上傳 iOS 推送證書(.p12 格式
),證書分為兩種:
第一種:開發證書(Developer Certification)
開發證書用於測試環境在開發和調試時使用,如果用開發證書打包應用安裝在手機上,只能在測試環境使用遠程通知功能。
第二種:發布證書(Distribution Certification)
發布證書用於生產環境在 App Store 發布時使用,如果用發布證書打包應用安裝在手機上,只能在生產環境(線上)使用遠程通知功能。
在 融雲開發者平台 選擇需要 Push 推送消息的應用在應用標識模塊中,上傳 .p12 證書文件后,才能收到融雲 Push 推送消息。
deviceToken
deviceToken 用於 APNS
的,從蘋果服務器獲取的設備唯一標識。
您需要將獲取到的 deviceToken
通過 setDeviceToken
方法傳給融雲,才能收到蘋果的 APNS
遠程通知,否則在您的應用退出之后,將無法收到消息的遠程通知。
如何獲取 deviceToken 請參見文檔
消息與通知推送邏輯
通過調用融雲的服務端 API 接口向用戶推送消息,服務端推送消息目前支持以下幾種消息類型:
- 文本消息
- 圖片消息
- 語音消息
- 圖文消息
- 位置消息
- 添加聯系人消息
- 提示條(小灰條)通知消息
- 資料通知消息
- 通用命令消息
詳細的文檔說明請參見 Server 開發指南中 消息發送服務。
推送邏輯
向用戶推送消息,分為用戶在線狀態和離線狀態兩種情況:
第一種:離線狀態
用戶不在線情況下,會對所有綁定了設備的 iOS 用戶,發送遠程通知。流程如下:
第二種:在線狀態
用戶在線情況下,則會直接向客戶端發送通知消息。流程如下:
自定義推送文字
開發者可以通過 pushContent
自定義設置用戶收到推送消息時顯示的內容。如果推送消息時未填寫 pushContent
則顯示默認消息內容,如:文本消息顯示文本內容,圖片消息顯示為“[圖片]”。
開發者使用 pushContent
自定義推送文字后,需要在客戶端實現 – onRCIMCustomLocalNotification:withSenderName:
此方法是當 App 處於后台時,接收到消息並彈出本地通知的回調方法,參見 API 說明文檔。
pushContent
必須填寫,否則用戶無法收到推送通知。 詳細請參見 Server 開發指南中
消息發送服務。
自定義推送聲音與振動
推送聲音,用戶收到推送消息時的通知提示音,融雲消息推送提示聲音與振動,默認為手機系統設置的聲音與振動提示狀態。
在 iOS 平台下,開發者可通過開發者后台,應用標識
-> 自定義 Push 聲音
中輸入 iOS 系統聲音名,重新設置生產和開發環境的推送提示音,如果開發者使用的是自己創建的聲音,而不是 iOS 系統聲音,需要開發者將自己創建的聲音一同打包到應用程序中,然后在開發者后台 自定義 Push 聲音
處輸入聲音文件名保存即可。

自定義推送附加數據
推送附加數據,推送消息時同消息一起推送到客戶端的附加文本信息,可通過 pushData
字段實現(pushData 對應 payload 字段)。
如果開發者在推送一條消息后,希望消息接收端進行一些特殊的邏輯處理,可以在推送消息時設置 pushData
內容,客戶端收到遠程通知信息解析后為對應的 pushData
,根據 pushData
中的附加信息,進行對應的處理操作。
推送消息文檔請參見 Server 開發指南中 消息發送服務,客戶端請參見 App 接收消息推送格式。
全局與會話消息免打擾
如果用戶不想受到消息提醒的干擾,融雲提供兩種消息免打擾方式:全局消息免打擾
和會話消息免打擾
。
全局消息免打擾,設置后用戶在接收通過融雲客戶端或服務端發送的所有消息時,如果客戶端在后台運行,將不會進行通知提醒,但可以收到消息內容。如果客戶端為離線狀態,將不會收到遠程通知提醒。
會話消息免打擾,根據會話類型、會話 Id 設置消息提醒狀態,設置后如果客戶端在后台運行時,會話中有新的消息,將不會進行通知提醒,可以收到消息內容。如果客戶端為離線狀態,將不會收到遠程通知提醒。
Android 平台通知與推送邏輯解析
消息與通知推送邏輯
通過調用融雲的服務端 API 接口向用戶推送消息,服務端推送消息目前支持以下幾種消息類型:
- 文本消息
- 圖片消息
- 語音消息
- 圖文消息
- 位置消息
- 添加聯系人消息
- 提示條(小灰條)通知消息
- 資料通知消息
- 通用命令消息
詳細的文檔說明請參見 Server 開發指南中消息發送服務。
推送邏輯
向用戶推送消息,分為用戶在線狀態和離線狀態兩種情況:
第一種:離線狀態
用戶不在線情況下,會對所有需要收到消息的用戶,發送遠程通知。流程如下:
第二種:在線狀態
用戶在線情況下,則會直接向客戶端發送通知消息。流程如下:
自定義推送文字
開發者可以通過 pushContent
自定義設置用戶收到推送消息時顯示的內容。如果推送消息時未填寫 pushContent
則顯示默認消息內容,如:文本消息顯示文本內容,圖片消息顯示為“[圖片]”。
pushContent
必須填寫,否則用戶無法收到推送通知。 詳細請參見 Server 開發指南中
消息發送服務。
自定義推送聲音與振動
推送聲音是用戶收到推送消息時的通知提示音,融雲消息推送提示聲音與振動,默認為手機系統設置的聲音與振動提示狀態。
如果開發者想自定義消息推送提示音與振動狀態,可以在接收消息監聽和 Push 消息監聽方法中自行處理,並在兩個方法中返回 true
告知融雲 SDK 走自己的處理方式。
在接收消息監聽中可以對本地通知的提示音和振動狀態進行處理,接收消息監聽文檔。
在 Push 消息監聽中可以對遠程通知的提示音和振動狀態進行處理,Push 消息監聽文檔。
自定義推送附加數據
推送附加數據是推送消息時同消息一起推送到客戶端的附加文本信息,可通過 pushData
字段實現。
如果開發者在推送一條消息后,希望在消息接收端進行一些特殊的邏輯處理,可以在推送消息時設置 pushData
內容,客戶端收到遠程通知信息解析后為對應的 pushData
,根據 pushData
中的附加信息,進行對應的處理操作。
推送消息文檔請參見 Server 開發指南中消息發送服務。
消息免打擾
如果用戶不想受到消息提醒的干擾,融雲提供兩種消息免打擾方式:全局消息免打擾
和會話消息免打擾
。
全局消息免打擾,設置后用戶在接收通過融雲客戶端或服務端發送的所有消息時,如果客戶端在后台運行,將不會進行通知提醒,但可以收到消息內容。如果客戶端為離線狀態,將不會收到遠程通知提醒。
會話消息免打擾,根據會話類型、會話 Id 設置消息提醒狀態,設置后如果客戶端在后台運行時,會話中有新的消息,將不會進行通知提醒,可以收到消息內容。如果客戶端為離線狀態,將不會收到遠程通知提醒。
廣播與系統消息
廣播消息
廣播消息是給應用中的所有用戶發送一條消息,如果用戶未在線,會對所有未在線並滿足推送條件的用戶發送 Push
通知,發送方法請參見發送廣播消息方法。
系統消息
系統消息是用應用內的系統帳號向一個或多個用戶發送系統消息,如果目標用戶未在線,會對所有未在線並滿足推送條件的用戶發送 Push
通知,發送方法請參見發送系統消息方法。