SDK · 微信小程序
@imcore/sdk/wechat-miniprogram 复用完整的 imcore 协议和业务 API,并适配
微信小程序的 SocketTask、异步存储、应用生命周期、网络变化及文件上传。
安装
npm install ./imcore-sdk-js-<版本>.tgz
在微信开发者工具中开启“使用 npm 模块”,然后执行“工具 -> 构建 npm”。服务端域名须加入
小程序后台的 socket 和 uploadFile 合法域名;生产环境使用 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.onAppShow、wx.onAppHide 和 wx.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();