Flutter TIM 项目实现

目录

1. 服务端API

1.1 生成签名

1.1.1 步骤

第一步:获取签名算法

第二步:查看函数输入输出

第三步:nodejs 实现功能

1.1.2 验证签名

小结

1.2 Rest API 调用

1.2.1 签名介绍

1.2.2 腾讯接口

生成管理员 administrator 签名

包装一个 post 请求函数

查询账号

导入单个账号

导入多个账号,一次最多导入 100 个账号

设置用户资料

获取群详细资料

删除群聊

在群组中发送系统通知

小结

1.3 第三方回调

1.3.1 场景举例

1.3.2 回调命令列表

在线状态

资料关系链

单聊消息

群组系统

1.3.3 配置回调

第一步:配置回调服务器

第二步:第三方回调配置

小结

2. IM 用户登录

2.1 类结构设计

2.1.1 正文

类架构图

类设计说明

2.1.2 小结

2.2 工具类 IMManager

重要说明

2.2.1 步骤

常量 Constants

状态枚举,类

SDK 初始化

事件监听 Listener

用户 User

会话 Conversasion

消息 Message

群组 Group

小结

2.3 服务 IMService

2.3.1 关系结构

2.3.2 步骤

创建 IMService

导包

加入 TIM 管理器

初始化 init

SDK 

用户

消息

群聊

会话

小结

2.4 断线重连处理

2.4.1 知识点

断线重连

技术处理

2.4.2 步骤

全局初始 IMService

启动 APP 连接成功

断开网络

恢复网络自动断线重连

小结

2.5 用户登录,登出

2.5.1 用户管理

2.5.2 步骤

保存令牌

用户登录

离线用户登录

用户退出

http 401 授权错误

腾讯后台账号管理

小结

2.6 用户登录过期

2.6.1 知识点

令牌过期

2.6.2 处理过程

2.6.3 步骤

处理 V2TIMListener -> onUserSigExpired 过期回调

小结

2.7 多端登录踢下线

2.7.1 步骤

腾讯云后台配置

i18n 多语言

处理 oKickedOffline 回调

效果

小结

2.8 会话响应 IM 状态

2.8.1 步骤

多语言 i18n

会话首页

浮动提示栏组件

IMService 服务器,用户状态

IM 登录

监听服务器离线

小结

3. 聊天用户选取

3.1 用户列表

3.1.1 步骤

搜索用户 api

控制器翻页拉取用户

视图页刷新控制

会话页面发起选择用户

小结

3.2 选择用户

3.2.1 步骤

选取用户控制器

选取用户视图

会话界面接收选中列表数据

小结

4. 单聊功能

4.1 聊天界面布局

4.1.1 步骤

创建聊天业务

导包

聊天控制器

进入聊天

小结

4.2 底部聊天栏位

4.2.1 步骤

聊天栏 ChaBarWidget

聊天 Chat 控制器

聊天 Chat 视图

小结

4.3 发送文字消息

4.3.1 知识点

SDK 函数和类型

V2TimMessage.tatus 消息状态

V2TimMessage.elemType 消息类型

4.3.2 步骤

聊天控制器

聊天视图

小结

4.4 接收显示文字消息

4.4.1 SDK API 接口

 getC2CHistoryMessageList 获取单聊历史消息

getGroupHistoryMessageList 获取群组历史消息

4.4.2 类结构

4.4.3 步骤

聊天控制器

聊天视图

IMService 服务

小结

4.5 发送失败消息处理

4.5.1 步骤

i18n多语言

删除不合规消息

重新发送消息

显示错误信息

小结

5. 会话管理

5.1 会话列表

5.1.1 会话接口说明

5.1.2 步骤

会话控制器

会话视图

小结

5.2 更新会话

5.2.1 步骤

会话控制器

会话视图

IM 工具类

IM 会话监听更新

小结

6. 群聊功能

6.1 创建群聊

6.1.1 createGroup 接口说明

6.1.2 步骤

会话控制器

聊天控制器

小结

6.2 群本地消息

insertGroupMessageToLocalStorage 接口说明

V2TimMessage.elemType 消息类型

步骤

消息枚举定义

IMService 服务

会话控制器创建本地消息

聊天控制器

聊天视图

小结

6.3 群提示消息

6.3.1 接口说明

消息内容

V2TimGroupTipsElem.type 群Tips类型

6.3.2 步骤

定义消息枚举

消息类型转字符串

聊天界面显示提示

小结

6.4 群管理侧栏

6.4.1 步骤

群设置组件

聊天控制器

聊天视图

小结

6.5 修改群资料

6.5.1 接口说明

入参

6.5.2 步骤

聊天控制器

群设置侧栏组件

IM 工具类

IMService 群消息处理

小结

6.6 邀请加入

6.6.1 接口说明

入参

返回值

6.6.2 步骤

聊天控制器

群聊侧栏管理组件

小结

6.7 踢出群聊

6.7.1 kickGroupMember 接口说明

入参

6.7.2 步骤

聊天控制器

侧栏视图

IMService 服务

聊天界面系统消息

小结

6.8 退出群聊

6.8.1 quitGroup 接口说明

入参

6.8.2 步骤

im 工具类

imservice

聊天控制器

聊天侧栏

聊天视图

小结

6.9 解散群聊

6.9.1 解散群逻辑

6.9.2 接口说明

FLUTTER SDK dismissGroup 接口

服务器端 destroy_group 接口

6.9.3 步骤

IM 工具类

IMService

聊天控制器

聊天侧栏

会话控制器

小结

7. 信息提示

7.1 未读信息提示

7.1.1 步骤

IMService

main 主视图

IM Manager

聊天控制器

小结

7.2 APP 内提示

7.2.1步骤

overlay_support 插件安装

IM 工具类

IMService

小结

7.3 本机提示

7.3.1 步骤

flutter_local_notifications 包

ios 配置

android 配置

本地消息服务

IM 工具类

ConfigService 配置服务

IMService 腾讯聊天服务类

main 控制器

main 视图

小结


博主wx:yuanlai45_csdn 博主qq:2777137742

后期会创建粉丝群,为同学们提供分享交流平台以及提供官方发送的福利奖品~

PS:重新清理依赖,在拷贝新项目的时候用得上

flutter clean

flutter pub get

1. 服务端API

1.1 生成签名

与腾讯通讯时需要带上 UserSig 签名参数,这个是标识这个用户访问被允许,所以这是必须要做的事情。

签名的方式有两种,一个是客户端签名,这种方式缺点容易被反编译后复制出密钥。

另一种方式是服务端签名,虽然消耗点服务器资源,但是这种比较安全。这是推荐的方式。

本文将会以 nodejs 作为后端,来说明签名过程。毕竟 js 语法大家容易理解。

1.1.1 步骤

第一步:获取签名算法

资料 即时通信 IM 生成 UserSig-服务端 API-文档中心-腾讯云

采用服务端计算 UserSig,可以最大限度地保障计算 UserSig 所用的密钥信息不被泄露。您只需将计算代码部署在您的服务器上,并提供面向 App 的服务端接口,在需要 UserSig 时由您的 App 向业务服务器发起请求获取动态 UserSig。 为了简化实现过程,我们提供了下列语言或平台的 UserSig 计算源码,您可以直接下载并集成到您的服务端。

语言版本关键函数下载链接
JavaHMAC-SHA256genSig
GOHMAC-SHA256GenSig
PHPHMAC-SHA256genSig
Nodejs(这个)HMAC-SHA256genSig
PythonHMAC-SHA256gen_sig
C#HMAC-SHA256GenSig
C++HMAC-SHA256gen_sig

第二步:查看函数输入输出

资料 tls-sig-api-v2-node/TLSSigAPIv2.js at master · tencentyun/tls-sig-api-v2-node · GitHub

初始化签名对象,传入 appid, key 密钥

...
var Api = function (sdkappid, key) {this.sdkappid = sdkappid;this.key = key;
};
...

签名函数,传入 userid 用户编号,expire 过期时间秒,userBuf 默认 null 只有在音视频时才用上

Api.prototype.genSig = function (userid, expire, userBuf) {var currTime = Math.floor(Date.now() / 1000);var sigDoc = {'TLS.ver': "2.0",'TLS.identifier': "" + userid,'TLS.sdkappid': Number(this.sdkappid),'TLS.time': Number(currTime),'TLS.expire': Number(expire)};var sig = '';if (null != userBuf) {var base64UserBuf = base64encode(userBuf);sigDoc['TLS.userbuf'] = base64UserBuf;sig = this._hmacsha256(userid, currTime, expire, base64UserBuf);} else {sig = this._hmacsha256(userid, currTime, expire, null);}sigDoc['TLS.sig'] = sig;var compressed = zlib.deflateSync(newBuffer(JSON.stringify(sigDoc))).toString('base64');return base64url.escape(compressed);
}

第三步:nodejs 实现功能

配置环境变量 env

.env

# tim
tim_server=console.tim.qq.com
tim_appid=1400803542
tim_key=密钥xxxxxxxxxxxxxxxxxx

初始签名对象

// 腾讯 tim
const tim = new TLSSigAPIv2.Api(config.tim_appid, config.tim_key);
fastify.decorate("tim", tim);

生成 UserSig 签名        

// tim 签名
const im_sign_expire = 31536000; // 365天
const im_sign = await this.tim.genSig(username, im_sign_expire);

使用 apifox 来测试

下载链接Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。

调用 /users/me 接口

客户端保存好你的 im_sign 。

1.1.2 验证签名

登录 - 腾讯云

输入 userid, 签名 sig, 点击开始校验,输出签名信息查看。

果然有效期是 365 天

小结

本节讲了腾讯签名令牌的后端实现方式,业务里面放在了获取用户资料的接口里面,因为我本来就要用 userid 去查询下数据库,这样就一起返回数据了。

如果发现不能登录、提示签名错误的,可以在腾讯后台点击开始校验看下是否签名正确。

apifox接口——可直接在项目设置选择apifix格式导入

{"apifoxProject":"1.0.0","$schema":{"app":"apifox","type":"project","version":"1.2.0"},"info":{"name":"猫哥视频站-课程","description":"","mockRule":{"rules":[],"enableSystemRule":true}},"responseCollection":[],"apiCollection":[{"name":"根目录","parentId":0,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"methodAndPath","bodyType":""}},"items":[{"name":"用户","parentId":0,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"inherit","bodyType":"","fields":[]}},"items":[{"name":"注册","api":{"id":"75406090","method":"post","path":"/users/register","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834219","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"x-apifox-orders":["id"]}}],"responseExamples":[{"name":"成功示例 ","data":"{\n    \"id\": \"7\"\n}","responseId":190834219,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"username":{"type":"string","mock":{"mock":"ducafecat"},"title":""},"password":{"type":"string","mock":{"mock":"123456"}},"email":{"type":"string","mock":{"mock":"ducafecat@gmail.com"}},"verify_code":{"type":"string"}},"x-apifox-orders":["username","password","email","verify_code"],"required":["username","password","email","verify_code"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":0,"cases":[{"id":81441640,"type":"http","path":null,"name":"成功","responseId":190834219,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json","data":"{\n    \"username\": \"ducafecat\",\n    \"password\": \"123456\",\n    \"email\": \"ducafecat@gmail.com\"\n}"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"获取 Email 验证码","api":{"id":"75406088","method":"post","path":"/users/verify","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834216","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{},"x-apifox-orders":[]}}],"responseExamples":[],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"email":{"type":"string","mock":{"mock":"ducafecat@gmail.com"}},"type":{"type":"string","description":"register, findPassword"}},"x-apifox-orders":["email","type"],"required":["email","type"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":6,"cases":[],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"找回密码","api":{"id":"75406091","method":"post","path":"/users/findpwd","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834218","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{},"x-apifox-orders":[]}}],"responseExamples":[],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"email":{"type":"string","mock":{"mock":"ducafecat@gmail.com"}},"verify_code":{"type":"string","description":"验证码"},"password":{"type":"string","description":"密码"}},"x-apifox-orders":["email","verify_code","password"],"required":["email","verify_code","password"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":12,"cases":[],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"加密","api":{"id":"75406087","method":"post","path":"/users/encrypt","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834215","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{},"x-apifox-orders":[]}}],"responseExamples":[],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"password":{"type":"string","description":"密码"}},"x-apifox-orders":["password"],"required":["password"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":18,"cases":[],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"登录","api":{"id":"75406089","method":"post","path":"/users/login","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834217","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"token":{"type":"string"},"profile":{"type":"object","properties":{"username":{"type":"string"},"email":{"type":"string"},"nick_name":{"type":"string"},"avatar":{"type":"string"},"intro":{"type":"null"},"vip_grade":{"type":"string"},"vip_expire_time":{"type":"null"},"total_times":{"type":"integer"},"last_time":{"type":"string"},"reg_time":{"type":"string"}},"required":["username","email","nick_name","avatar","intro","vip_grade","vip_expire_time","total_times","last_time","reg_time"],"x-apifox-orders":["username","email","nick_name","avatar","intro","vip_grade","vip_expire_time","total_times","last_time","reg_time"]}},"required":["token","profile"],"x-apifox-orders":["token","profile"]}}],"responseExamples":[{"name":"成功示例 ","data":"{\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNiIsImlhdCI6MTY2MDM5NzM0NSwiZXhwIjoxNjYxMDAyMTQ1fQ.KYSfIeK2Q-9PgPivIIqfIMWF0owSee6LXqoK7gk83F8\"\n}","responseId":190834217,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"username":{"type":"string","mock":{"mock":"ducafecat@gmail.com"}},"password":{"type":"string","mock":{"mock":"kWrIeYCYAYvd3i5fUpjttlvXJC8ftNwNtIuToK9H6dh5zJdTXTA8ghZf46SWZuQn6DYBBEEzZc6FQghjssW/Kw=="}}},"x-apifox-orders":["username","password"],"required":["username","password"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":24,"cases":[{"id":81441636,"type":"http","path":null,"name":"成功","responseId":190834217,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json","data":"{\n    \"username\": \"ducafecat01\",\n    \"password\": \"cpVDcw/rkyPeYMeVJFa5cA7P5yuH8pI1h1U+thEdkI20Dhb5p66reU/HQHtDGZsTVXIMBLKCOtLmCZfG43m5SA==\"\n}"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"Profile","api":{"id":"75406092","method":"get","path":"/users/me","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834220","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"id":{"type":"string"},"im_sig":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"nick_name":{"type":"string"},"avatar":{"type":"string"},"intro":{"type":"null"},"vip_grade":{"type":"string"},"vip_expire_time":{"type":"string"},"total_times":{"type":"integer"},"last_time":{"type":"string"},"reg_time":{"type":"string"},"attributes":{"type":"object","properties":{"username":{"type":"string"},"email":{"type":"string"},"nick_name":{"type":"string"},"intro":{"type":"null"},"vip_grade":{"type":"string"},"vip_expire_time":{"type":"null"},"total_times":{"type":"integer"},"ip":{"type":"null"},"country":{"type":"null"},"province":{"type":"null"},"city":{"type":"null"},"last_time":{"type":"string"},"reg_time":{"type":"string"}},"required":["username","email","nick_name","intro","vip_grade","vip_expire_time","total_times","ip","country","province","city","last_time","reg_time"],"x-apifox-orders":["username","email","nick_name","intro","vip_grade","vip_expire_time","total_times","ip","country","province","city","last_time","reg_time"]}},"required":["id","im_sig","username","email","nick_name","avatar","intro","vip_grade","vip_expire_time","total_times","last_time","reg_time","attributes"],"x-apifox-orders":["id","attributes","im_sig","username","email","nick_name","avatar","intro","vip_grade","vip_expire_time","total_times","last_time","reg_time"]}}],"responseExamples":[{"name":"成功示例 ","data":"{\n    \"id\": \"6\",\n    \"attributes\": {\n        \"username\": \"ducafecat\",\n        \"email\": \"ducafecat@gmail.com\",\n        \"nick_name\": \"ducafecat\",\n        \"intro\": null,\n        \"vip_grade\": \"guest\",\n        \"vip_expire_time\": null,\n        \"total_times\": 0,\n        \"ip\": null,\n        \"country\": null,\n        \"province\": null,\n        \"city\": null,\n        \"last_time\": \"2022-08-13T13:28:00.646Z\",\n        \"reg_time\": \"2016-07-20T12:00:15.000Z\"\n    }\n}","responseId":190834220,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{},"x-apifox-orders":[]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":30,"cases":[{"id":81441638,"type":"http","path":null,"name":"成功","responseId":190834220,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"更新 Profile","api":{"id":"75406093","method":"put","path":"/users/me","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834221","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"id":{"type":"string"},"attributes":{"type":"object","properties":{"username":{"type":"string"},"email":{"type":"string"},"nick_name":{"type":"string"},"intro":{"type":"null"},"vip_grade":{"type":"string"},"vip_expire_time":{"type":"null"},"total_times":{"type":"integer"},"ip":{"type":"null"},"country":{"type":"null"},"province":{"type":"null"},"city":{"type":"null"},"last_time":{"type":"string"},"reg_time":{"type":"string"}},"required":["username","email","nick_name","intro","vip_grade","vip_expire_time","total_times","ip","country","province","city","last_time","reg_time"],"x-apifox-orders":["username","email","nick_name","intro","vip_grade","vip_expire_time","total_times","ip","country","province","city","last_time","reg_time"]}},"required":["id","attributes"],"x-apifox-orders":["id","attributes"]}}],"responseExamples":[{"name":"成功示例 ","data":"{\n    \"id\": \"6\",\n    \"attributes\": {\n        \"username\": \"ducafecat\",\n        \"email\": \"ducafecat@gmail.com\",\n        \"nick_name\": \"ducafecat\",\n        \"intro\": null,\n        \"vip_grade\": \"guest\",\n        \"vip_expire_time\": null,\n        \"total_times\": 0,\n        \"ip\": null,\n        \"country\": null,\n        \"province\": null,\n        \"city\": null,\n        \"last_time\": \"2022-08-13T13:28:00.646Z\",\n        \"reg_time\": \"2016-07-20T12:00:15.000Z\"\n    }\n}","responseId":190834221,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{},"x-apifox-orders":[]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":36,"cases":[],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"tim 数据准备","api":{"id":"75406097","method":"post","path":"/users/chatPrepare","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834227","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{},"x-apifox-orders":[]}}],"responseExamples":[{"name":"成功示例 ","data":"{\n    \"id\": \"7\"\n}","responseId":190834227,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"user_ids":{"type":"array","items":{"type":"string"}}},"x-apifox-orders":["user_ids"],"required":["user_ids"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":60,"cases":[{"id":81441643,"type":"http","path":null,"name":"成功","responseId":0,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json","data":"{\n    \"password\": \"123456\"\n}"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"tim 解散聊天群","api":{"id":"75406098","method":"post","path":"/users/chatDeleteGroup","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834226","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{},"x-apifox-orders":[]}}],"responseExamples":[],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"userId":{"type":"string"},"groupId":{"type":"string"}},"x-apifox-orders":["userId","groupId"],"required":["userId","groupId"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":66,"cases":[{"id":81441642,"type":"http","path":null,"name":"成功","responseId":0,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json","data":"{\n    \"password\": \"123456\"\n}"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"用户列表","api":{"id":"75406100","method":"post","path":"/users/findList","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834228","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"attributes":{"type":"object","properties":{"username":{"type":"string"},"nick_name":{"type":"string"},"avatar":{"type":"string"}},"required":["username","nick_name","avatar"],"x-apifox-orders":["username","nick_name","avatar"]}},"required":["id","attributes"],"x-apifox-orders":["id","attributes"]}}}],"responseExamples":[{"name":"成功示例","data":"[\n    {\n        \"id\": \"186\",\n        \"attributes\": {\n            \"username\": \"bruce-bnu\",\n            \"nick_name\": \"bruce-bnu\",\n            \"avatar\": \"00258VC3ly1gty0r05zh2j60ut0u0tce02.jpg\"\n        }\n    },\n    {\n        \"id\": \"187\",\n        \"attributes\": {\n            \"username\": \"hbz_la\",\n            \"nick_name\": \"hbz_la\",\n            \"avatar\": \"00258VC3ly1gty0qy7h06j60hj0hjdhh02.jpg\"\n        }\n    },\n    {\n        \"id\": \"188\",\n        \"attributes\": {\n            \"username\": \"jiezaichan\",\n            \"nick_name\": \"jiezaichan\",\n            \"avatar\": \"00258VC3ly1gty0qzj6d9j60go0goabi02.jpg\"\n        }\n    },\n    {\n        \"id\": \"189\",\n        \"attributes\": {\n            \"username\": \"tyrSwift\",\n            \"nick_name\": \"tyrSwift\",\n            \"avatar\": \"71bdf8ebly1gty0qz6q32j20e80e8my9.jpg\"\n        }\n    },\n    {\n        \"id\": \"190\",\n        \"attributes\": {\n            \"username\": \"dy6429829\",\n            \"nick_name\": \"dy6429829\",\n            \"avatar\": \"00258VC3ly1gty0qxcj1cj609w09w3yy02.jpg\"\n        }\n    },\n    {\n        \"id\": \"191\",\n        \"attributes\": {\n            \"username\": \"leebin17\",\n            \"nick_name\": \"leebin17\",\n            \"avatar\": \"71bdf8ebly1gty1ti7lruj208c08bgm0.jpg\"\n        }\n    },\n    {\n        \"id\": \"192\",\n        \"attributes\": {\n            \"username\": \"CoderTiany\",\n            \"nick_name\": \"CoderTiany\",\n            \"avatar\": \"00258VC3ly1gty0qxcj1cj609w09w3yy02.jpg\"\n        }\n    },\n    {\n        \"id\": \"193\",\n        \"attributes\": {\n            \"username\": \"vijayh\",\n            \"nick_name\": \"vijayh\",\n            \"avatar\": \"71bdf8ebly1gty1th3xlyj20ch0cjmyb.jpg\"\n        }\n    },\n    {\n        \"id\": \"194\",\n        \"attributes\": {\n            \"username\": \"s365790504\",\n            \"nick_name\": \"s365790504\",\n            \"avatar\": \"00258VC3ly1gty0qwvax1j60gn0gngno02.jpg\"\n        }\n    },\n    {\n        \"id\": \"195\",\n        \"attributes\": {\n            \"username\": \"andy-wangzhenhua\",\n            \"nick_name\": \"andy-wangzhenhua\",\n            \"avatar\": \"00258VC3ly1gty0qyxpv1j60hj0hjtak02.jpg\"\n        }\n    },\n    {\n        \"id\": \"196\",\n        \"attributes\": {\n            \"username\": \"hasenharrison\",\n            \"nick_name\": \"hasenharrison\",\n            \"avatar\": \"00258VC3ly1gty1tgwpqvj60cj0cimyi02.jpg\"\n        }\n    },\n    {\n        \"id\": \"197\",\n        \"attributes\": {\n            \"username\": \"chenjiahui1024\",\n            \"nick_name\": \"chenjiahui1024\",\n            \"avatar\": \"00258VC3ly1gty1tgwpqvj60cj0cimyi02.jpg\"\n        }\n    },\n    {\n        \"id\": \"198\",\n        \"attributes\": {\n            \"username\": \"bjipattorney\",\n            \"nick_name\": \"bjipattorney\",\n            \"avatar\": \"71bdf8ebly1gty1th3xlyj20ch0cjmyb.jpg\"\n        }\n    },\n    {\n        \"id\": \"199\",\n        \"attributes\": {\n            \"username\": \"ljr13512765863\",\n            \"nick_name\": \"ljr13512765863\",\n            \"avatar\": \"00258VC3ly1gty0r05zh2j60ut0u0tce02.jpg\"\n        }\n    },\n    {\n        \"id\": \"200\",\n        \"attributes\": {\n            \"username\": \"jqc5656\",\n            \"nick_name\": \"jqc5656\",\n            \"avatar\": \"71bdf8ebly1gty0r1f5x4j20go0gogna.jpg\"\n        }\n    },\n    {\n        \"id\": \"201\",\n        \"attributes\": {\n            \"username\": \"subaoxiang\",\n            \"nick_name\": \"subaoxiang\",\n            \"avatar\": \"00258VC3ly1gty0r265hmj60u00u041y02.jpg\"\n        }\n    },\n    {\n        \"id\": \"202\",\n        \"attributes\": {\n            \"username\": \"XrZxHn521\",\n            \"nick_name\": \"XrZxHn521\",\n            \"avatar\": \"00258VC3ly1gty0qxmdwoj60hs0hs0tw02.jpg\"\n        }\n    },\n    {\n        \"id\": \"203\",\n        \"attributes\": {\n            \"username\": \"_shukNgan\",\n            \"nick_name\": \"_shukNgan\",\n            \"avatar\": \"00258VC3ly1gty1tgwpqvj60cj0cimyi02.jpg\"\n        }\n    },\n    {\n        \"id\": \"204\",\n        \"attributes\": {\n            \"username\": \"kevin02040\",\n            \"nick_name\": \"kevin02040\",\n            \"avatar\": \"00258VC3ly1gty1tgwpqvj60cj0cimyi02.jpg\"\n        }\n    },\n    {\n        \"id\": \"205\",\n        \"attributes\": {\n            \"username\": \"XDH2023\",\n            \"nick_name\": \"XDH2023\",\n            \"avatar\": \"00258VC3ly1gty0qxw06hj60u00u0dkf02.jpg\"\n        }\n    }\n]","responseId":190834228,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"title":"","type":"object","properties":{"keyword":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"}},"x-apifox-orders":["keyword","page","pageSize"],"required":["keyword","pageSize","page"]}},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":72,"cases":[{"id":81441645,"type":"http","path":null,"name":"成功","responseId":0,"parameters":{},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"type":"application/json","data":"{\n    \"password\": \"123456\"\n}"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{}}],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}}]},{"name":"博客","parentId":0,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"inherit","bodyType":"","fields":[]}},"items":[{"name":"博客列表","api":{"id":"75406111","method":"get","path":"/blog","parameters":{"query":[{"required":false,"description":"页码 1","type":"integer","id":"WQTlENHs9g","example":"1","enable":true,"name":"page"},{"required":false,"description":"分类","type":"string","id":"QxVh259QPd","example":"flutter","enable":true,"name":"category"},{"required":false,"description":"查询词","type":"string","id":"Y8xke36dym","example":"","enable":true,"name":"keyword"},{"required":false,"description":"标签","type":"string","id":"Xg0Pz2Nhna","example":"","enable":true,"name":"tag"}]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834239","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"attributes":{"type":"object","properties":{"uri":{"type":"string"},"title":{"type":"string"},"keyword":{"type":"null"},"description":{"type":"string"},"tags":{"type":"string"},"cover":{"type":"string"},"pv":{"type":"integer"}},"required":["uri","title","keyword","description","tags","cover","pv"],"x-apifox-orders":["uri","title","keyword","description","tags","cover","pv"]}},"x-apifox-orders":["id","attributes"]}}}],"responseExamples":[],"requestBody":{"type":"none","parameters":[]},"description":"","tags":[],"status":"released","serverId":"","operationId":"","sourceUrl":"","ordering":0,"cases":[{"id":81441655,"type":"http","path":null,"name":"成功","responseId":190834239,"parameters":{"query":[{"id":"4WvPGW73gU","relatedId":"WQTlENHs9g","relatedName":"page","value":"1","enable":true,"isDelete":false},{"id":"eRvyxDKKwF","relatedId":"Y8xke36dym","relatedName":"keyword","value":"","enable":true,"isDelete":false},{"id":"mkSYtdT3Zb","relatedId":"QxVh259QPd","relatedName":"category","value":"flutter","enable":true,"isDelete":false},{"id":"TlWyzMx1OY","relatedId":"Xg0Pz2Nhna","relatedName":"tag","value":"","enable":true,"isDelete":false}],"path":[],"cookie":[],"header":[]},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"generateMode":"normal"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{"isDefaultUrlEncoding":1}}],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"博客详情","api":{"id":"75406112","method":"get","path":"/blog/{uri}","parameters":{"query":[],"path":[{"id":"uri#0","name":"uri","required":true,"description":"唯一标识","enable":true,"example":"flutter-autocomplete-debounce"}]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834240","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"id":{"type":"string"},"attributes":{"type":"object","properties":{"uri":{"type":"string"},"title":{"type":"string"},"keyword":{"type":"null"},"description":{"type":"string"},"tags":{"type":"string"},"cover":{"type":"string"},"pv":{"type":"integer"},"content":{"type":"string"}},"required":["uri","title","keyword","description","tags","cover","pv","content"],"x-apifox-orders":["uri","title","keyword","description","tags","cover","pv","content"]}},"required":["id","attributes"],"x-apifox-orders":["id","attributes"]}}],"responseExamples":[],"requestBody":{"type":"none","parameters":[]},"description":"","tags":[],"status":"released","serverId":"","operationId":"","sourceUrl":"","ordering":6,"cases":[{"id":81441656,"type":"http","path":null,"name":"成功","responseId":190834240,"parameters":{"query":[],"path":[{"id":"uri#0","name":"uri","relatedId":"uri#0","enable":true,"isDelete":false,"value":"flutter-autocomplete-debounce","relatedName":"uri"}],"cookie":[],"header":[]},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"generateMode":"normal"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{"isDefaultUrlEncoding":1}}],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}},{"name":"博客路径","api":{"id":"75406113","method":"get","path":"/blog/paths","parameters":{"query":[],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834241","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"array","items":{"type":"object","properties":{"params":{"type":"object","properties":{"uri":{"type":"string"}},"required":["uri"],"x-apifox-orders":["uri"]}},"x-apifox-orders":["params"]}}}],"responseExamples":[],"requestBody":{"type":"none","parameters":[]},"description":"","tags":[],"status":"released","serverId":"","operationId":"","sourceUrl":"","ordering":12,"cases":[],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}}]},{"name":"腾讯 tim 接口","parentId":0,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"inherit","bodyType":"","fields":[]}},"items":[{"name":"用户","parentId":15032824,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"inherit","bodyType":"","fields":[]}},"items":[{"name":"导入单个帐号","api":{"id":"75406114","method":"post","path":"https://{{tim_server}}/v4/im_open_login_svc/account_import","parameters":{"query":[{"id":"VA6fwOfAMc","name":"sdkappid","example":"{{tim_sdkappid}}","required":false,"description":"","enable":true,"type":"string"},{"id":"7XXQds5SKG","name":"identifier","example":"{{tim_identifier}}","required":false,"description":"","enable":true,"type":"string"},{"id":"EnzbxrrpU4","name":"usersig","example":"{{tim_usersig}}","required":false,"description":"","enable":true,"type":"string"},{"id":"349Hx9sGPJ","name":"random","example":"{% mock 'timestamp' %}","required":false,"description":"","enable":true,"type":"string"},{"id":"JAUX2MzawK","name":"contenttype","example":"json","required":false,"description":"","enable":true,"type":"string"}],"path":[]},"auth":{},"commonParameters":{"query":[],"body":[],"cookie":[],"header":[]},"responses":[{"id":"190834242","name":"成功","code":200,"contentType":"json","jsonSchema":{"type":"object","properties":{"ActionStatus":{"type":"string"},"ErrorCode":{"type":"integer"},"ErrorInfo":{"type":"string"}},"required":["ActionStatus","ErrorCode","ErrorInfo"],"x-apifox-orders":["ActionStatus","ErrorCode","ErrorInfo"]}}],"responseExamples":[{"name":"成功示例","data":"{\n    \"ActionStatus\": \"OK\",\n    \"ErrorCode\": 0,\n    \"ErrorInfo\": \"\"\n}","responseId":190834242,"ordering":1}],"requestBody":{"type":"application/json","parameters":[],"jsonSchema":{"type":"object","properties":{"UserID":{"type":"string","mock":{"mock":"ducafecat"}},"Nick":{"type":"string","mock":{"mock":"猫哥"}},"FaceUrl":{"type":"string","mock":{"mock":"https://ducafecat.oss-cn-beijing.aliyuncs.com/ducafecat-video-flutter/avatar/00258VC3ly1gty0qztbhmj60e80e83zk02.jpg"}}},"x-apifox-orders":["UserID","Nick","FaceUrl"],"required":["UserID","Nick","FaceUrl"]},"example":"{\n    \"UserID\": \"52\",\n    \"Nick\": \"段涛\",\n    \"FaceUrl\": \"{{avatar_url}}\"\n}"},"description":"","tags":[],"status":"developing","serverId":"","operationId":"","sourceUrl":"","ordering":0,"cases":[{"id":81441657,"type":"http","path":null,"name":"成功","responseId":190834242,"parameters":{"query":[{"id":"skMbfmqv1H","relatedId":"VA6fwOfAMc","relatedName":"sdkappid","value":"{{tim_sdkappid}}","enable":true,"isDelete":false},{"id":"umLImBnSzD","relatedId":"7XXQds5SKG","relatedName":"identifier","value":"{{tim_identifier}}","enable":true,"isDelete":false},{"id":"1CFsX7WF5o","relatedId":"EnzbxrrpU4","relatedName":"usersig","value":"{{tim_usersig}}","enable":true,"isDelete":false},{"id":"ihdtVexZx1","relatedId":"349Hx9sGPJ","relatedName":"random","value":"{% mock 'timestamp' %}","enable":true,"isDelete":false},{"id":"yCvm17mpTL","relatedId":"JAUX2MzawK","relatedName":"contenttype","value":"json","enable":true,"isDelete":false}],"path":[],"cookie":[],"header":[]},"commonParameters":{"query":[],"body":[],"header":[],"cookie":[]},"requestBody":{"parameters":[],"data":"{\n    \"UserID\": \"ducafecat\",\n    \"Nick\": \"猫哥\",\n    \"FaceUrl\": \"https://ducafecat.oss-cn-beijing.aliyuncs.com/ducafecat-video-flutter/avatar/00258VC3ly1gty0qztbhmj60e80e83zk02.jpg\"\n}","generateMode":"normal"},"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"advancedSettings":{"isDefaultUrlEncoding":1}}],"mocks":[],"customApiFields":"{}","advancedSettings":{"isDefaultUrlEncoding":1},"mockScript":{},"codeSamples":[],"preProcessors":[],"postProcessors":[],"inheritPostProcessors":{},"inheritPreProcessors":{}}}]},{"name":"群组","parentId":15032824,"serverId":"","description":"","preProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"postProcessors":[{"id":"inheritProcessors","type":"inheritProcessors","data":{}}],"inheritPostProcessors":{},"inheritPreProcessors":{},"auth":{},"identityPattern":{"httpApi":{"type":"inherit","bodyType":"","fields":[]}},"items":[]}]}]}],"socketCollection":[],"docCollection":[],"schemaCollection":[],"webSocketCollection":[],"apiTestCaseCollection":[{"name":"根目录","children":[{"name":"默认分组","children":[],"items":[]}],"items":[]}],"apiTestSuiteCollection":[],"testCaseReferences":[],"environments":[],"commonScripts":[],"databaseConnections":[],"globalVariables":[{"variables":[{"name":"tim_server","value":"","description":""},{"name":"tim_sdkappid","value":"","description":""},{"name":"tim_identifier","value":"","description":""},{"name":"tim_usersig","value":"","description":""}],"id":"2593114"}],"commonParameters":{"parameters":{"body":[]},"id":436205,"projectId":2593114,"creatorId":563818,"editorId":563818,"createdAt":"2023-04-14T09:51:34.000Z","updatedAt":"2023-04-14T09:51:34.000Z","deletedAt":null},"projectSetting":{"apiStatuses":["developing","testing","released","deprecated"],"servers":[{"id":"default","name":"默认服务"}],"preProcessors":[],"postProcessors":[],"auth":{"type":"bearer","bearer":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMjY3IiwiaWF0IjoxNjgxMTEzMTU3LCJleHAiOjE2ODE3MTc5NTd9.QJEEGc8rTOkp9XQc4oldC89qcvwtdkhwd4CT-RNnmVk"}},"initialDisabledMockIds":[],"mockSettings":{},"gateway":[],"advancedSettings":{},"language":"zh-CN","id":"2062407","cloudMock":{"security":"free","enable":false,"tokenKey":"apifoxToken"}}}

1.2 Rest API 调用

腾讯提供了一系列的 api 接口,方便我们维护聊天业务功能,本文会对常见接口做一个介绍。

后面涉及到服务端调用问题不再重复。

用到的接口有用户、聊天群、消息推送。

1.2.1 签名介绍

即时通信 IM REST API 简介-服务端 API-文档中心-腾讯云

REST API 的 URL 格式如下:

https://xxxxxx/$ver/$servicename/$command?sdkappid=$SDKAppID&identifier=$identifier&usersig=$usersig&random=99999999&contenttype=json

其中各个参数的含义以及取值如下(参数名称及其取值均区分大小写):

参数含义取值
https请求协议请求协议为 HTTPS,请求方式为 POST
xxxxxx专属域名中国:console.tim.qq.com新加坡:adminapisgp.im.qcloud.com首尔: adminapikr.im.qcloud.com法兰克福:adminapiger.im.qcloud.com孟买:adminapiind.im.qcloud.com硅谷:adminapiusa.im.qcloud.com
ver协议版本号固定为v4
servicename内部服务名,不同的 servicename 对应不同的服务类型示例:v4/im_open_login_svc/account_import,其中im_open_login_svcservicename更多详情请参见 REST API 接口列表
command命令字,与 servicename 组合用来标识具体的业务功能示例:v4/im_open_login_svc/account_import,其中account_importcommand更多详情请参见 REST API 接口列表
sdkappidApp 在即时通信 IM 控制台获取的应用标识在申请接入时获得
identifier用户名,调用 REST API 时必须为 App 管理员帐号参见 App 管理员
usersig用户名对应的密码参见 生成 UserSig
random标识当前请求的随机数参数32位无符号整数随机数,取值范围0 - 4294967295
contenttype请求格式固定值为json

1.2.2 腾讯接口

生成管理员 administrator 签名

登录 - 腾讯云

进入后台 辅助工具->UserSig生成&校验

配置到项目的 env 中

# tim

tim_server=console.tim.qq.com tim_appid=1400803542 tim_key=4d461a6e470248ffeeb75484xxxxxsssss7ee5b27126c5a728 tim_admin_sig=eJwtzEELgkAUxxxsssszexVNhkrV9VgTbMthZ3JxXBx8n-n7NjRVNn6-Z9weliDXv

包装一个 post 请求函数
    async _post(path, jsonValue) {// 随机的32位无符号整数const random = Math.floor(Math.random() * 4294967295)const url = `https://${config.tim_server}/${path}?sdkappid=${config.tim_appid}&identifier=administrator&usersig=${config.tim_admin_sig}&random=${random}&contenttype=json`const res = await superagent.post(url).send(jsonValue).set('accept', 'json')const json = JSON.parse(res.text)return json}
查询账号

即时通信 IM 查询账号-服务端 API-文档中心-腾讯云

用于查询自有帐号是否已导入即时通信 IM,支持批量查询。

async queryUser(username) {const req = {CheckItem: [{UserID: username}]}const res = await this._post('v4/im_open_login_svc/account_check', req)if (res.ActionStatus != 'OK') {throw new Error(res)}return res}
导入单个账号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2734. 执行子串操作后的字典序最小字符串(Rust单百算法)

题目 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为: 选择 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,‘b’ 用 ‘a’…

华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

酷开科技丨酷开系统大屏购物 打造沉浸式购物体验

在这个信息化的时代,购物已经不仅仅局限于传统的线下店铺,线上购物逐渐成为了我们生活中重要的一部分。而大屏购物作为线上购物的一种形式,更是凭借其独特的优势和实用的技巧,成为了消费者们的新宠。随着科技的进步和消费者需求的…

lumbda常用操作

文章目录 lumbda的常用操作将List<String>转List<Integer>filter 过滤max 和min将List<Object>转为Map将List<Object>转为Map&#xff08;重复key&#xff09;将List<Object>转为Map&#xff08;指定Map类型&#xff09; lumbda的常用操作 将Li…

读AI新生:破解人机共存密码笔记13有益机器

1. 标准模型 1.1. 我们能控制一个从外太空来的超级智能实体的概率几乎为零 1.2. 随着根据标准模型设计的机器变得更加智能&#xff0c;以及它们的行动范围遍及全球&#xff0c;关闭机器这种方法越来越不可行 1.2.1. 机器将会追求它们自己的目标&#xff0c;无论目标错得多么…

《大道平渊》· 拾伍 —— 为什么做生意的人都欲望比较充足?

《大道平渊》 拾伍 " 欲壑难填&#xff0c;勇往直前。" 为什么做生意的人都欲望比较充足&#xff1f;因为没有人给他们发工资。 在自由市场上&#xff0c;对手渠道、组织运行效率、商业化…… 随时一波小浪&#xff0c;都能把你干下场。 . 我们毕竟不是真正的 食…

eNSP中DHCP的相关命令和配置

一、拓扑图 1.新建拓扑图 2.设置PC端 双击PC1&#xff0c;在基础配置下&#xff0c;将IPv4配置选择”DHCP“&#xff0c;点击“应用”。 PC2、PC3、PC4同样操作。 二、DHCP配置 1.g0/0/0口的配置 在AR1上的命令配置如下&#xff1a; <Huawei>system-view [Huawei]…

.NET 一款支持8种方式维持权限的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

CloudFlare Tunnel实现内网穿透

CloudFlare Tunnel 背景&#xff1a; 家中设备处于内网NAT环境&#xff0c;希望使用CF tunnel构建内网穿透的环境。 有了CF tunnel后&#xff0c;可实现&#xff1a; 家中的NAS可以直接SSH AWS的云服务可迁到到NAS NAT主机借助CF tunnel部署服务 步骤&#xff1a; clou…

数据结构——跳表Skip List

本文对跳表的定义、实现、应用等进行简单总结。 一、 介绍 1.定义 跳表&#xff08;Skip List&#xff09;&#xff1a;是一种概率性数据结构&#xff0c;由William Pugh在1990年提出&#xff0c;主要用于在有序的元素集合上进行快速的搜索、插入和删除操作。跳表的效率与平衡…

英语智汇学习系统

目 录 1 软件概述 1.1 项目研究背景及意义 2 系统相关技术 2.1 HTML、WXSS、JAVASCRIPT技术 2.2 Vanilla框架 2.3 uni-app框架 2.4 MYSQL数据库 3 需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用户及用例分析 3.4 非功能需求分析 3.5 数据流图…

windows USB 设备驱动开发-总章

通用串行总线 (USB) 提供可扩展的即插即用串行接口&#xff0c;确保外围设备的标准、低成本的连接。 USB 设备包括键盘、鼠标、游戏杆、打印机、扫描仪、存储设备、调制解调器、视频会议摄像头等。USB-IF 是一个特别兴趣组 (SIG)&#xff0c;负责维护官方 USB 规范、测试规范和…

如何提高项目风险的处理效率?5个重点

提高项目风险的处理效率&#xff0c;有助于迅速识别和应对风险&#xff0c;减少风险导致的延误&#xff0c;降低成本&#xff0c;提升项目质量&#xff0c;确保项目按时交付。如果项目风险处理效率较低&#xff0c;未能及时发现和处理风险&#xff0c;导致问题累积&#xff0c;…

小米汽车SU7全色系H5自适应展示源码

为了满足广大车迷和潜在消费者对小米汽车SU7全色系的视觉体验需求&#xff0c;我们特别推出了一款基于HTML的自适应H5源码&#xff0c;用于在线展示小米汽车SU7的全色系。这款源码不仅兼容各种设备和屏幕尺寸&#xff0c;而且能够完美地呈现出小米汽车SU7的优雅外观和精致细节。…

【qt】CAD下

目录 一.前言二.缩放1.逻辑2.获取图形项选中的个数3.获取图形项并放大4.视图缩放5.完整代码6.效果展示7.缩小完整代码 三.旋转1.图形项进行旋转2.视图的旋转3.完整代码4.效果展示5.右转代码 四.恢复1.图形项复原2.视图复原3.完整代码4.效果展示 五.前后置1.设置z轴的值2.后置代…

Linux 扩容 根分区

CentOS7&#xff0c;LVM根分区扩容步骤&#xff1a; LVM扩容思维流程&#xff1a;创建一个物理分区–>将这个物理分区转换为物理卷–>把这个物理卷添加到要扩展的卷组中–>然后才能用extend命令扩展此卷组中的逻辑卷 1.查看现有分区大小 df -TH 2.关机增加大小为40G(…

appinventor2中求某个值在列表中的索引用什么方法?

使用“求对象在列表中的位置”方法就可以了&#xff1a; 返回指定对象在列表中的位置&#xff0c;从 1 开始&#xff0c;如果不在列表中&#xff0c;则返回 0。 相应地&#xff0c;知道了索引&#xff0c;从列表中取值得方法是&#xff1a;选择列表中索引值对应的列表项 返回…

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

昇思MindSpore学习总结二——张量

1、张量 张量tensor表示的是一个多维的矩阵&#xff0c;比如零维就是一个点&#xff0c;一维就是向量&#xff0c;二维就是一般的矩阵&#xff0c;多维就相当于一个多维的数组&#xff0c;这和numpy是对应的&#xff0c;而且PyTorch的Tensor和numpy的ndarray可以相互转换&#…

Python | Leetcode Python题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution:def dfs(self, grid, r, c):grid[r][c] 0nr, nc len(grid), len(grid[0])for x, y in [(r - 1, c), (r 1, c), (r, c - 1), (r, c 1)]:if 0 < x < nr and 0 < y < nc and grid[x][y] "1":self.d…