本文介绍如何创建一个 IMCloud 微信小程序项目,实现即时通讯功能。

前提条件
配置服务器域名

进入微信公众平台 -> </> 开发 -> 开发设置,将如下域名配到服务器域名里。

https://imapi.volcvideo.com;
wss://frontier-sinf.ivolces.com;
https://tos-lf-x.snssdk.com;https://tos-hl-x.snssdk.com;https://tos-nc2-slb2.bytecdn.cn;https://tos-nc2-slb1.bytecdn.cn;

集成 SDK
  1. 获取 IM Cloud 微信小程序 包。

  2. 复制 im.min.js 到 项目 lib 目录中。

.
├── lib
│   ├── im.min.js
├── pages
│   ├── index
│   │   ├── ...
  1. 在你的微信小程序中,添加对 IM Cloud 的引用。
const { im_proto, BytedIM } = require('../../lib/im.min')
// SDK 调用代码...
javascript
实现实时通讯功能
SDK 初始化

在页面组件中编写初始化代码。

// index.js
const { im_proto, BytedIM } = require('../../lib/im.min')

Page({
  data: {
  },
  onLoad() {
    const APP_ID = 666666; //你可以从控制台 https://console.volcengine.com/rtc/workplaceRTC 获取你创建的 AppId。
    const DEFAULT_USER_ID = '10001'; //用户 ID,必须为 整数且大于 0。该 UserId 需要和生成 Token 的 Userid 保持一致。 关于 Token 鉴权,参看https://www.volcengine.com/docs/6348/291043。
    const API_DOMAIN = 'https://imapi.volcvideo.com';
    const FRONTIER_DOMAIN = 'wss://frontier-sinf.ivolces.com/ws/v2';
    
    // 创建实例
    const instance = new BytedIM(
      {
        appId: APP_ID,
        userId: DEFAULT_USER_ID,
        deviceId: DEFAULT_USER_ID,
        apiUrl: API_DOMAIN,
        frontierUrl: FRONTIER_DOMAIN,
        debug: true, // 启用后在控制台打印详细调试信息,正式上线时建议关闭
        token: "" //你可以在 IM 控制台 https://console.volcengine.com/rtc/workplaceRTC 获取临时 token。
      },
    );
    // 发起初始化请求
    instance.init().then(() => {
      console.log('init success');
      let conversationList = instance.getConversationList();
      console.log(conversationList); //如果是新用户,没有会话,这里为空
      for (let conv of conversationList) {
        console.log(`${conv.id} ${conv.coreInfo.name}`); 
      }
    }).catch((err) => {
      console.log('init fail', err)
    });
  },
})
javascript

运行效果:

绑定收消息事件

绑定后当消息数据有更新(增删查改)时,都会调用传入的回调函数。

instance.event.subscribe(IMEvent.MessageUpsert, (message) => {
  console.log('消息更新 MessageUpsert', message.conversationId, message.content);
});
javascript
文本消息收发

假设当前用户 ID 为 10009,往 ID 为 10001 的用户发送 hello。

async function send() {
  /* 如果之前没有对话过,需要先创建会话 */
  const result = await instance.createConversation({
    participants: ['10001']
  });
  const conversation = result.payload;
  const message = await instance.createTextMessage({
    conversation,
    content: 'hello'
  });
  const resp = await instance.sendMessage({
    message
  });
  console.log('发送成功', resp)
}
javascript

执行后发送方(10009)视角:

接收方(10001)视角:

这样就完成了基本的消息收发。

获取会话列表
let conversationList = instance.getConversationList();
console.log(conversationList);
javascript

配置插件以调用更多 API

为了降低最终打包体积,SDK 对部分功能做了拆分处理,部分功能需要额外配置插件才可调用,如 MultimediaPlugin 中的接口,否则会提示实例无对应方法。以 createImageMessage 为例,报错提示如下:

alt

如需使用这部分功能,则需要在创建实例时向实例安装 MultimediaPlugin:

import { BytedIM, MultimediaPlugin } from '@volcengine/im-mp-sdk';

// IM SDK 实例化
new BytedIM(
    {
        // 此处省略若干配置
    },
    [MultimediaPlugin] // 安装多媒体插件
);
javascript
相关文档