SDK · 微信小程序

@imcore/sdk/wechat-miniprogram 复用完整的 imcore 协议和业务 API,并适配 微信小程序的 SocketTask、异步存储、应用生命周期、网络变化及文件上传。

安装

npm install ./imcore-sdk-js-<>.tgz

在微信开发者工具中开启“使用 npm 模块”,然后执行“工具 -> 构建 npm”。服务端域名须加入 小程序后台的 socketuploadFile 合法域名;生产环境使用 wss://https://

使用

import { createMiniProgramClient } from '@imcore/sdk/wechat-miniprogram';

const im = createMiniProgramClient({
  wx,
  url: 'wss://im.example.com/acc',
  auth: {
    getToken: () => wx.getStorageSync('access_token'),
    login: { userID: '1001', userName: 'alice' },
  },
  // 多账号应用应把 userID 放进前缀,避免缓存和离线队列串号。
  storageNamespace: '@my-app/im/1001/',
});

App({
  async onLaunch() {
    // 登录凭证准备好后启动。
    await im.start();
  },
  onUnload() {
    im.stop();
  },
});

im.on('chat_message', (message) => console.log(message));

async function sendHello() {
  await im.dm.send({ targetUserID: '1002', text: '你好' });
}

start() 会监听 wx.onAppShowwx.onAppHidewx.onNetworkStatusChange:默认隐藏时断开, 回到前台或网络恢复后自动重连并重新登录。重复调用 start()/stop() 是安全的。

上传图片或文件

const selected = await wx.chooseMedia({ count: 1, mediaType: ['image'] });
const uploaded = await im.media.upload({
  file: selected.tempFiles[0].tempFilePath,
  type: 'image',
  scene: 'dm',
  targetUserID: '1002',
});

await im.dm.send({
  targetUserID: '1002',
  segments: [uploaded.segment],
});

上传走 wx.uploadFile。默认根据 WebSocket 地址推导 HTTP 地址,例如 wss://im.example.com/acc 对应 https://im.example.com;不同域名时传 httpBaseUrl

离线与缓存

SDK 默认把消息缓存、草稿和离线队列写入微信异步存储。多账号必须设置不同的 storageNamespace。断网发送可使用 sendQueued,认证恢复后队列默认自动刷新:

await im.dm.sendQueued({ targetUserID: '1002', text: '网络恢复后发送' });

App 生命周期

建议把客户端放在 App 单例中,页面只订阅事件并在卸载时解除订阅;不要为每个页面创建 连接。退出账号时必须调用:

im.stop();