对接腾讯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实战:如何优雅地把 uv-ui (uv-qrcode) 生成的二维码保存到手机相册
微信小程序·uniapp·uvui
getaxiosluo4 天前
uniapp开发公众号,微信设置字体大小后,禁止改变页面字体大小
vue·uniapp·微信公众平台
特立独行的猫a5 天前
主要跨端开发框架对比:Flutter、RN、KMP、Uniapp、Cordova,谁是未来主流?
flutter·uni-app·uniapp·rn·kmp·kuikly
creator_Li5 天前
分布式IM聊天系统的消息可靠性
分布式·im
微:xsooop15 天前
iOS上架被拒4.3(a) 10次到过审历程
flutter·unity·ios·uniapp
任小栗15 天前
uniappx实现app壳子,可直接拿来用
vue·uniapp
hellojackjiang201125 天前
如何保障分布式IM聊天系统的消息有序性(即消息不乱)
分布式·架构·即时通讯·im开发
计算机程序设计小李同学1 个月前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
码界奇点1 个月前
基于Spring Boot 3与UniApp的跨平台新零售电商系统设计与实现
spring boot·uni-app·毕业设计·uniapp·零售·源代码管理