对接腾讯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才对

相关推荐
三天不学习2 天前
【超详细】Vue3+UniApp+.NET8集成腾讯云IM即时通信全攻略
uni-app·.net·腾讯云·im·即时通信
蜡台3 天前
UniApp WebView 组件宽高设置与动态适配全方案
前端·javascript·uniapp·webview·iframe
liana87444 天前
把核心数据锁进“信息孤岛”:专网独立部署如何实现安全与效率兼得
安全·数据安全·即时通讯·专网独立部署·信息孤岛·物理隔离
liana87446 天前
一体化安全协同:从协作工具到企业数字化中枢的演进
即时通讯·一体化安全协同·企业数字化底座·统一消息流·安全管控
liana87449 天前
企业IM即时通讯:从消息中枢到AI协作引擎的演进之路
私有化部署·即时通讯·企业im·ai协作引擎·ai融合
路光.10 天前
uniapp中解决webview在app中调用,有过渡空白问题,增加过渡动效
uni-app·vue·app·uniapp
咸虾米_1 个月前
uniCloud服务空间从阿里云搬家迁移至支付宝云
阿里云·uniapp·unicloud·支付宝云·云开发服务空间
RuoyiOffice1 个月前
低代码平台荣耀不再:AI 浪潮下,企业系统为什么重新回到原生代码
人工智能·spring boot·低代码·ai·vue·uniapp·ruoyioffice
jeff聊企业数字化1 个月前
私有化即时通讯选型指南:兼顾安全与高效
go·业界资讯·即时通讯
恒拓高科WorkPlus1 个月前
BeeWorks 私有化安全协作平台白皮书(2026 版)
即时通讯·白皮书·协作平台·协作平台白皮书·即时通讯白皮书