uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频

这篇具有很好参考价值的文章主要介绍了uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频

原则

拿来即用,节省开发时间

介绍

腾讯的给的例子内容比较乱,我花了好长时间才集成出来,然后对聊天页面做了UI美化。

效果图

uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、

使用方式

  1. 将文件放到相应的位置
    uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频
  2. app配置
<script>
	import TIM from 'tim-wx-sdk';
	import COS from 'cos-wx-sdk-v5';
	import TIMUploadPlugin from 'tim-upload-plugin';
	import logger from './utils/logger'; // app.js
	import {
		SDKAppID
	} from './debug/GenerateTestUserSig.js';
	import {genTestUserSig} from "./debug/GenerateTestUserSig.js"
	
	
	export default {
		onLaunch: function() {
			uni.setStorageSync(`TIM_${SDKAppID}_isTUIKit`, true);
			// 重点注意: 为了 uni-app 更好地接入使用 tim,快速定位和解决问题,请勿修改 uni.$TUIKit 命名。
			// 如果您已经接入 tim ,请将 uni.tim 修改为 uni.$TUIKit。
			uni.$TUIKit = TIM.create({
				SDKAppID: SDKAppID
			});
			
			// 注册 COS SDK 插件
			uni.$TUIKit.registerPlugin({
				'cos-wx-sdk': COS,
				'tim-upload-plugin': TIMUploadPlugin
			});
			
			// 如果您已创建了 tim,请将 tim 实例挂载在 wx 上,且不可以修改 wx.$TIM(修改变量可能导致 TUICalling 组件无法正常使用), 完成 TUICalling 初始化,
			// 如果您没有创建,可以不传
			// #ifdef MP-WEIXIN
			wx.$TIM = uni.$TUIKit;
			// #endif
			uni.$TUIKitTIM = TIM;
			uni.$TUIKitEvent = TIM.EVENT;
			uni.$TUIKitVersion = TIM.VERSION;
			uni.$TUIKitTypes = TIM.TYPES; // 监听系统级事件
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady);
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady);
			uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut);
			uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError);
			uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange);
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload);
			
			//重新设置用户信息
			uni.$LTResetLoginData = this.resetLoginData;
			uni.$LTLogin = this.liaotianLogin;
			uni.$LTUpdateMyInfo = this.ltUpdateMyInfo;
		},
		globalData: {
					// userInfo: userID userSig token phone
					userInfo: {
						userID:'',
						userSig:""
					},
					// 个人信息
					userProfile: {
					},
					isTUIKit: true,
					headerHeight: 0,
					statusBarHeight: 0,
					SDKAppID: SDKAppID,
					isSDKReady:false
				},
		methods: {
			onTIMError(event) {
				console.info("聊天-SDK遇到错误时触发",event)
				uni.showModal({
					title:"系统提示",
					content:'初始化聊天错误:' + event.data.code + "," + event.data.message,
				})
			},
			onSDKReady({name}) {
				console.info("聊天-SDK进入ready状态时触发",name)
				const isSDKReady = name === uni.$TUIKitEvent.SDK_READY ? true : false
				getApp().globalData.isSDKReady = true
				this.ltUpdateMyInfo()
			},
			onSdkNotReady() {
				console.info("聊天-SDK进入not ready状态时触发")
				getApp().globalData.isSDKReady = false
			},
			onNetStateChange(event) {
				console.info("聊天-网络状态改变通知",event)
				// v2.5.0 起支持
				  // event.data.state 当前网络状态,枚举值及说明如下:
				  // TIM.TYPES.NET_STATE_CONNECTED - 已接入网络
				  // TIM.TYPES.NET_STATE_CONNECTING - 连接中。很可能遇到网络抖动,SDK 在重试。接入侧可根据此状态提示“当前网络不稳定”或“连接中”
				  // TIM.TYPES.NET_STATE_DISCONNECTED - 未接入网络。接入侧可根据此状态提示“当前网络不可用”。SDK 仍会继续重试,若用户网络恢复,SDK 会自动同步消息
				  
			},
			onSDKReload() {
				console.info("聊天-SDK重启")
			},
			onKickedOut() {
				console.info("聊天-用户被踢下线时触发")
				uni.showModal({
					title:"系统提示",
					content:'您的聊天账号在另一台设备登陆,若不是本人,请联系管理员',
				})
				
				
			},
			liaotianLogin(event){
				if(getApp().globalData.isSDKReady === true){
					if(this.isNotNull(event)){
						event(true)
					}
					return
				}
				this.resetLoginData()
				console.info("签名",getApp().globalData.userInfo)
				uni.$TUIKit.login({userID: getApp().globalData.userInfo.userID, userSig: getApp().globalData.userInfo.userSig})
				.then((imResponse)=> {
				  console.log("登陆结果",imResponse.data); // 登录成功
				  if (imResponse.data.repeatLogin === true) {
				    // 标识帐号已登录,本次登录操作为重复登录。v2.5.1 起支持
				    console.log("登陆成功",imResponse.data.errorInfo);
				  }else{
					 let interval = setInterval(()=> {
					 	console.info("sdk是否准备",getApp().globalData.isSDKReady)
					       if(getApp().globalData.isSDKReady === true){
					 		  if(this.isNotNull(event)){
					 			  clearInterval(interval)
					 			  event(true)
					 		  }
					 	  }
					 }, 100) 
				  }	
				})
				.catch((imError)=> {
					console.warn('登陆失败:', imError); // 登录失败的相关信息
					uni.showModal({
						title:"系统提示",
						content:"聊天登陆失败,请稍后重试",
					})
				  event(false)
				});
			},
			// 聊天 - 初始化数据
			resetLoginData() {
				//从数据库获取到用户信息
				let userInfo = {
					fbNickName:"闫伟",
					fbAvatarUrl:"https://thirdwx.qlogo.cn/mmopen/vi_32/LWicoUend7QOfiabWDRjfpPDB51LzhbzVzjibicqDD2ztqy7BlpicRn8HToMoDVg9g1XfNiayHStXfC2f6yGNHgLueEw/132",
					liaotianId:"lt402882f280bb92810180bbb3f40a000f",
				}
				getApp().globalData.expiresIn = '';
				getApp().globalData.sessionID = '';
				getApp().globalData.userInfo = {
					userID: userInfo.liaotianId,
					userSig: genTestUserSig(userInfo.liaotianId).userSig,
				};
				getApp().globalData.userProfile = {
					userID:userInfo.liaotianId,
					nick: userInfo.fbNickName,
					avatar:userInfo.fbAvatarUrl
				};
			},
			ltUpdateMyInfo(){
				if(getApp().globalData.isSDKReady === true){
					let userInfo = this.$user.getUserInfo()
					// 修改个人标配资料
					let promise = uni.$TIM.updateMyProfile({
					  nick: userInfo.fbNickName,
					  avatar: userInfo.fbAvatarUrl,
					  // allowType: uni.$TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
					});
					promise.then(function(imResponse) {
					  console.log("更新资料成功",imResponse.data); // 更新资料成功
					}).catch(function(imError) {
					  console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
					});
				}
			},
			/**
			 * 是否不为空
			 * @param {Object} params
			 */
			isNotNull(params){
			      if (typeof(params) === 'undefined'){
					  return false
				  }else if(params == null){
					  return false
				  }
				  
				  return true
			}
		},
		onShow: function(res) {
			
		},
		onHide: function() {
		
		}
	}
</script>

<style>
	@import "colorui/main.css";
	@import "colorui/icon.css";
	
	body{
		height: 100%;
		width: 100%;
		background-color: #ededed;
		color: #333333;
		font-family: 'ukijtor'
	}
	
	.full-back-color-gray{
		height: 100%;
		background-color: #f1f1f1;
	}
	
	.full-back-color-white{
		height: 100%;
		background-color: white;
	}
	.nav-list {
		display: flex;
		flex-wrap: wrap;
		padding: 0px 40upx 0px;
		justify-content: space-between;
	}
	
	.nav-li {
		padding: 30upx;
		border-radius: 12upx;
		width: 45%;
		margin: 0 2.5% 40upx;
		background-image: url(https://cdn.nlark.com/yuque/0/2019/png/280374/1552996358352-assets/web-upload/cc3b1807-c684-4b83-8f80-80e5b8a6b975.png);
		background-size: cover;
		background-position: center;
		position: relative;
		z-index: 1;
	}
	
	.nav-li::after {
		content: "";
		position: absolute;
		z-index: -1;
		background-color: inherit;
		width: 100%;
		height: 100%;
		left: 0;
		bottom: -10%;
		border-radius: 10upx;
		opacity: 0.2;
		transform: scale(0.9, 0.9);
	}
	
	.nav-li.cur {
		color: #fff;
		background: rgb(94, 185, 94);
		box-shadow: 4upx 4upx 6upx rgba(94, 185, 94, 0.4);
	}
	
	.nav-title {
		font-size: 32upx;
		font-weight: 300;
	}
	
	.nav-title::first-letter {
		font-size: 40upx;
		margin-right: 4upx;
	}
	
	.nav-name {
		font-size: 28upx;
		text-transform: Capitalize;
		margin-top: 20upx;
		position: relative;
	}
	
	.nav-name::before {
		content: "";
		position: absolute;
		display: block;
		width: 40upx;
		height: 6upx;
		background: #fff;
		bottom: 0;
		right: 0;
		opacity: 0.5;
	}
	
	.nav-name::after {
		content: "";
		position: absolute;
		display: block;
		width: 100upx;
		height: 1px;
		background: #fff;
		bottom: 0;
		right: 40upx;
		opacity: 0.3;
	}
	
	.nav-name::first-letter {
		font-weight: bold;
		font-size: 36upx;
		margin-right: 1px;
	}
	
	.nav-li text {
		position: absolute;
		right: 30upx;
		top: 30upx;
		font-size: 52upx;
		width: 60upx;
		height: 60upx;
		text-align: center;
		line-height: 60upx;
	}
	
	.text-light {
		font-weight: 300;
	}
	
	@keyframes show {
		0% {
			transform: translateY(-50px);
		}
	
		60% {
			transform: translateY(40upx);
		}
	
		100% {
			transform: translateY(0px);
		}
	}
	
	@-webkit-keyframes show {
		0% {
			transform: translateY(-50px);
		}
	
		60% {
			transform: translateY(40upx);
		}
	
		100% {
			transform: translateY(0px);
		}
	}
</style>

  1. main.js 配置
// 全局mixins,用于实现setData等功能';
import Mixin from './polyfill/mixins';
Vue.mixin(Mixin);
  1. pages.json 配置
{
	"pages": [
		{
		    "path" : "pages/TUI-Conversation/conversation/conversation",
		    "style" :                                                                                    
		    {
		        "navigationBarTitleText": "消息",
		        "enablePullDownRefresh": false
		    }
		},
		{
		    "path" : "pages/TUI-Chat/chat",
		    "style" :                                                                                    
		    {
				"navigationBarTitleText": "聊天",
				"enablePullDownRefresh": false
		    }
		}
    ],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "集成腾讯im",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8",
		"usingComponents": {}		
	}
}

  1. GenerateTestUserSig.js配置SDKAPPID和SECRETKEY
  2. 安装 npm i
  3. 运行

源码

下载源码

联系方式

可关注后发私信

文章转载

查看文章文章来源地址https://www.toymoban.com/news/detail-490770.html

到了这里,关于uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp对接腾讯云IM+音视频。音视频含UI集成

    提示:作者已经实现uniapp集成腾讯云IM+音视频到android和ios平台,如有疑问可在下方留言。音视频为含ui集成 uniapp腾讯云音视频插件地址 官方插件显示的ios版本为9-15,本人ios版本号为16.1,亲测可行 uniapp 腾讯云音视频文档 uniapp 腾讯云IM文档 注意这个是uni的v3+ts版本,如果是v2版

    2024年02月07日
    浏览(40)
  • Windows7中使用SRS集成音视频一对一通话

    SRS早就具备了SFU的能力,比如一对一通话、多人通话、直播连麦等等。在沟通中,一对一是常用而且典型的场景, 让我们一起来看看如何用SRS做直播和RTC一体化的一对一通话。 一、启动windows7-docker  二、拉取SRS镜像 执行命令:docker pull ossrs/srs:4 使用docker images查看当前镜像列

    2024年02月16日
    浏览(45)
  • 【腾讯云IM】即时通讯的登录,登出,用户列表,私聊,图片发送

    附上腾讯云文档链接:https://cloud.tencent.com/document/product/269/75285 1,初始化(刚开始就紧跟着文档走) 2,App.vue中项目引入腾讯云,(附上账号在其他地方登陆的监听) 3,登录前必需 3.1,获取登录id 这个id相当于用户标识,一般采用用户id,但注意,传的 时候要转成字符串格

    2024年02月13日
    浏览(42)
  • 腾讯TIM实现即时通信 v3+ts实践

    目录 初始化sdk 功能描述 初始化 准备 SDKAppID 调用初始化接口  监听事件 发送消息 创建消息 创建文本消息 登录登出 功能描述 登录 登出 销毁 登录设置 获取会话列表 功能描述 获取会话列表 获取全量的会话列表  历史消息 功能描述 拉取消息列表 分页拉取指定会话的消息列

    2024年02月04日
    浏览(48)
  • [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备  项目目录  一对一查询(多对一) 方式一:(xml文件映射) 查询结果:  方式二:(注解映射)  一对多查询(一对多) 方式一:(xml文件映射)  方式二:(注解映射) 既然数据库是存储项目中的数据的,项目中的

    2023年04月10日
    浏览(43)
  • TCP实现一对一聊天

    一,创建类 二,类 1.ChatSocketServer类 2.ChatSocketClient类 三,结果(先服务  再客户)

    2024年02月03日
    浏览(41)
  • IM即时通讯源码/im源码基于uniapp框架从0开始设计搭建在线聊天系统

    随着人社交产品的不断发展,即时通讯聊天这门技术也越来越重要,很多人都开启了学习通讯技术,本文就介绍了即时通讯的基础内容。 在开始设计和搭建聊天系统之前,需要确定所需技术栈。常用的技术栈包括前端、后端和数据库。例如,前端可以选择uni-app,后端可以选

    2024年02月04日
    浏览(47)
  • NRF24L01学习操作教程(二)——NRF实现一对一,一对多通讯

    上篇博客链接:https://blog.csdn.net/DIVIDADA/article/details/130599974?spm=1001.2014.3001.5501 以下单片机例程都是基于STM32 HAL库,在文档末尾,我会提供参考博客和源码程序的链接。 在CubeMx中配置单片机时钟、SPI通讯接口、NRF24L01接口等,并生成Keil工程 将NRF24L01的驱动程序的.c文件和.h文件

    2024年01月15日
    浏览(36)
  • 开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门

    ►  相关链接: ① MobileIMSDK-Uniapp端的详细介绍 ② MobileIMSDK-Uniapp端的开发手册new(* 精编PDF版) 您需要对Uniapp和Vue开发有所了解: 1) Uniapp 官方入门教程 2) 可能是最好的 uniapp 入门教程 3) Uniapp 官方 Vue 快速入门教程 您需要对WebSocket技术有所了解: 1) 新手快速入门:

    2024年02月05日
    浏览(65)
  • Springboot + websocket 实现 一对一 单人聊天

    Springboot + websocket   实现 一对一 单人聊天 打开项目中的pom.xml,添加以下内容 配置websocke的endpoints 配置websocket的server @ServerEndpoint (value = \\\"/websocket/{username}\\\" ) 这句话 一定要注意, 这里 路径指定的是 页面需要访问的server的地址, {username} 表示需要传递参数 为刚刚的类 添加 属性

    2024年01月17日
    浏览(98)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包