浅谈腾讯云IM接入方式(java后端)

这篇博客详细介绍了如何从零开始接入腾讯云IM服务,包括注册账号、引入依赖、获取userSign、调用关键接口如导入账号、创建群组等,并提供了导入单个账号的DEMO代码。适合初次接触腾讯云IM的小白开发者参考。

小白入门接入腾讯云IM教程

        腾讯云IM接口文档相当齐全,可以供开发者快速接入单聊、群聊功能到企业系统中。开发者可以根据自己的业务需求,利用相应的接口实现自己的业务需求。如群聊,自定义发言、自定义禁言、自定义在线状态等功能。

一、注册账号

1、注册好腾讯云账号,登录进行创建应用,获取到sdkappid、secretkey、userId。

二、引入依赖及获取userSign

1、引入依赖

<dependency>
   <groupId>com.github.tencentyun</groupId>
   <artifactId>tls-sig-api-v2</artifactId>
   <version>2.0</version>
</dependency>

2、获取userSign(参考即时通信 IM 生成 UserSig - 服务端 API - 文档中心 - 腾讯云

public String genUserSig(String userId) {
    TLSSigAPIv2 api = new TLSSigAPIv2(sdkAppId, secretKey);
    String userSig = api.genUserSig(userId, expireTime);
    return userSig;
}

三、基本业务需要用到的接口

1、导入单个账号(即时通信 IM 导入单个帐号 - 服务端 API - 文档中心 - 腾讯云)。

2、导入多个账号。

3、查询账号。

4、删除账号。

5、创建群组。

6、解散群组。

7、导入群成员。

8、删除群成员。

9、设置资料(设置群成员昵称等)。

10、在群组中发送普通消息(自定义消息)。

11、群、单聊发言前、后回调接口(详见https://blog.youkuaiyun.com/wode3157695297/article/details/121063652)。

四、接口调用demo方法-导入单个账号

public Result<?> accountImport(JSONObject jsonObject) {
        String identifier = jsonObject.getString("identifier"); // 用户名,长度不超过32字节
        String nick = jsonObject.getString("nick"); // 用户昵称
        String faceUrl = jsonObject.getString("faceUrl"); // 用户头像 URL
        if (oConvertUtils.isEmpty(identifier)) {
            Result.Tips("用户名不能为空!");
        }
        Long random = RandomUtil.genRandomNum(32);
String accountImport= "https://console.tim.qq.com/v4/im_open_login_svc/account_import?sdkappid=%s&identifier=%s&usersig=%s&random=%s&contenttype=json";
        try {
            String userSig = genUserSig();
            String url = String.format(accountImport, sdkAppId, userId, userSig, random);
            JSONObject js = new JSONObject();
            js.put("Identifier", identifier);
            js.put("Nick", nick);
            js.put("FaceUrl", faceUrl);
            String body = HttpUtil.post(url,js.toString());
            log.info("导入单个账号应答包体报文:{}", body);
            if (StrUtil.isEmpty(body)) {
                return null;
            }
            //ErrorCode    Integer    错误码,0表示成功,非0表示失败
            Integer code = (Integer) JSONUtil.parseObj(body).get("ErrorCode");
            if (code == 0) {
                //导入单个账号成功
                return Result.OK("导入单个账号成功!");
            }
            return Result.OK(body);
        } catch (Exception e) {
            log.error("导入单个账号异常", e);
            return Result.OK(e);
        }
    }

总结:由于接入腾讯云IM有一段时间了,才写这篇文章,所以只列举了一些关键接口,和一个demo,如有小白需要接入,可以多看腾讯云在线接口文档,里面有详细的说明,本文只是记录和引导小白去看文档开发作用。

腾讯云IM中,后端发送自定义消息可以通过调用腾讯云IM的服务端API来实现。腾讯云IM提供了服务端REST API,可以用于在后端系统中发送消息,包括自定义消息类型。以下是实现的关键步骤和注意事项: ### 发送自定义消息的流程 1. **获取必要的参数** 在发送自定义消息之前,需要确保获取到以下参数: - `SDKAppID`:即时通信IM应用的唯一标识。 - `identifier`:管理员账号的用户ID。 - `usersig`:管理员账号的签名,用于身份验证。 - `random`:随机32位无符号整数,用于标识消息的唯一性。 - `timestamp`:当前时间戳。 2. **构造请求体** 自定义消息的格式需要符合腾讯云IM的协议规范。以下是一个JSON请求体的示例: ```json { "SyncOtherMachine": 1, "MsgRandom": 123456789, "MsgTimeStamp": 1620000000, "MsgBody": [ { "MsgType": "TIMCustomElem", "MsgContent": { "Data": "{\"businessID\":\"recipe_view\",\"id\":\"123456\"}", "Desc": "自定义消息描述", "Ext": "", "Sound": "" } } ] } ``` 其中,`Data`字段是自定义消息的核心内容,开发者可以将业务相关的数据以JSON格式填充进去。 3. **调用REST API** 调用腾讯云IM的发送消息接口`/v4/openim/sendmsg`,将构造好的JSON请求体发送至腾讯云IM的服务端。 4. **处理响应结果** 服务端会返回发送消息的结果,开发者需要解析返回的JSON数据,判断消息是否发送成功,并进行相应的日志记录或错误处理。 ### 注意事项 - **权限验证**:确保使用的`identifier`和`usersig`具有发送消息的权限。 - **频率限制**:腾讯云IM对API调用频率有一定的限制,开发者需要合理设计调用策略,避免因超限导致请求失败。 - **错误处理**:在调用API时,可能会遇到各种错误码,例如权限不足、参数错误等,需要根据错误码进行相应的处理[^3]。 ### 示例代码(Node.js) 以下是一个使用Node.js发送自定义消息的示例代码: ```javascript const axios = require('axios'); const crypto = require('crypto'); // 生成usersig function genUserSig(identifier, sdkAppId, secretKey, expire = 86400) { const time = Math.floor(Date.now() / 1000); const expireTime = time + expire; const contentToSign = `TLS.identifier:${identifier}\nTLS.sdkappid:${sdkAppId}\nTLS.time:${time}\nTLS.expire:${expireTime}\n`; const hmac = crypto.createHmac('sha256', secretKey); hmac.update(contentToSign); const signature = hmac.digest('base64'); return Buffer.from(`TLS.sigKey=${signature}&TLS.identifier=${identifier}&TLS.sdkappid=${sdkAppId}&TLS.time=${time}&TLS.expire=${expireTime}`).toString('base64'); } // 发送自定义消息 async function sendCustomMessage() { const sdkAppId = 'your_sdkappid'; const identifier = 'admin_user_id'; const secretKey = 'your_secret_key'; const userSig = genUserSig(identifier, sdkAppId, secretKey); const url = `https://console.tim.qq.com/v4/openim/sendmsg?sdkappid=${sdkAppId}&identifier=${identifier}&usersig=${userSig}&random=913852089&contenttype=json`; const payload = { SyncOtherMachine: 1, MsgRandom: 123456789, MsgTimeStamp: Math.floor(Date.now() / 1000), MsgBody: [ { MsgType: "TIMCustomElem", MsgContent: { Data: "{\"businessID\":\"recipe_view\",\"id\":\"123456\"}", Desc: "自定义消息描述", Ext: "", Sound: "" } } ] }; try { const response = await axios.post(url, payload); console.log('Message sent successfully:', response.data); } catch (error) { console.error('Failed to send message:', error.response?.data || error.message); } } ``` ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值