对接腾讯IM,实现个人业务系统页面按钮直接跳转到和用户的聊天页面(不需要加好友)

实现效果如下:

前提条件:

1、到腾讯IM控制台,创建应用,并获取应用ID和密钥

2、创建测试用户

3、根据文档下载安装SDK(我用的unipp小程序端),并设置page.json文件(page.json就是正常的设置页面路径和tabbar,我就不再做截图和示例了,腾讯的文档也有说明)

文档地址:
https://cloud.tencent.com/document/product/269/120088

4、代码目录如下(主要是TUIKit目录):

5、index.vue即时聊天按钮方法

javascript 复制代码
/*在js顶部引入方法库*/
import {imLogin} from '@/config/api.js';
//跳转到IM聊天
methods: {
	 toChat(item) {
		console.log('跳转到聊天页面');
		//最终,这里要读取item中用户的userId字段,这里只是写死的demo
		imLogin({userId: 'user1'}, () => {
			uni.navigateTo({
				url: '/TUIKit/components/TUIChat/index'
			})
		});
	}
}

6、api.js代码如下:

javascript 复制代码
/*IM聊天相关函数--START*/
import Server from '@/TUIKit/components/TUIContact/server';
import TUICore from '@tencentcloud/tui-core-lite';
import {TUIConversationService, TUIStore, StoreName} from '@tencentcloud/chat-uikit-engine-lite';
import { TUIGlobal } from '@tencentcloud/universal-api';
import { TUILogin } from '@tencentcloud/tui-core-lite';
import { TUIChatEngine } from '@tencentcloud/chat-uikit-engine-lite';
import { genTestUserSig } from '@/TUIKit/debug';
import { SDKAppID, secretKey } from '@/config/config.js';

const TUIContactServer = Server.getInstance();
const TUIConstants = TUIContactServer.constants;

//跳转到用户聊天页面
const toUserContact = (user, userID) => {
	TUIStore.update(StoreName.CUSTOM, 'isShowSelectFriendComponent', false);
	//console.log('调试TUIContactServer:', TUIContactServer);
	//const callback = TUIContactServer.getOnCallCallback(TUIConstants.TUIContact.SERVICE.METHOD.SELECT_FRIEND);
	//callback && callback(memberList);
	//打开会话
	//let conversationId = `C2C${userID}`;  //生产环境应该使用这句代码
	let conversationId = `C2Cuser2`;  //这里写死只做demo使用
	TUIConversationService.switchConversation(conversationId).then(() => {	    
	    console.warn('打开会话成功');
		TUIGlobal?.navigateTo({
		  url: '/TUIKit/components/TUIChat/index',
		});
	}).catch((err) => {
	    console.warn('打开会话失败', err.code, err.msg);
	});
}

//检查IM中,userID是否存在
const checkUser = async (userID, callback) => {	
	const imCore = TUICore.getService(TUIConstants.TUISearch.SERVICE.NAME);
	const imResponse = await imCore.searchUser(userID);
	console.log('IM用户查询结果:', imResponse);
	if (!imResponse.data[0]) {
		callback(false);
	} else {
		callback(imResponse.data[0]);
	}
	// userList.value = imResponse.data;
	// const searchAllResult = friendList.value.filter((item : any) => item.userID === imResponse.data[0].userID);
	// friendList.value = searchAllResult.length ? friendList.value : [...friendList.value, ...userList.value];
}

//登录Im
export const imLogin = (data, callback) => {
	try {
		//生成IM签名
		const { userSig } = genTestUserSig({
			SDKAppID: SDKAppID,
			userID: data.userId,
			secretKey: secretKey,
		});
		
		//此段代码需要摞到登录的代码位置
		TUILogin.login({
			SDKAppID: SDKAppID,
			userID: data.userId,
			userSig: userSig,
			framework: 'vue2' // framework used vue2 / vue3
		}).then(() => {
			TUIChatEngine.isReady();
			//检查用户是否存在
			checkUser(data.userId, (checkUserRes) => {
				if (checkUserRes !== false) {
					// uni.switchTab({
					// 	url: '/TUIKit/components/TUIConversation/index',
					// });
					
					toUserContact(checkUserRes, data.userId)
				} else {
					uni.showToast({
						title: '未注册IM账号'
					})
				}
			});			
		}).catch((error) => {
			console.error(error);
		});
	} catch (error) {
		uni.showToast({
			title: '登录失败',
			icon: 'error'
		})
	}
}

/*IM聊天相关函数--END*/

7、config.js代码如下

javascript 复制代码
//腾讯IM即时通讯配置
export const SDKAppID = 1111111111; // Your SDKAppID
export const secretKey = 'XXXXXXXXXXXXX'; // Your secretKey```

8、用户注册系统账号时,服务端代码通过接口创建IM账号

文档地址:https://cloud.tencent.com/document/product/269/1608?from=console_document_search

最终即可实现动图示例中的效果

注意:代码示例中登陆的用户id和聊天对象的用户id都是写死的,正常应该是读取系统每个用户ID才对

相关推荐
梦想的颜色3 天前
UniApp 请求层终极封装:统一拦截、错误处理、多端兼容,结合 Claude Code 高效落地
服务器·uniapp·uni.request·codex·claudecode·ai 辅助开发·uniapp 请求封装
XiaoLin laile5 天前
信创IM安全合规的焦虑与重构
即时通讯·安全合规·数据主权·信创im·选型标准
pursue.dreams14 天前
基于若依(RuoYi)二次开发的自营商城系统:从架构设计到落地的全栈实践
uniapp·商城·若依
RuoyiOffice16 天前
超级个体接私活必看:后端+前端+移动端三端一体企业管理系统怎么选(2026)
java·spring boot·vue·uniapp·全栈·企业管理·接私活
蜡台17 天前
使用 uni-popup 实现数据选择器Data-Picker
前端·javascript·html·uniapp·uni-popup·data-picker
huijingjituan20 天前
新一代IM聊天软件|构建企业专属智能通讯生态
安全·实时互动·即时通讯·极光鸟·灰鲸
丁小未25 天前
Unity 极致高效的IM设计方案教程
unity·性能优化·游戏引擎·im
hellojackjiang20111 个月前
基于开源MobileIMSDK框架,即时通讯IM产品RainbowChat v12.1发布
开源·即时通讯·rainbowchat·im产品·mobileimsdk
zhuweisky2 个月前
.NET 程序在装有企业防水墙的电脑上运行报错:内存不足
即时通讯·防水墙·oraytalk
蜡台2 个月前
uni-indexed-list 之扩展组件实现城市列表带索引查询过滤功能
前端·vue.js·uniapp·uni-indexed