1. 程式人生 > >超級乾貨-融雲訊息與推送概念答疑

超級乾貨-融雲訊息與推送概念答疑

廣大融雲開發者在進行融雲相關開發過程中,經常遇到對訊息體系、推送機制的各種概念困擾。同時,大家對通知、推送,廣播、系統訊息等概念又沒有統一的認識,造成了認知和溝通困難。這裡我們為大家詳細的解答下融雲的整個訊息推送體系設計,以便大家可以更好的使用融雲進行開發。

命名約定與概念解析

融雲所有技術和業務文件都將遵循下述命名約定,大家在提交工單時,也請注意用準確的概念描述您的需求或者問題。

通知

通知(Notification)是一種使用者介面展現概念,是指在裝置端以某種形式彈出一條提示。

在 iOS 平臺,表現為如圖:

image iOS 通知

在 Android 平臺,表現為如圖:

image 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 彈出的提示,其實是由兩種完全不同的機制產生的:

image 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 使用者,傳送遠端通知。流程如下:

第二種:線上狀態

使用者線上情況下,則會直接向客戶端傳送通知訊息。流程如下:

注意:應用切換至後臺 2 分鐘後,將自動切斷與伺服器的連線,此時應用為離線狀態,新訊息將會以 Push 方式推送。 使用者線上狀態下,應用在前臺顯示時,不會收到訊息通知。

自定義推送文字

開發者可以通過 pushContent 自定義設定使用者收到推送訊息時顯示的內容。如果推送訊息時未填寫 pushContent 則顯示預設訊息內容,如:文字訊息顯示文字內容,圖片訊息顯示為“[圖片]”。

開發者使用 pushContent 自定義推送文字後,需要在客戶端實現 – onRCIMCustomLocalNotification:withSenderName: 此方法是當 App 處於後臺時,接收到訊息並彈出本地通知的回撥方法,參見 API 說明文件

注意:如果開發者推送的不是融雲內建的訊息型別,為自定義訊息型別時,pushContent 必須填寫,否則使用者無法收到推送通知。 詳細請參見 Server 開發指南中訊息傳送服務

自定義推送聲音與振動

推送聲音,使用者收到推送訊息時的通知提示音,融雲訊息推送提示聲音與振動,預設為手機系統設定的聲音與振動提示狀態。

在 iOS 平臺下,開發者可通過開發者後臺,應用標識 -> 自定義 Push 聲音 中輸入 iOS 系統聲音名,重新設定生產和開發環境的推送提示音,如果開發者使用的是自己建立的聲音,而不是 iOS 系統聲音,需要開發者將自己建立的聲音一同打包到應用程式中,然後在開發者後臺 自定義 Push 聲音 處輸入聲音檔名儲存即可。

image 自定義 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 通知,傳送方法請參見傳送系統訊息方法

相關推薦

超級乾貨-訊息概念答疑

廣大融雲開發者在進行融雲相關開發過程中,經常遇到對訊息體系、推送機制的各種概念困擾。同時,大家對通知、推送,廣播、系統訊息等概念又沒有統一的認識,造成了認知和溝通困難。這裡我們為大家詳細的解答下融雲的整個訊息和推送體系設計,以便大家可以更好的使用融雲進行開發。 命名約定

git 創建分支

ref clas align check 抓取 tps ble git push ria 1:創建本地分支 dev $ git branch dev 切換至 dev 分支 $ git checkout dev 2:查看當前分支 $ git branch * dev

JavaScript仿通知欄新訊息實時更新效果

用到websocket做訊息推送,其中有這樣的一個效果,在訊息列表的模組,接收到很多條資訊,展示在介面的是最近的十條接受到的訊息,實時更新模組,每次接受一條訊息,都會展示在最頂部,舊的訊息排列在地下,大致效果如下所示。 用js仿寫了一個簡單的,關於通知欄新訊息實時推送更新效果,程式碼如下:

轉載自-亭鈺wang,php 訊息實時(反ajax

入口檔案index.html <!DOCTYPE HTML> <html> <head>     <title>反ajax推送</title>     <style>  

JAVA接收第三方的訊息,物聯網的裝置端的訊息

裝置端,進行訊息推送,就是裝置的一些資訊,比如電量的值,和是否推送成功的狀態值 其推送的值的格式是json的格式,推送的標識的cmd,我這裡列子是cmd:"signal_test_status" 接收推送的程式碼是  */ @RestController("DeviceS

laravel 使用阿里【郵件】服務傳送郵件通知

使用這個包:https://github.com/HyanCat/aliyun-direct-mail 1、安裝: composer require hyancat/aliyun-direct-mail:dev-master 2、在 config/services.php 中新增如下

Asp.net SignalR 實現服務端訊息實時到所有Web端

ASP .NET SignalR是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。實際上 Asp.net SignalR 2 實現 服務端訊息推送到Web端, 更加簡單

突破微信小程式模板訊息限制

“模版訊息”是小程式非常重要且可主動觸達使用者的一種能力。愛鮮蜂小程式通過“模版訊息”,建立一套使用者喚醒機制,達到提升使用者復購率的目的。小打卡小程式的近30天訪問來源資料顯示,有20%左右的使用者通過模板訊息這個入口進入小打卡,在各種來源中排名第三位,可見模板訊息

java開發企業微信-------訊息自動

要實現企業微信中訊息推送的功能,類似如下這種: 企業微信訊息實體類  package com.ducetech.jeewx.api.wxsendmsg.model; import java.io.Serializable; /** * @ClassName: WeCha

GitHub學習(三):Phpstorm中的git使用(1)--建立本地倉庫

這段時間在學php的laravel框架,用的開發軟體是xampp建站整合軟體和phpstorm,前幾天做完了表單處理工程,因為上班和在家用的是兩臺電腦,所以需要用github來儲存程式碼,在這裡記錄下phpstorm中的git使用,以免以後忘了。 我已經寫了一部分的程式碼的工程,我現在的第一步就是

C#FFmpeg視訊採集RTMP伺服器程式碼思路整理

C#視訊採集與推送RTMP伺服器程式碼思路整理:在看過FFmpeg後是否認為寫C#的視訊流採集和推送還是一頭霧水啊?深有此感。領導是C#的高手,說可以通過C或C++的程式碼直接複製貼上到C#工程然後進行適配程式碼就可以了,因為C#使用ffmpeg的類名和變數、方法等都與C保持

php微信公眾號模板訊息主動

public function get_token(){ $m = new Common(); $appid = $m->get_conf('UNION_WECHAT_MP_APPID'); $appsec = $m->ge

Java Spring WebSocket實現後端訊息主動

這篇文章將介紹如何構建一個簡單的WebSocket訊息推送Demo使用eclipse建立maven專案後引入相關的依賴jar包,如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://m

Spring+Websocket實現訊息

本文主要有三個步驟 1、使用者登入後建立websocket連線,預設選擇websocket連線,如果瀏覽器不支援,則使用sockjs進行模擬連線 2、建立連線後,服務端返回該使用者的未讀訊息 3、服務端進行相關操作後,推送給某一個使用者或者所有使用者新訊息 相關

springboot整合rabbitMQ實現訊息

RabbitMQ訊息中介軟體元件,目前比較流行的訊息中介軟體有:RabbitMQ、RocketMQ、ActiveMQ、Kafka等。 我的程式碼中用的是RabbitMQ,先介紹幾個概念:       一:訊息佇列的特性如下: 非同步性,將耗時的同步操作通過以傳送訊息的方

springboot+rabbitmq+websocket廣播模式進行訊息實時

如何安裝rabbitmq在此就不再贅述了,直接上程式碼,使用的direct佇列模式。依賴 <dependency> <groupId>org.springframework.boot</groupId>

利用 socket.io 實現訊息實時

專案背景介紹 最近在寫的專案中存在著社交模組,需要實現這樣的一個功能:當發生了使用者被點贊、評論、關注等操作時,需要由伺服器向用戶實時地推送一條訊息。最終完成的專案地址為:https://github.com/noiron/socket-message-push,這裡將介紹一下實現的思路及部分程式碼。

訊息暱稱以及頭像設定的方法

融雲 融雲認為,每一個設計良好且功能健全的 App 都應該能夠在本地獲取、快取並更新使用者資訊。所以,融雲不維護使用者基本資訊(使用者 Id、暱稱、頭像)。此外,App 提供使用者資訊也避免了由於

基於sse的訊息單向機制

     訊息推送現在基本上是web應用的標配,在做一個社交類網站時,本人一開始由於對這方面的技術不夠熟練,想採用最新的websocket技術,卻一直失敗,最終採用了最傳統的輪詢方式,十分浪費資源。今天看了spring boot 實戰這本書,裡面介紹了一種我之前從未了解過的

結合 WebService 實現訊息 主動到客戶端

說明:不需要複雜的技術,不需要長輪循,還是老技術實現,上程式碼 1.訊息實體 public class NoticeModel { public string Sender { get; set; } public string