# IM 即时通信

即时通信相关,包含对官方API的封装、消息数据的格式化等。

# 1. TIM

获取 TIM,利用条件编译区分不同平台。

import { TIM } from 'press-ui/common/im/helper/tim'

# 2. IM

对 IM 相关 API 的封装,支持H5、微信小程序、QQ小程序。

# 2.1. 初始化

import { IM } from 'press-ui/common/im/im';

const TIM_APP_ID = 123;

const IMHandler = new IM({
  appId: TIM_APP_ID,
});

# 2.2. 登录

// 登录
IMHandler.innerLogin({
  userId: '123',
  userSig: '123',
}).then(() => {});


// 登出
IMHandler.innerLogout()
  .then(() => {});


// 更新个人资料
IMHandler.updateMyProfile(profile)
  .then(() => {});

# 2.3. 会话相关

// 获取全量的会话列表
IMHandler.getConversationList()
  .then(() => {});


// 删除某条会话
IMHandler.deleteConversation('conversationId')
  .then(() => {});


// 将所有会话的未读消息全部设置为已读
IMHandler.sendAllMegRead()
  .then(() => {});


// 将某会话下所有未读消息已读上报
IMHandler.setMessageRead('conversationId')
  .then(() => {});

# 2.4. 消息相关

// 发送消息
IMHandler.sendMessage({
  to: '123',
  text: '123'
}).then(() => {});


// 获取消息列表
IMHandler.getMessageList({
  id: 'C2C123',
  nextMsgId: 'xxx',
}).then(() => {});

# 2.5. 设置回调

const callback = () => {};

// 接收到新消息
IMHandler.setReceivedMessagesListener(callback);


// 账号被踢出
IMHandler.setKickedOutListener(callback);


// IM状态变为ready
IMHandler.setReadyListener(callback);


// 会话列表变化
IMHandler.setConversationUpdateListener(callback);


// 消息未读数变化
IMHandler.setUnreadMsgCountUpdatedListener(callback);

# 2.6. 其他

waitReady

// 等待状态变为ready后执行
IMHandler.waitReady()
  .then(() => {});

还有一些实例属性:

// 是否为ready状态
console.log(IMHandler.isReady);

// 是否已登录
console.log(IMHandler.isOnline);

# 3. 消息列表处理

对消息列表数据的处理,包括:

  • 插入时间
  • 删除撤回的消息
  • 格式化json文本
  • 用户信息处理
import { baseFormatMessageDetailList } from 'press-ui/common/im/message-detail/format';

const messageList = baseFormatMessageDetailList(list, myInfo, oppositeInfo, lastTimeStampTag);

# 4. 常见问题

# 4.1. 为什么封装?

本工具是对官方API (opens new window)的封装,方便业务侧“一行代码”调用,减少使用成本。

比如设置事件回调时,业务侧不需引用状态、事件的常量,开发效率高,代码清晰。

另外,很多API需ready后才可执行,比如getMessageListsendMessageupdateMyProfile,使用本工具后,会自动等待ready

# 4.2. Message Detail

Message Detail 模块已迁移至 Press Plus 中,可批量替换 press-ui/common/im/message-detail/*press-plus/common/im/message-detail/*

横屏
最后更新时间: 2024/11/19 04:11:54