uniapp的uni-im 即时通信使用教程【用户与商家对话、聊天 / 最新 / 最全 / 带源码 / 教程】

目录

    • 使用场景
      • 用户图片
      • 商家图片
    • 官方文档
      • 官方文档地址
      • 插件地址
    • 项目创建uniCloud开发环境
      • 申请开发环境
      • 申请完后
    • 概括
    • 开始使用
    • 步骤1
      • App.vue
    • 步骤2
    • 找到软件登录图片
      • 找到软件登录接口
      • 登录源码如下
    • 步骤3
      • 找到软件注册图片
      • 注册源码如下
    • 步骤4
      • 找到index.vue首页
        • 图片
      • index.vue源码如下
      • 角标图片![请添加图片描述](https://img-blog.csdnimg.cn/direct/b3527f8065304179b3e5dcc0b28ec792.png)
    • 步骤5
      • 使用页面detail.vue
        • 图片
      • 源码如下
    • 步骤6
      • pages.json图片
    • 步骤7
    • 最后

使用场景

用户图片

请添加图片描述
请添加图片描述

商家图片

请添加图片描述

下载完插件,自动配置插件的路由,也就是想要的商家列表页面,和用户列表页面
请添加图片描述

官方文档

官方文档地址

文档要看仔细,一会要用!!!

uniapp官方:https://doc.dcloud.net.cn/uniCloud/uni-im.html

插件地址

插件地址:https://ext.dcloud.net.cn/plugin?name=uni-im

项目创建uniCloud开发环境

申请开发环境

注意:我这个项目是申请的阿里云的开发环境,要用HBuilder X的账号申请,阿里云开发环境,这个申请过程不是我弄的,后端账号给的我。

申请完后

1.登录HBuilder X刚才申请的账号

2.点击项目根目录,最外层的文件,在HBuilder X里面,左击,创建开发环境uniCloud,找到申请的阿里云,这就关联到自己HBuilder X账号申请的阿里云环境

图片:
请添加图片描述

概括

1.首先,这个过程,即时通信也有登录,注册过程,这个两个过程
必须软件的账号登录和注册同时的,也就是说,登录和注册,都要调用即时通信注册接口!

2.在首页挂在登录方法

3.使用页面跳转即可

开始使用

步骤1

App.vue

引入文件

<script>
	//1. 导入统一身份信息管理模块
	import uniIdPagesInit from '@/uni_modules/uni-id-pages/init.js';
	//2. 导入uniIm的Utils工具类
	import uniImUtils from '@/uni_modules/uni-im/common/utils.js';
	export default {
		onLaunch: function() {
			//3. 初始化uni身份信息管理模块
			uniIdPagesInit();
			//4. 初始化uniIm
			uniImUtils.init();
		},
		onShow: function() {
			//3. 初始化uni身份信息管理模块
			uniIdPagesInit();
			//4. 初始化uniIm
			uniImUtils.init();
		},
	};
</script>

步骤2

找到软件登录图片

请添加图片描述

找到软件登录接口

软件登录接口,调用即时通信登录接口

登录源码如下

<template>
	<view class="">
		<view class="" @click="formSubmit">
			登录
		</view>
	</view>
</template>

<script>
	export default{
		methods:{
			/*登录方法*/
			formSubmit() {
				this.disLogin = true
				let self = this;
				let formdata = {
					mobile: self.formData.mobile,
				}
				let url = '';
			
				uni.showLoading({
					title: '正在提交'
				});
				self._post(
					url,
					formdata,
					result => {
						uni.setStorageSync('token', result.data.token);
						uni.setStorageSync('user_id', result.data.user_id);
						// 调用即时通信注册接口
						self.registerUniIm(result.data.token);
					},
					false,
					() => {
						uni.hideLoading();
						self.disLogin = false
					}
				);
			},
			// 调用即时通信注册接口,后端要,参数传好,和后端协调
			registerUniIm(token) {
				let self = this;
				let userInfo = uni.getSystemInfoSync();
				self._post('user.useruniim/uniImLogin', {
					token:token,
					uniPlatform:userInfo.uniPlatform,
					appId:userInfo.appId,
					deviceId:userInfo.deviceId
				}, function(res) {
					console.log(res);
				});
			},
		}
	}
</script>

步骤3

找到软件注册图片

同样,也要调用即时通信注册接口!!

我这个是验证码登录,你的要是注册也要调用即时通信接口

请添加图片描述

注册源码如下

<template>
	<view class="">
		<view class="" @click="formSubmit">
			注册
		</view>
	</view>
</template>

<script>
	export default{
		methods:{
			/*注册方法*/
			formSubmit() {
				this.disLogin = true
				let self = this;
				let formdata = {
					mobile: self.formData.mobile,
				}
				let url = '';
			
				uni.showLoading({
					title: '正在提交'
				});
				self._post(
					url,
					formdata,
					result => {
						uni.setStorageSync('token', result.data.token);
						uni.setStorageSync('user_id', result.data.user_id);
						// 调用即时通信注册接口
						self.registerUniIm(result.data.token);
					},
					false,
					() => {
						uni.hideLoading();
						self.disLogin = false
					}
				);
			},
			// 调用即时通信注册接口,后端要,参数传好,和后端协调
			registerUniIm(token) {
				let self = this;
				let userInfo = uni.getSystemInfoSync();
				self._post('user.useruniim/uniImLogin', {
					token:token,
					uniPlatform:userInfo.uniPlatform,
					appId:userInfo.appId,
					deviceId:userInfo.deviceId
				}, function(res) {
					console.log(res);
				});
			},
		}
	}
</script>

步骤4

找到index.vue首页

图片

请添加图片描述
请添加图片描述

index.vue源码如下

<template>

</template>

<script>
	// 要记得引入哦~
	// 引入2下面
	import uniImUtils from '@/uni_modules/uni-im/common/utils.js';
	//引入2	uniImMethods
	import uniIm from '@/uni_modules/uni-im/lib/main.js';
	
	export default {
		
		onShow() {
			// this.getTabBarLinks(); // 底部导航注定义的函数释掉
			// 当前时间,毫秒时间戳
			var timestamp = (new Date()).valueOf(); // 1604297892942

			// console.log(timestamp,'毫秒时间戳');
			
			// 获取过期时间	毫秒时间戳
			let tokenExpiredUnIm = uni.getStorageSync("tokenExpiredUnIm")

			let newTime = tokenExpiredUnIm - timestamp;

			if (!tokenExpiredUnIm && newTime < 3600000) {
				// 在首页	调用即时通信	登录接口
				this.loginUniIm();
			}
			// console.log(newTime, '新时间');
			
			
			
			// 下面看自己需求加不加。都可以
			let unreadCount = uniIm.conversation.unreadCount();
			console.log(unreadCount,'获取未读总数量')
			// 下面是给底部tabar加角标消息数量
			uni.setStorageSync("unreadCount",unreadCount)
			if (unreadCount > 0) {
				uni.setTabBarBadge({
					index: 2, 
					// text: String(unreadCount), 
					text: unreadCount,
				});
			} else { 
				uni.removeTabBarBadge({
					index: 2 
				});
			}

		},
		
		methods: {
			// 在首页	调用即时通信	登录接口
			loginUniIm() {
				let self = this;
				let userInfo = uni.getSystemInfoSync();
				self._post('user.useruniim/uniImRegister', {
					uniPlatform: userInfo.uniPlatform,
					appId: userInfo.appId,
					deviceId: userInfo.deviceId
				}, async function(res) {
					console.log(res.data.newToken);
					let uniIdToken = res.data.newToken;
					await uniImUtils.login(uniIdToken)
					
					// console.log(uniIdToken.tokenExpired, '打印');
					// 获取过期时间		毫秒时间戳
					uni.setStorageSync("tokenExpiredUnIm", uniIdToken.tokenExpired)
				});
			},
		}
	};
</script>

角标图片请添加图片描述

步骤5

使用页面detail.vue

图片

用户联系商家按钮
请添加图片描述

源码如下

<template>
	<view class="content">
		<view class="btns-wrap-lft-btn btns-wrap-lft-btn1" @click="goSiXin">
			<text>私信联系</text>
		</view>
	</view>
</template>
<script>
	//引入uniImMethods
	import uniIm from '@/uni_modules/uni-im/lib/main.js';
	export default {
		methods: {
			data() {
				return {
					store_im_id: ''
				}
			},
			onLoad() {
				this.getData();
			},
			methods: {
				/*获取数据*/
				getData() {
					let self = this;
					let product_id = self.product_id;
					uni.showLoading({
						title: '加载中'
					});
					self._get(
						'product.product/detail', {
							product_id: product_id,
							url: self.url,
							visitcode: self.getVisitcode()
						},
						function(res) {
							// console.log(res.data.store_im_id);
							// 后端返回	对应的用户id
							self.store_im_id = res.data.store_im_id;
						}
					);
				},
				goSiXin() {
					// 文档有下面这个方法,路由下载插件就自动配置好了!!!
					// uni.navigateTo({
					// 	url:'/uni_modules/uni-im/pages/chat/chat?user_id=' + 对应的用户id
					// })

					let store_im_id = this.store_im_id;
					uni.navigateTo({
						url: '/uni_modules/uni-im/pages/chat/chat?user_id=' + store_im_id
					})
				},
			}
		}
	};
</script>

步骤6

pages.json图片

请添加图片描述

步骤7

大功告成啦,哪里如果有遗漏,大家可以在评论区进行补充,感谢大家,这么久的陪伴!!!

最后

感觉文章好的话记得点个心心和关注和收藏,有错的地方麻烦指正一下,如果需要转载,请标明出处,多谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/251033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序置顶导航,替代原生导航栏

效果图&#xff1a; 思路&#xff1a;Navigation是小程序的顶部导航组件&#xff0c;当页面配置navigationStyle设置为custom的时候可以使用此组件替代原生导航栏&#xff0c;wx.getSystemInfoSync获取可使用窗口高度 wxml代码&#xff1a; <!-- 头部 --> <view cla…

前后端交互—开发一个完整的服务器

代码下载 初始化 新建 apiServer 文件夹作为项目根目录&#xff0c;并在项目根目录中运行如下的命令&#xff0c;初始化包管理配置文件: npm init -y运行如下的命令&#xff0c;安装 express、cors: npm i express cors在项目根目录中新建 app.js 作为整个项目的入口文件&a…

时序预测 | Python实现LSTM电力需求预测

时序预测 | Python实现LSTM电力需求预测 目录 时序预测 | Python实现LSTM电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用…

uniGUI之上传文件UniFileUploadButton

TUniFileUploadButton主要属性&#xff1a; Filter: 文件类型过滤&#xff0c;有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸&#xff1b; Message&#xff1a;标题以及消息文本&#xff0c;可翻译成中文 TUniFileUploadButton控件 支持多…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新&#xff0c;是先删除缓存&#xff0c;还是先操作数据库呢&#xff1f;当多个线程同时进行访问数据的操作&#xff0c;又是什么情况呢&#xff1f; 以先删除缓存&#xff0c;再操作数据库为例 多个线程运行的正常的流程应该如下…

Android动画(二)——补间动画

目录 介绍 Xml文件定义View动画 补充 alpha_animation.xml&#xff08;透明度&#xff09; rotate_animation.xml&#xff08;旋转&#xff09; scale_animation.xml&#xff08;伸缩&#xff09; translate_animation.xml &#xff08;平移&#xff09; group_animation.…

〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

结构体基础全家桶(2)结构体指针

目录 指向结构体类型数据的指针&#xff1a; 指向结构体变量的指针&#xff1a; 创建&#xff1a; 应用&#xff1a; 注意事项&#xff1a; 指向结构体数组的指针 创建&#xff1a; 应用&#xff1a; 注意&#xff1a; 用结构体变量和指向结构体的指针做函数的参数 …

【Linux】文件系统、文件系统结构、虚拟文件系统

一、文件系统概述 1. 什么是文件系统&#xff1f;2. 文件系统&#xff08;文件管理系统的方法&#xff09;的种类有哪些&#xff1f;3. 什么是分区&#xff1f;4. 什么是文件系统目录结构&#xff1f;5. 什么虚拟文件系统Virtual File System &#xff1f;6. 虚拟文件系统有什…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

IDEA配置一个新项目

git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后&#xff0c;项目中会出现一个红色的pom.xml文件&#xff0c;右击文件&#xff0c;点击…&#xff0c;pom…

RabbitMq基本使用

目录 SpringAMQP1.准备Demo工程2.快速入门1.1.消息发送1.2.消息接收1.3.测试 3.WorkQueues模型3.1.消息发送3.2.消息接收3.3.测试3.4.能者多劳3.5.总结 SpringAMQP 将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于R…

ArrayList与LinkLIst

ArrayList 在Java中&#xff0c;ArrayList是java.util包中的一个类&#xff0c;它实现了List接口&#xff0c;是一个动态数组&#xff0c;可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解&#xff1a; ArrayList基本特性&#xff1a; 动…

科大讯飞(深圳)测开面试真题

一面&#xff08;测试组长面&#xff09; 1、上家公司项目以及团队的规模是怎么样的&#xff1f; 2、你负责的项目整体的流程是怎么样的&#xff1f; 3、自动化实施过程中&#xff0c;是如何和业务测试进行沟通的&#xff1f; 4、在上家公司你已经是专职做自动化了&#xf…

会声会影怎么使用? 会声会影2024快速掌握入门技巧

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

《面向机器学习的数据标注规程》摘录

说明&#xff1a;本文使用的标准是2019年的团体标准&#xff0c;最新的国家标准已在2023年发布。 3 术语和定义 3.2 标签 label 标识数据的特征、类别和属性等。 3.4 数据标注员 data labeler 对待标注数据进行整理、纠错、标记和批注等操作的工作人员。 【批注】按照定义…

【话题】低代码123

目录 一、什么是低代码 二、低代码的优缺点 三、你认为低代码会替代传统编程吗&#xff1f; 四、有哪些低代码工具和框架 4.1 国外的平台 4.2 国内的平台 五、未来的软件研发 低代码&#xff0c;听着就过瘾的一个词。而且不是无代码&#xff0c;这说明&#xff0c;低代码…

GoogLeNet(pytorch)

亮点与创新&#xff1a; 1. 引入Inception基础结构 2. 引入PW维度变换卷积&#xff0c;启迪后续参数量的优化 3. 丢弃全连接层&#xff0c;使用平均池化层&#xff08;大大减少模型参数&#xff09; 4. 添加两个辅助分类器帮助训练&#xff08;避免梯度消失&#xff0c;用于…

方舟无限ARX-5臂的奇异验证

事情起因是&#xff0c;某技术人员号称这款机械臂无奇异点&#xff0c;博主当场一个【黑人问号脸】。 既然是串联臂&#xff0c;大概很难做到无奇异点~ 为了反驳&#xff0c;博主建模简单分析了下&#xff0c;偏置参数随便写了个&#xff0c;具体验证程序见文末。 clear,clc,…

共同编辑文档功能实现(websocket)

目录 前言 websocket封装 wangeditor下载 共同编辑文档代码实现 HTML样式部分 JS部分 css部分 前言 功能&#xff1a;实现文档共同编辑功能&#xff0c;可以实时接收到其他人的信息 思路&#xff1a;先调用接口获取相应的数据进行渲染&#xff0c;然后通过webSocket建…