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

前提条件
配置服务器域名

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

https://imapi.sinf.net;https://imagex.volcengineapi.com;
wss://frontier-sinf.zijieapi.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;
    const APP_KEY = '8637b29968eee56cca9ec68478c898a7';
    const SERVICE_ID = 117440515;
    const DEFAULT_USER_ID = '10001';

    const TOKEN_DOMAIN = 'https://imapi.sinf.net/imcloud';
    const API_DOMAIN = 'https://imapi.sinf.net';
    const FRONTIER_DOMAIN = 'wss://frontier-sinf.zijieapi.com/ws/v2';
    // 服务端 token 获取回调
    const fetchTokenFromServer = async ({ appId, userId }) => {
      const url = `${TOKEN_DOMAIN}/get_token?appID=${appId}&userID=${userId}`;
      const raw = await new Promise((resolve) => {
        wx.request({url, success: (res)=>{
          resolve(res.data)
        }});
      })
      const { Token } = raw;

      return Token;
    };
    // 创建实例
    const instance = new BytedIM(
      {
        appId: APP_ID,
        userId: DEFAULT_USER_ID,
        deviceId: DEFAULT_USER_ID,
        service: SERVICE_ID,
        appKey: APP_KEY,
        apiUrl: API_DOMAIN,
        frontierUrl: FRONTIER_DOMAIN,
        authType: im_proto.AuthType.TOKEN_AUTH,
        debug: true, // 启用后在控制台打印详细调试信息,正式上线时建议关闭
        token: () =>
          fetchTokenFromServer({
            appId: APP_ID,
            userId: DEFAULT_USER_ID,
          }),
      },
    );
    // 发起初始化请求
    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 conversation = (await instance.createConversation({participants: ['10001']})).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

相关文档