uniapp實現IM即時通訊仿微信聊天功能

来源:https://www.cnblogs.com/zegodeveloper/archive/2022/08/29/16636202.html
-Advertisement-
Play Games

本文介紹如何基於 UNIAPP 使用 即時通訊SDK ZIM SDK 快速實現基本的消息收發功能。 1 uniapp im 即時通訊功能 方案介紹 即時通訊SDK ZIM SDK 提供瞭如下接入方案: 在此方案中,您需要通過您自己的業務系統實現以下業務邏輯: 搭建客戶端的用戶管理邏輯,並下發用戶 I ...


本文介紹如何基於 UNIAPP 使用 即時通訊SDK ZIM SDK 快速實現基本的消息收發功能。

1 uniapp im 即時通訊功能 方案介紹

即時通訊SDK ZIM SDK 提供瞭如下接入方案:
image.png

在此方案中,您需要通過您自己的業務系統實現以下業務邏輯:

  • 搭建客戶端的用戶管理邏輯,並下發用戶 ID 用於客戶端登錄。
  • 鑒權 Token,建議由您的業務後臺自行實現,保證鑒權數據安全。

uni-app SDK 是一個基於原生 iOS/Android 平臺 ZIM SDK 的 uni-app Wrapper。開發者如需使用 uni-app 開發 Web 或小程式平臺的應用,請下載對應的 SDK 集成使用:下載 Web SDK下載小程式 SDK

2 集成 IM 即時通訊SDK 的前提條件

在使用 IM即時通訊 SDK ZIM SDK 前,請確保:

  • 已在 ZEGO 控制台 創建項目,獲取到了接入 IM即時通訊 ZIM SDK 服務所需的 AppID 和 ServerSecret。ZIM 服務許可權不是預設開啟的,使用前,請先在 ZEGO 控制台 自助開通 ZIM 即時通訊 服務(詳情請參考 項目管理 - 即時通訊),若無法開通 ZIM即時通訊 服務,請聯繫 ZEGO 技術支持開通。
  • 已獲取登錄 即時通訊 SDK 所需的 Token,詳情請參考 使用 Token 鑒權

3 集成 uniapp IM 即時通訊 SDK

3.1 (可選)新建項目

此步驟以如何創建新項目為例,如果是集成到已有項目,可忽略此步。

  1. 啟動 HBuilderX,選擇“文件 > 新建 > 項目”菜單。
    image.png

  2. 在出現的表單中,選擇 “uni-app” 平臺,並填寫項目名稱。
    image.png

  3. 單擊“創建”,即可創建項目。

3.2 導入ZIM 即時通訊 SDK

以下兩種方式可以任選一種導入。

方式一:在 ZEGO即構科技 官網下載 ZIM 即時通訊 SDK

  1. 請參考 下載 頁面,獲取最新版本的 SDK 到本地,並將得到的 “zego-ZIMUniPlugin.zip” 文件解壓縮。

  2. 將解壓縮後的文件夾,直接複製到項目工程根目錄下的 “nativeplugins” 文件夾,如果沒有該目錄,請手動創建。
    image.png

方式二:通過 uni-app 插件市場獲取 ZIM uni-app SDK

image.png

通過 uni-app 插件市場也有兩種方式導入,請任選一種:

  • 單擊 “購買(0元) for 雲打包”,選擇相應的項目導入。

  • 單擊 “下載 for 離線打包”,離線導入。

    1. 下載 SDK 到本地,並將得到的 “zego-ZIMUniPlugin.zip” 文件解壓縮。
    2. 將解壓縮後的文件夾,直接複製到項目工程根目錄下的 “nativeplugins” 文件夾,如果沒有該目錄,請手動創建。

3.3 在 uni-app 項目中導入插件

  1. 單擊項目目錄的 “manifest.json” 文件後,單擊 “App原生插件配置” 中的 “選擇本地插件” 或 “選擇雲端插件”。
    image.png

  2. 在彈出的選擇框中,選擇 “Zego ZIM 即時通訊 SDK” 後,單擊“確認”,即添加成功。

image.png

3.4 自定義調試基座

3.4.1 製作自定義調試基座

uni-app 官方自定義調試基座使用說明,請參考 什麼是自定義調試基座及使用說明

  1. 選擇 “運行 > 運行到手機或模擬器 > 製作自定義調試基座” 菜單。
    image.png

  2. 在彈出的界面中,按照 uni-app 教程,填寫相關信息,並單擊“打包”進行雲打包。
    image.png

    打包成功後,控制台會收到 uni-app 的相關提示。
    image.png

3.4.2 切換運行基座為自定義調試基座

自定義調試基座,請選擇“運行 > 運行到手機或模擬器 > 運行基座選擇 > 自定義調試基座”菜單。
image.png

3.5 集成 JS 封裝層

3.5.1 導入 JS 封裝層

以下兩種方式可以任選一種導入。

  • 方式一:請參考 下載 頁面,獲取最新版本的 JS 封裝層到本地,並將得到的 “zego-ZIMUniPlugin-JS.zip” 文件解壓縮。

    下載的 JS 封裝層可以拷貝到 HBuilderX 的 “js_sdk” 目錄中。(如無該目錄,請創建一個)
    image.png

  • 方式二:在插件市場的 Zego ZIM 即時通訊原生插件(JS 封裝層) 界面單擊右側的 “使用 HBuilderX 導入插件”。
    image.png

    導入的 JS 封裝層將存儲在 “js_sdk” 目錄中。
    image.png

3.5.2 在項目中引入 JS 封裝層

導入後,可以在業務代碼中引入 JS 封裝層,並調用 ZIM 相關介面,示例如下:

import { ZIM } from 'zego-zim-react-native';

const ZIM = require('zego-zim-react-native').ZIM;

4 實現仿微信的基本收發消息聊天功能

以下流程中,我們以客戶端 A 和 B 的消息交互為例,實現 1v1 通信功能:
image.png

4.1 uniapp 即時通訊 實現流程

請參考 跑通示例源碼 獲取源碼。

1. 導入ZIM 即時通訊 SDK 文件

請參考 3.2 導入 SDK,導入 SDK 文件。

2. 創建 ZIM即時通訊 實例

首先我們需要在項目中創建 ZIM 實例,一個實例對應的是一個用戶,表示一個用戶以客戶端的身份登錄系統。

例如,客戶端 A、B 分別調用 create(@create) 介面,傳入在 2 前提條件 中獲取到的 AppID,創建了 A、B 的實例:

var appID = xxxx;
// 靜態同步方法,創建 zim 實例,傳入 AppID
var zim = ZIM.create(appID);

3. 監聽回調事件

在客戶端登錄前,開發者可以通過調用 on 介面,自定義 ZIM 中的事件回調,接收到 SDK 異常、消息通知回調等的通知。

// 註冊監聽“運行時錯誤信息”的回調  
zim.on('error', function (zim, errorInfo) {
    console.log('error', errorInfo.code, errorInfo.message);
});

// 註冊監聽“網路連接狀態變更”的回調
zim.on('connectionStateChanged', function (zim, { state, event, extendedData }) {
    console.log('connectionStateChanged', state, event, extendedData);
});

// 註冊監聽“收到單聊消息”的回調
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
    console.log('receivePeerMessage', messageList, fromConversationID);
});

// 註冊監聽“令牌即將過期”的回調
zim.on('tokenWillExpire', function (zim, { second }) {
    console.log('tokenWillExpire', second);
    // 可以在這裡調用 renewToken 介面來更新 token
    // 新 token 生成可以參考上文
    zim.renewToken(token)
        .then(function({ token }){
            // 更新成功
        })
        .catch(function(err){
            // 更新失敗
        })
});

4. 登錄 ZIM 即時通訊

創建實例後,客戶端 A 和 B 需要登錄 ZIM,只有登錄成功後才可以開始發送、接收消息、更新 Token 等。

客戶端需要使用各自的用戶信息和 Token 進行登錄。調用 login 介面進行登錄,傳入用戶信息 ZIMUserInfo 對象,以及在 2 前提條件 中獲取到的 Token 進行鑒權,鑒權通過後才能登錄成功。

  • “userID”、“userName” 支持開發者自定義規則生成。建議開發者將 “userID” 設置為一個有意義的值,可將其與自己的業務賬號系統進行關聯。
  • 如果 Token 過期,需要在 tokenWillExpire 即將過期回調介面中,調用 renewToken 介面,更新 Token 後才能正常使用 SDK。
// 登錄時,需要開發者 按照 "使用 Token 鑒權" 文檔生成 token 即可
// userID 和 userName,最大 32 位元組的字元串。僅支持數字,英文字元 和 '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '`', ';', '’', ',', '.', '<', '>', '/', '\'。
var userInfo = { userID: 'xxxx', userName: 'xxxx' };
var token = '';

zim.login(userInfo, token)
    .then(function () {
        // 登錄成功
    })
    .catch(function (err) {
        // 登錄失敗
    });

5. 發送消息聊天驗證

客戶端 A 登錄成功後,可以向客戶端 B 發送消息。

目前 ZIM 支持的消息類型如下:

消息類型 說明 特性及適用場景
ZIMTextMessage(1) 文本消息。消息大小不超過 32 KB,單個客戶端發送頻率限製為 10 次/秒。 消息可靠有序,可存儲為歷史消息;一般適用於“單聊”、“群聊”等即時聊天的場景。
ZIMCommandMessage(2) 開發者可自定義數據類型的信令消息。消息大小不超過 5 KB,單個客戶端發送頻率限製為 10 次/秒。 支持更高的併發;一般適用於“語聊房”、“線上課堂”等房間內的即時聊天;房間解散後,消息不保存。
ZIMBarrageMessage(20) 房間內彈幕文本消息。消息大小不超過 5 KB,單個客戶端發送頻率無限制。

專門用於房間內的高頻、不可靠、允許丟掉的消息,一般適用於發送“彈幕消息”的場景中。

支持高併發,但不可靠,不保證消息送達。

以下為發送單聊文本消息為例:客戶端 A 可以調用 sendPeerMessage 介面,傳入客戶端 B 的 userID、消息內容等信息,即可發送一條文本消息到 B 的客戶端。

var toUserID = 'xxxx1';
var config = { 
    priority: 1 // 消息優先順序,取值為 低:1 預設,中:2,高:3
};

// 發送單聊 `Text` 信息
var messageTextObj = { type: 1, message: '文本消息內容' };
zim.sendPeerMessage(messageTextObj, toUserID, config)
    .then(function ({ message }) {
        // 發送成功
    })
    .catch(function (err) {
        // 發送失敗
    });

6. 接收消息聊天驗證

客戶端 B 登錄 ZIM 後,將會收到在 on 回調中設置的 receivePeerMessage 監聽介面,收到客戶端 A 發送過來的消息。

// 註冊監聽“收到單聊消息”的回調
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
    console.log('receivePeerMessage', messageList, fromConversationID);
});

7. 退出登錄

如果客戶端需要退出登錄,直接調用 logout 介面即可。

zim.logout();

8. 銷毀 ZIM 實例

如果不需要 ZIM 實例,可直接調用 destroy 介面,銷毀實例。

zim.destroy();

4.2 API 時序圖

通過以上的實現流程描述,API 介面調用時序圖如下:

image.png

5 uniapp跨平臺框架接入ZIM 即時通訊 SDK更多幫助

獲取本文即時通訊框架接入IM 即時通訊聊天的開發文檔、技術支持,訪問即構文檔中心IM即時通訊開發文檔頁,可多平臺實現聊天社交IM即時通訊功能;

近期有開發規劃的開發者可上即構官網查看,恰逢即構七周年全線音視頻產品1折的優惠,聯繫商務獲取"IM即時通訊一個月免費試用 "產品優惠;

音視頻場景解決方案分享,更多詳情可搜索官網(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 興業證券優理寶App聯合華為HMS Core,集成HMS Core統一掃碼服務,在提升掃碼成功率的同時,還支持C端用戶用手機端APP掃描手錶端二維碼,實現行情在手機與手錶間跨終端流轉,行情信息,抬腕可見,為用戶提供貼心金融服務。 為保持品牌色調一致性,興業證券在活動中會使用金色二維碼,在接入HMS ...
  • 作用域的概念 同級作用域 在一個作用域中聲明相同名稱的變數會發生變數名衝突的問題。假如在作用域 A 中聲明一個變數 a,作用域 B 也聲明一個變數 a,兩個作用域的變數都互不影響。 // 作用域 A { let a = 0; console.log(a); } // 作用域 B { let a = ...
  • 1 diff演算法到底是什麼? diff演算法是一種通過同層的樹節點進行比較的高效演算法,它可以不用頻繁操作DOM,而是選用虛擬DOM節點操作,說人話就是專門用來處理虛擬DOM節點的。 2 操作流程? 為了更好理解Vue的diff演算法,請先看一位B站大佬精心製作的 動畫演示。 通過上面視頻可以很好理解di ...
  • 為什麼要改變this指向? 我們知道bind,call,apply的作用都是用來改變this指向的,那為什麼要改變this指向呢?請看下麵的例子: var name="lucy"; let obj={ name:"martin", say:function () { console.log(this ...
  • JQuery篩選器方法 1.下一個元素 $("#id").next() $("#id").nextAll() $("#id").nextUntil("#i2") 2.上一個元素 $("#id").prev() $("#id").prevAll() $("#id").prevUntil("#i2") ...
  • 1. 提升用戶的開發體驗 開發體驗是衡量一個框架的指標之一 關於快速定位問題和列印警告信息和其他重要信息 Vue.js3 源碼中使用 initCustomFormatter 函數 該函數作用: 在開發環境下自定義formatter的 Chrome為例, 打開 DevTools 勾選 Console ...
  • 本文是深入淺出 ahooks 源碼系列文章的第十四篇,該系列已整理成文檔-地址。覺得還不錯,給個 star 支持一下哈,Thanks。 上一篇我們探討了 ahooks 對 DOM 類 Hooks 使用規範,以及源碼中是如何去做處理的。接下來我們就針對關於 DOM 的各個 Hook 封裝進行解讀。 u ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近幾天在學習three.js ,因為我相信只有實踐才能出真理,搗鼓搗鼓做了一個簡易的全景圖,這裡主要是分享做這個vue版全景圖中遇到的問題,有些代碼可能與其他做過全景圖的大佬有些相似畢竟原因都差不多 😀 本文屬於技術總結類的文章 將介 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...