实现单聊/群聊消息收发

更新时间: 2024/04/16 14:54:25

网易云信 IM 即时通讯服务提供一整套即时通讯基础能力,助您快速实现多样化的即时通讯场景。

本文主要介绍通过集成 NetEase IM SDK(NIM SDK)并调用 API,快速实现单聊/群聊消息收发功能。

群聊消息收发需要先进入群组,后续流程与单聊消息收发相同。

使用前准备

实现流程

流程概览

实现单聊消息收发的流程,可分为下图所示的 4 大步骤。

uml diagram

步骤 1:集成 SDK

SDK 以 npm 包的形式提供,请前往 nim-web-sdk-ng 获取 npm 包。

  1. 执行以下命令安装 npm 包。
npm install nim-web-sdk-ng@">=10"
  1. 通过 import 或者 require 引入入口模块。根据开发环境不同,你可以选择不同的产物。目前产物包括:
业务场景 需引入的模块 初始化方法
IM 浏览器 NIM_BROWSER_SDK NIM.getInstance
IM UniApp NIM_UNIAPP_SDK NIM.getInstance
IM 小程序 NIM_MINIAPP_SDK NIM.getInstance
Chatroom 浏览器 CHATROOM_BROWSER_SDK CHATROOM.newInstance
Chatroom UniApp CHATROOM_UNIAPP_SDK CHATROOM.newInstance
Chatroom 小程序 CHATROOM_MINIAPP_SDK CHATROOM.newInstance
  • 若开发环境为浏览器,请按照以下路径引入:
// 引入方式一:引入默认路径
import NIM from 'nim-web-sdk-ng'
// 引入方式二:指定引入路径。该路径等效于默认路径
import NIM from 'nim-web-sdk-ng/dist/v2/NIM_BROWSER_SDK'
  • 若开发环境为uni-app,请按照以下路径引入:
import NIM from 'nim-web-sdk-ng/dist/v2/NIM_UNIAPP_SDK'
  • 若开发环境为小程序,由于小程序构建 npm 之后,只有默认路径文件才会被复制到 miniprogram_npm 中,而 NIM SDK 小程序包不是默认路径。因此,需要将 nim-web-sdk-ng/dist/v2 拷贝到项目的其他目录中,然后引入:
const NIM = require('{相对路径}/NIM_MINIAPP_SDK')

步骤 2:初始化 SDK

将 NIM SDK 集成到客户端后,需要先完成 NIM 实例的初始化才能使用其他功能。

本文主要介绍 NIM_BROWSER_SDK 的初始化。示例代码如下:

  • 浏览器环境,及运行在非小程序的 uni-app 环境,使用下面方式初始化:

    typescriptconst nim = NIM.getInstance({
        appkey: "YOUR_APPKEY",
        debugLevel: "debug"
        apiVersion: "v2"
    })
    
  • 小程序环境,及运行在小程序的 uni-app 环境,使用下面方式初始化。之所以小程序需要和非小程序区分,是因为小程序需要设置域名白名单,因此需要返回固定域名的 lbs 请求地址

    typescriptconst nim = NIM.getInstance({
        appkey: "YOUR_APPKEY",
        debugLevel: "debug"
        apiVersion: "v2"
    }, {
      V2NIMLoginServiceConfig: {
        "lbsUrls": [
          "https://lbs.netease.im/lbs/wxwebconf.jsp"
        ],
        "linkUrl": "wlnimsc0.netease.im"
      }
    })
    

以上提供了一个简化的初始化示例,更多 NIM 实例的初始化说明,参见初始化

步骤 3:登录 IM

客户端用户在使用云信即时通讯功能前需要先登录云信 IM 服务器。

建议参考 IM 登录最佳实践实现 IM 登录以及相应的上层应用逻辑。


调用 login 方法进行登录。以静态 Token 登录为例,示例代码如下:

typescripttry {
  await nim1.V2NIMLoginService.login("ACCOUNT_ID", "TOKEN", {
    "forceMode": false
  })  
} catch (err) {
  // TODO failed, check code
  // console.log(err.code)
}

其他登录方式请参见登录及登出 IM

步骤 4:消息收发

本节以用户 A 和用户 B 的消息交互为例,介绍快速实现单聊消息收发的流程。更多消息类型的收发,请参见消息收发

创建或加入群组后,用户发送和接收消息的接口与单聊消息收发相同,区别在于会话类型(V2NIMConversationType)的参数配置,V2NIM_CONVERSATION_TYPE_TEAM(2) 为高级群,V2NIM_CONVERSATION_TYPE_SUPER_TEAM(3) 为超大群。

  1. 用户 B 注册消息监听器,监听消息接收回调事件 onReceiveMessages。示例代码如下:

    typescriptnim.V2NIMMessageService.on("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    

    如需移除登录相关监听器,可调用 off("EventName")

    typescriptnim.V2NIMMessageService.off("onReceiveMessages", function (messages: V2NIMMessage[]) {})
    
  2. 用户 A 调用 createTextMessage 方法构建文本消息,然后调用 sendMessage 方法向用户 B 发送文本消息。示例代码如下:

    typescripttry {
    // 创建一条文本消息
    const message: V2NIMMessage = nim.V2NIMMessageCreator.createTextMessage("hello")
    // 发送消息
    const res: V2NIMSendMessageResult = await nim.V2NIMMessageService.sendMessage(message, 'test1|1|test2')
    // todo success
    } catch (err) {
    // todo error
    }
    

    目前 NIM SDK 支持多种消息类型,包括文本消息、图片消息、语音消息、视频消息、文件消息、地理位置消息、提示消息、通知消息以及自定义消息。具体请参见消息收发

  3. 用户 B 通过 onReceiveMessages 回调收到文本消息。

后续步骤

为保障通信安全,如果您在调试环境中的使用的是云信控制台生成的测试用 IM 账号 和 token,请确保在后续的正式生产环境中,将其替换为通过 IM 服务端 API 生成的正式 IM 账号和 token

此文档是否对你有帮助?
有帮助
去反馈
  • 使用前准备
  • 实现流程
  • 流程概览
  • 步骤 1:集成 SDK
  • 步骤 2:初始化 SDK
  • 步骤 3:登录 IM
  • 步骤 4:消息收发
  • 后续步骤