腾讯云即时通讯IM
客户端API
SDK API(Web&小程序)
TIM(命名空间)
方法
-
create()
let options = { SDKAppID: 0 // 接入时需要将0替换为您的云通信应用的 SDKAppID,类型为 Number }; let tim = TIM.create(options); // SDK 实例通常用 tim 表示
如果需要海外通信:配置项oversea:true
常量
-
event:监听处理
-
SDK 进入 ready 状态时触发,接入侧监听此事件,然后可调用 SDK 发送消息等API,使用 SDK 的各项功能
注意:login 成功才会驱动 SDK 触发 SDK_READY 事件
let onSdkReady = function(event) { let message = tim.createTextMessage({ to: 'user1', conversationType: 'C2C', payload: { text: 'Hello world!' }}); tim.sendMessage(message); }; tim.on(TIM.EVENT.SDK_READY, onSdkReady);
-
SDK 进入 not ready 状态时触发,此时接入侧将无法使用 SDK 发送消息等功能。
如果想恢复使用,接入侧需调用 login 接口,驱动 SDK 进入 ready 状态注意:同一账号多端互踢场景下,避免在SDK_NOT_READY中调用tim.login,可能会造成循环互踢的情况
let onSdkReady = function(event) { let message = tim.createTextMessage({ to: 'user1', conversationType: 'C2C', payload: { text: 'Hello world!' }}); tim.sendMessage(message); }; tim.on(TIM.EVENT.SDK_READY, onSdkReady);
-
类型常量
- type:SDK 中的类型常量。为了代码简洁、方便阅读,部分常量使用常见的英文单词缩写描述,具体如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v22dDV0k-1623227429727)(C:\Users\xbxm\AppData\Roaming\Typora\typora-user-images\image-20210605100508228.png)]
-
判断类型
// 判断消息类型 const isTextMessage = message.type === TIM.TYPES.MSG_TEXT // 是否是文本消息类型 // 判断会话类型 const isGroupConversation = conversation.type === TIM.TYPES.CONV_GROUP // 是否是群组会话
SDK实例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UFRRfnJ-1623227429730)(C:\Users\xbxm\AppData\Roaming\Typora\typora-user-images\image-20210605092717433.png)]
登录相关
-
login
使用 用户ID(userID) 和 签名串(userSig) 登录即时通信 IM,登录流程有若干个异步执行的步骤,使用返回的 Promise 对象处理登录成功或失败。
注意1:登录成功,需等待 sdk 处于 ready 状态后(监听事件 TIM.EVENT.SDK_READY)才能调用 sendMessage 等需要鉴权的接口。
注意2:默认情况下,不支持多实例登录,即如果此帐号已在其他页面登录,若继续在当前页面登录成功,有可能会将其他页面踢下线。用户被踢下线时会触发事件TIM.EVENT.KICKED_OUT
,用户可在监听到事件后做相应处理。
如需支持多实例登录(允许在多个网页中同时登录同一帐号),请到 即时通信 IM 控制台,找到相应 SDKAppID,【应用配置】 > 【功能配置】> 【Web端实例同时在线】配置实例个数。配置将在50分钟内生效。let promise = tim.login({ userID: 'your userID', userSig: 'your userSig'}); promise.then(function(imResponse) { console.log(imResponse.data); // 登录成功 if (imResponse.data.repeatLogin === true) { // 标识账号已登录,本次登录操作为重复登录。v2.5.1 起支持 console.log(imResponse.data.errorInfo); } }).catch(function(imError) { console.warn('login error:', imError); // 登录失败的相关信息 });
-
logout
登出即时通信 IM,通常在切换帐号的时候调用,清除登录态以及内存中的所有数据。
注意!
- 调用此接口的实例会发布
SDK_NOT_READY
事件,此时该实例下线,无法收、发消息。 - 如果您在即时通信 IM 控制台配置的“Web端实例同时在线个数”大于 1,且同一账号登录了
a1
和a2
两个实例(含小程序端),当执行a1.logout()
后,a1
会下线,无法收、发消息。而a2
实例不会受影响。 - 多实例被踢:基于第 2 点,如果“Web端实例同时在线个数”配置为 2,且您的某一账号已经登录了
a1
,a2
两个实例,当使用此账号成功登录第三个实例a3
时,a1
或a2
中的一个实例会被踢下线(通常是最先处在登录态的实例会触发),这种情况称之为**“多实例被踢”**。假设a1
实例被踢下线,a1
实例内部会执行登出流程,然后抛出KICKED_OUT
事件,接入侧可以监听此事件,并在触发时跳转到登录页。此时a1
实例下线,而a2
、a3
实例可以正常运行。
let promise = tim.logout();
promise.then(function(imResponse) {
console.log(imResponse.data); // 登出成功
}).catch(function(imError) {
console.warn('logout error:', imError);
});
消息相关
-
createTextMessage(创建文本消息)
创建文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息。
// 发送文本消息,Web 端与小程序端相同 // 1. 创建消息实例,接口返回的实例可以上屏 let message = tim.createTextMessage({ to: 'user1', conversationType: TIM.TYPES.CONV_C2C, // 消息优先级,用于群聊(v2.4.2起支持)。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息,详细请参考:https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6) // 支持的枚举值:TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL(默认), TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST // priority: TIM.TYPES.MSG_PRIORITY_NORMAL, payload: { text: 'Hello world!' }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到,v2.10.2起支持) // cloudCustomData: 'your cloud custom data' }); // 2. 发送消息 let promise = tim.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });
-
createTextAtMessage(创建图片消息)
创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息。
注意:v2.3.1版本开始支持传入 File 对象,使用前需要将SDK升级至v2.3.1或更高版本。
// Web 端发送图片消息示例1 - 传入 DOM 节点 // 1. 创建消息实例,接口返回的实例可以上屏 let message = tim.createImageMessage({ to: 'user1', conversationType: