跳转到正文

Web / H5 方法参考 ​

本页逐项说明宿主可以调用的方法。先按 Web / H5 接入创建工作台,再按需要调用。这里的方法参数使用 JavaScript 的驼峰写法,例如 userId、expireAt;HTTP 返回的 user_id、expire_at 需要在宿主取票代码中转换。

返回 Promise<void> 的方法需要 await:正常完成时没有额外数据,失败时进入 catch。返回 void 的方法同步执行,没有返回参数。

创建实例:createIM(options) ​

创建一个独立 SDK 实例,尚未挂载界面或登录。

参数类型必填说明
options.serverUrlstring是部署根地址,例如 https://example.com,不包含 /app/sdk、查询参数或 URL 片段。也可用同源路径。
options.webSocketUrlstring否WS/WSS 地址;省略时从 serverUrl 派生 /ws。
options.authProvider() => Promise<IMAuth>是访问宿主取票服务,返回本页下方说明的 IMAuth。首次登录或需要重新认证时会调用。
options.appVersionstring否宿主应用版本,便于诊断。
options.onAuthError() => void否认证失效时通知宿主,可引导用户重新登录宿主。无参数,无返回值。

返回: IMClient 实例。配置不合法时抛出错误。每个工作台创建一次,后续复用该实例。

挂载界面:client.mount(options) ​

参数类型必填说明
options.mode'embedded' 或 'floating'否默认 embedded,显示在页面容器中;floating 为浮层。
options.containerHTMLElement内嵌必填已插入页面、具有明确高度的容器。浮层使用 document.body,不需要此参数。
options.onProfile(container?: HTMLElement) => void否SDK 请求展示宿主资料页时调用;窄屏下可能给出承载资料页的容器。
options.onLogout() => void 或 Promise<void>否用户从 SDK 选择退出时调用,由宿主完成自己的退出逻辑。

返回: void。同一实例只能挂载一次,重复挂载或容器无效会抛出错误。

登录:client.login() ​

无参数。调用 authProvider 获取当前宿主用户的 IM 凭证,完成认证与首次同步。

返回: Promise<void>。完成后 state.session 为 ready。网络失败时 Promise 仍会拒绝;如果已有可读缓存,SDK 可以保留离线阅读界面。切换账号时,先更新 Provider 的身份来源,再调用此方法。

恢复缓存:client.restoreCachedSession(user) ​

参数类型必填说明
userIMUser是宿主已确认的当前本机用户,字段见下方用户对象。

返回: boolean,true 表示已恢复可用缓存,false 表示没有可恢复缓存。不会请求 Token 或访问网络,之后仍调用 login 完成正式登录。

退出:client.logout() ​

无参数。退出当前 SDK 账号,并清理当前账号缓存。

返回: void。宿主自己的登录状态由宿主同时清理。

更新本地资料:client.refreshCurrentUser(user) ​

参数类型必填说明
userIMUser是已由宿主后端保存并同步的资料,userId 必须与当前 SDK 用户一致。

返回: void。只更新 SDK 展示,不向服务端写资料。切换账号要调用 login,不能用此方法替换身份。

刷新数据:client.refresh() ​

无参数。重新读取当前账号数据,用于宿主主动触发刷新。

返回: Promise<void>。未登录或刷新失败时拒绝。

打开会话:client.openConversation(target) ​

参数类型必填说明
target.type'friend' 或 'group'是friend 单聊;group 群聊。
target.idstring是对方外部 user_id 或公开 group_id;不是 conversation_id。用户 ID 最多 64 字符,群 ID 为 1–32 位字母、数字、点、下划线或连字符。

返回: Promise<void>,正常完成表示已打开相应会话;不代表对方已读。需要先登录。

js
await client.openConversation({ type: 'friend', id: 'linzhou' })

设置主题:client.setTheme(theme) ​

参数类型必填说明
theme'system'、'light' 或 'dark'是跟随系统、浅色或深色。

返回: void。其他取值会抛出错误。

订阅未读:client.onUnreadChange(listener) ​

参数类型必填说明
listener(count: UnreadCounts) => void是注册后立即收到当前计数,之后在计数变化时调用。

返回: () => void,调用这个函数即可解除本次订阅。count.conversation 是消息未读数,count.contact 是申请未读数;均为 0–100,100 可显示为 99+。这些是当前总数,应替换角标,不能累加。

js
const stop = client.onUnreadChange(count => {
  renderBadge(count.conversation, count.contact)
})
// 宿主组件卸载时
stop()

renderBadge 是宿主自己的角标函数。

订阅状态:client.onStateChange(listener) ​

参数类型必填说明
listener(state: IMClientState) => void是立即接收当前只读状态,之后状态变化时再次调用。字段见下方状态对象。

返回: () => void,解除本次订阅。适用于 Vue、React 或普通页面,不需要读取 SDK 内部响应式对象。

显示界面:client.show() ​

无参数。显示已挂载的 SDK 界面。

返回: void。不会重新登录或创建实例。

收起界面:client.hide() ​

无参数。隐藏已挂载界面,保留连接和当前页面。正在使用的通话界面不能通过此方法隐藏,应使用通话窗口的最小化入口。

返回: void。

销毁实例:client.destroy() ​

无参数。移除工作台、结束订阅并释放实例资源,保留可恢复缓存。

返回: void。之后需要重新 createIM;如果用户是退出账号,应先调用 logout 清理当前账号数据。

发起通话:client.calls.start(userId, media) ​

参数类型必填说明
userIdstring是被叫的外部 user_id。
media'audio' 或 'video'是语音或视频通话。

返回: Promise<boolean>,true 表示本次发起操作成功,false 表示未能完成。当前错误说明可读取 calls.state.error。成功不代表对方已经接听。

接听通话:client.calls.accept() ​

无参数,接听当前来电。

返回: Promise<boolean>,true 表示本次接听操作完成,false 表示当前状态、设备权限或媒体条件不允许完成。后续状态仍以 calls.state 为准。

结束通话:client.calls.end() ​

无参数。SDK 根据当前身份和通话阶段选择拒绝、取消或挂断操作。

返回: Promise<boolean>,表示本次结束操作是否完成。

麦克风静音:client.calls.setMuted(value) ​

参数类型必填说明
valueboolean是true 关闭本地麦克风,false 取消静音。

返回: Promise<boolean>,是否成功切换。当前值见 calls.state.muted。

摄像头开关:client.calls.setCameraMuted(value) ​

参数类型必填说明
valueboolean是true 关闭本地摄像头,false 重新开启。

返回: Promise<boolean>,是否成功切换。当前值见 calls.state.cameraMuted。

切换摄像头:client.calls.switchCamera() ​

无参数,切换前后摄像头。

返回: Promise<boolean>,是否切换成功。当前是否前置见 calls.state.frontCamera,实际能力取决于设备。

恢复通话声音:client.calls.resumeAudio() ​

无参数。浏览器阻止自动播放时,在用户点击“恢复声音”后调用。

返回: Promise<boolean>,表示本次恢复是否成功。是否仍受限制见 calls.state.autoplayBlocked。

用户和认证对象 ​

IMUser 字段:

字段类型必填说明
userIdstring是外部用户 ID,1–64 字符,无控制字符或首尾空白。
nicknamestring是昵称,1–80 字符,无控制字符或首尾空白。
avatarstring否头像地址,最长 2048 字符。
usernamestring否账号,最长 64 字符。HTTP 值为 null 时可省略。
signaturestring否个性签名,最长 255 字符。

authProvider 返回 IMAuth:

字段类型说明
userIMUserToken 对应用户的资料。
tokenstring服务器签发的有效 IM Token,身份须与 user.userId 一致。
expireAtnumberUnix 秒时间戳,须与 Token 的 exp 一致,且尚未过期。

client.state 字段 ​

状态只读,不要直接修改。

字段类型说明
session'signed_out'、'offline'、'ready'未登录、离线可读、已完成认证和同步。
connection'online' 或 'offline'当前网络连接状态。
loadingboolean是否正在加载。
theme'system'、'light' 或 'dark'当前主题设置。
userIMUser 或 null当前用户;未登录时为 null。

client.calls.state 字段 ​

字段类型说明
callCallSnapshot 或 null当前 SDK 通话状态;没有通话时为 null。字段含义见通话状态。SDK 的公开字段范围见表后说明。
isActingboolean是否正在提交接听、挂断等通话操作。
errorstring当前错误说明;没有错误时为空字符串。
preparingboolean是否正在为发起或接听准备媒体。
pendingobject 或 null媒体准备期间的目标;包含 userId 和 media,分别为对方外部 ID 与 audio/video。
mediaReadyboolean媒体连接是否可用。
mediaPreparedboolean本地媒体是否已经准备好。
mutedboolean本地麦克风是否静音。
cameraMutedboolean本地摄像头是否关闭。
frontCameraboolean是否正在使用前置摄像头。
remoteVideoboolean对方视频画面是否可用。
autoplayBlockedboolean浏览器是否阻止播放远端声音。

CallSnapshot 公开 call_id、kind、media、status、version、creator_id、participants、self、ring_deadline_at、lease_expires_at、answer_expires_at、connect_expires_at、started_at、ended_at、end_reason。参与人公开 user.user_id、user.nickname、user.avatar、role、status;self 公开 role、status、selected_device_id、lease_expires_at。它不暴露 TRTC 凭证。

浏览器外观同步:observeBrowserChrome() ​

从 SDK 模块直接导入此辅助函数,无参数。用于观察浏览器顶层页面的主题和边缘样式变化;常规 createIM 挂载已自动接入,不需要宿主重复调用。

返回: () => void,停止本次观察并在不再使用时恢复相关外观设置。

错误对象 ​

参数错误可能为 TypeError,网络或业务失败可能为 ApiError。使用 try/catch 显示适当提示。

字段类型说明
messagestring错误说明。
codenumberApiError 的业务错误码;普通 Error 不保证有此字段。
statusnumberApiError 保存的 HTTP 状态码;未取得响应时可能为 0。
recoverablebooleanApiError 是否标记为可通过恢复网络或重试恢复的读取错误。

销毁实例后不要继续调用需要活动实例的方法。需要重新使用时,重新创建并挂载。