本文介紹如何基于 UNIAPP 使用 即時通訊SDK ZIM SDK 快速實現(xiàn)基本的消息收發(fā)功能。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比海西網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式海西網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋海西地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
即時通訊SDK ZIM SDK 提供了如下接入方案:
在此方案中,您需要通過您自己的業(yè)務系統(tǒng)實現(xiàn)以下業(yè)務邏輯:
uni-app SDK 是一個基于原生 iOS/Android 平臺 ZIM SDK 的 uni-app Wrapper。開發(fā)者如需使用 uni-app 開發(fā) Web 或小程序平臺的應用,請下載對應的 SDK 集成使用:下載 Web SDK 和 下載小程序 SDK。
在使用 IM即時通訊 SDK ZIM SDK 前,請確保:
此步驟以如何創(chuàng)建新項目為例,如果是集成到已有項目,可忽略此步。
啟動 HBuilderX,選擇“文件 > 新建 > 項目”菜單。
在出現(xiàn)的表單中,選擇 “uni-app” 平臺,并填寫項目名稱。
單擊“創(chuàng)建”,即可創(chuàng)建項目。
以下兩種方式可以任選一種導入。
請參考 下載 頁面,獲取最新版本的 SDK 到本地,并將得到的 “zego-ZIMUniPlugin.zip” 文件解壓縮。
將解壓縮后的文件夾,直接復制到項目工程根目錄下的 “nativeplugins” 文件夾,如果沒有該目錄,請手動創(chuàng)建。
通過 uni-app 插件市場也有兩種方式導入,請任選一種:
單擊 “購買(0元) for 云打包”,選擇相應的項目導入。
單擊 “下載 for 離線打包”,離線導入。
單擊項目目錄的 “manifest.json” 文件后,單擊 “App原生插件配置” 中的 “選擇本地插件” 或 “選擇云端插件”。
在彈出的選擇框中,選擇 “Zego ZIM 即時通訊 SDK” 后,單擊“確認”,即添加成功。
uni-app 官方自定義調(diào)試基座使用說明,請參考 什么是自定義調(diào)試基座及使用說明 。
選擇 “運行 > 運行到手機或模擬器 > 制作自定義調(diào)試基座” 菜單。
在彈出的界面中,按照 uni-app 教程,填寫相關信息,并單擊“打包”進行云打包。
打包成功后,控制臺會收到 uni-app 的相關提示。
自定義調(diào)試基座,請選擇“運行 > 運行到手機或模擬器 > 運行基座選擇 > 自定義調(diào)試基座”菜單。
以下兩種方式可以任選一種導入。
方式一:請參考 下載 頁面,獲取最新版本的 JS 封裝層到本地,并將得到的 “zego-ZIMUniPlugin-JS.zip” 文件解壓縮。
下載的 JS 封裝層可以拷貝到 HBuilderX 的 “js_sdk” 目錄中。(如無該目錄,請創(chuàng)建一個)
方式二:在插件市場的 Zego ZIM 即時通訊原生插件(JS 封裝層) 界面單擊右側(cè)的 “使用 HBuilderX 導入插件”。
導入的 JS 封裝層將存儲在 “js_sdk” 目錄中。
導入后,可以在業(yè)務代碼中引入 JS 封裝層,并調(diào)用 ZIM 相關接口,示例如下:
import { ZIM } from 'zego-zim-react-native';
或
const ZIM = require('zego-zim-react-native').ZIM;
以下流程中,我們以客戶端 A 和 B 的消息交互為例,實現(xiàn) 1v1 通信功能:
請參考 跑通示例源碼 獲取源碼。
請參考 3.2 導入 SDK,導入 SDK 文件。
首先我們需要在項目中創(chuàng)建 ZIM 實例,一個實例對應的是一個用戶,表示一個用戶以客戶端的身份登錄系統(tǒng)。
例如,客戶端 A、B 分別調(diào)用 create
(@create) 接口,傳入在 2 前提條件 中獲取到的 AppID,創(chuàng)建了 A、B 的實例:
var appID = xxxx;
// 靜態(tài)同步方法,創(chuàng)建 zim 實例,傳入 AppID
var zim = ZIM.create(appID);
在客戶端登錄前,開發(fā)者可以通過調(diào)用 on
接口,自定義 ZIM 中的事件回調(diào),接收到 SDK 異常、消息通知回調(diào)等的通知。
// 注冊監(jiān)聽“運行時錯誤信息”的回調(diào)
zim.on('error', function (zim, errorInfo) {
console.log('error', errorInfo.code, errorInfo.message);
});
// 注冊監(jiān)聽“網(wǎng)絡連接狀態(tài)變更”的回調(diào)
zim.on('connectionStateChanged', function (zim, { state, event, extendedData }) {
console.log('connectionStateChanged', state, event, extendedData);
});
// 注冊監(jiān)聽“收到單聊消息”的回調(diào)
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
console.log('receivePeerMessage', messageList, fromConversationID);
});
// 注冊監(jiān)聽“令牌即將過期”的回調(diào)
zim.on('tokenWillExpire', function (zim, { second }) {
console.log('tokenWillExpire', second);
// 可以在這里調(diào)用 renewToken 接口來更新 token
// 新 token 生成可以參考上文
zim.renewToken(token)
.then(function({ token }){
// 更新成功
})
.catch(function(err){
// 更新失敗
})
});
創(chuàng)建實例后,客戶端 A 和 B 需要登錄 ZIM,只有登錄成功后才可以開始發(fā)送、接收消息、更新 Token 等。
客戶端需要使用各自的用戶信息和 Token 進行登錄。調(diào)用 login
接口進行登錄,傳入用戶信息 ZIMUserInfo
對象,以及在 2 前提條件 中獲取到的 Token 進行鑒權,鑒權通過后才能登錄成功。
tokenWillExpire
即將過期回調(diào)接口中,調(diào)用 renewToken
接口,更新 Token 后才能正常使用 SDK。// 登錄時,需要開發(fā)者 按照 "使用 Token 鑒權" 文檔生成 token 即可
// userID 和 userName,最大 32 字節(jié)的字符串。僅支持數(shù)字,英文字符 和 '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '`', ';', '’', ',', '.', '<', '>', '/', '\'。
var userInfo = { userID: 'xxxx', userName: 'xxxx' };
var token = '';
zim.login(userInfo, token)
.then(function () {
// 登錄成功
})
.catch(function (err) {
// 登錄失敗
});
客戶端 A 登錄成功后,可以向客戶端 B 發(fā)送消息。
目前 ZIM 支持的消息類型如下:
消息類型 | 說明 | 特性及適用場景 |
---|---|---|
ZIMTextMessage(1) | 文本消息。消息大小不超過 32 KB,單個客戶端發(fā)送頻率限制為 10 次/秒。 | 消息可靠有序,可存儲為歷史消息;一般適用于“單聊”、“群聊”等即時聊天的場景。 |
ZIMCommandMessage(2) | 開發(fā)者可自定義數(shù)據(jù)類型的信令消息。消息大小不超過 5 KB,單個客戶端發(fā)送頻率限制為 10 次/秒。 | 支持更高的并發(fā);一般適用于“語聊房”、“在線課堂”等房間內(nèi)的即時聊天;房間解散后,消息不保存。 |
ZIMBarrageMessage(20) | 房間內(nèi)彈幕文本消息。消息大小不超過 5 KB,單個客戶端發(fā)送頻率無限制。 | 專門用于房間內(nèi)的高頻、不可靠、允許丟掉的消息,一般適用于發(fā)送“彈幕消息”的場景中。 支持高并發(fā),但不可靠,不保證消息送達。 |
以下為發(fā)送單聊文本消息
為例:客戶端 A 可以調(diào)用 sendPeerMessage
接口,傳入客戶端 B 的 userID、消息內(nèi)容等信息,即可發(fā)送一條文本消息
到 B 的客戶端。
var toUserID = 'xxxx1';
var config = {
priority: 1 // 消息優(yōu)先級,取值為 低:1 默認,中:2,高:3
};
// 發(fā)送單聊 `Text` 信息
var messageTextObj = { type: 1, message: '文本消息內(nèi)容' };
zim.sendPeerMessage(messageTextObj, toUserID, config)
.then(function ({ message }) {
// 發(fā)送成功
})
.catch(function (err) {
// 發(fā)送失敗
});
客戶端 B 登錄 ZIM 后,將會收到在 on
回調(diào)中設置的 receivePeerMessage
監(jiān)聽接口,收到客戶端 A 發(fā)送過來的消息。
// 注冊監(jiān)聽“收到單聊消息”的回調(diào)
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
console.log('receivePeerMessage', messageList, fromConversationID);
});
如果客戶端需要退出登錄,直接調(diào)用 logout
接口即可。
zim.logout();
如果不需要 ZIM 實例,可直接調(diào)用 destroy
接口,銷毀實例。
zim.destroy();
通過以上的實現(xiàn)流程描述,API 接口調(diào)用時序圖如下:
獲取本文即時通訊框架接入IM 即時通訊聊天的開發(fā)文檔、技術支持,訪問即構(gòu)文檔中心IM即時通訊開發(fā)文檔頁,可多平臺實現(xiàn)聊天社交IM即時通訊功能;
近期有開發(fā)規(guī)劃的開發(fā)者可上即構(gòu)官網(wǎng)查看,恰逢即構(gòu)七周年全線音視頻產(chǎn)品1折的優(yōu)惠,聯(lián)系商務獲取"IM即時通訊一個月免費試用 "產(chǎn)品優(yōu)惠;