uniapp使用腾讯im

前端时间在我们网页端实现了一个很low的腾讯im有点不爽,用的是无集成方案,这是为什么呢,这还要从react说起,真是命苦,什么都没,不过咱们的vue小伙伴就不得了了,有ui集成方案,很简单,废话不多我们按个来看,携带源码

腾讯im有两种使用方案,一种是有ui集成方案,一种是无ui集成方案,我们就逐一去看

从零开始逐步去看

腾讯im是什么?用来做什么?

即时通信 IM(Instant Messaging)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可轻松集成聊天、会话、群组、资料管理和直播弹幕能力,也支持通过信令消息与白板等其他产品打通,全面覆盖您的业务场景,支持各大平台小程序接入使用,全面满足通信需要。

gitee地址

一、有ui集成方案

有ui集成文档直通车

(1-1)搭建一个基础的项目

 然后配置package.json, 项目刚创建的时候是没有这个文件的,需要我们去创建一个配置文件

npm init  /   yarn init

 接下来配置ui 

(1-1-1)下载(电脑那个系统用哪个)

# macOS
npm i @tencentcloud/chat-uikit-uniapp

# windows
npm i @tencentcloud/chat-uikit-uniapp

(1-1-2)配置(电脑那个系统用哪个)

# macOS
mkdir -p ./pages/TUIKit && cp -r ./node_modules/@tencentcloud/chat-uikit-uniapp/ ./pages/TUIKit

# windows
xcopy .\node_modules\@tencentcloud\chat-uikit-uniapp .\pages\TUIKit /i /e

到这就基本配置完毕了,这事我们就发现我们的page文件下多了一个文件,这就是im的ui组件库

(1-2)修改项目中的配置

    配置项目以及修改配置项目中的错误地方,有一些东西是真不对,需要自己去编写一下

(1-2-1)修改文件

        ①   App.vue  

<script>
import { genTestUserSig, aegisID } from "./pages/TUIKit/debug/index.js";
import { TIM, TIMUploadPlugin, Aegis } from './pages/TUIKit/debug/tim.js';
const aegis = new Aegis({
    id: aegisID, // 项目key
    reportApiSpeed: true, // 接口测速
});
uni.$aegis = aegis;

const config = {
  userID: "", //User ID                                 1. 用户的账号
  SDKAppID: 0, // Your SDKAppID                         2. 腾讯im的SDKAppId
  secretKey: "", // Your secretKey                      3. 你腾讯im的秘钥
};
uni.$chat_SDKAppID = config.SDKAppID;
const userSig = genTestUserSig(config).userSig;
// 创建 sdk 实例
uni.$TUIKit = TIM.create({
  SDKAppID: uni.$chat_SDKAppID,
});
uni.$TIM = TIM;
// 注册文件上传插件
// #ifdef MP-WEIXIN || H5
uni.$TUIKit.registerPlugin({
  "tim-upload-plugin": TIMUploadPlugin,
});
// #endif
// #ifdef APP-PLUS
uni.$TUIKit.registerPlugin({
  "cos-wx-sdk": TIMUploadPlugin,
});
// #endif
export default {
  onLaunch: function () {
    this.bindTIMEvent();
    this.login();
  },
  methods: {
    login() {
      // login TUIKit
      uni.$TUIKit.login({ userID: config.userID, userSig }).then((res) => {
        // sdk 初始化,当 sdk 处于ready 状态,才可以使用API,文档
        uni.showLoading({
          title: "初始化...",
        });
      });
    },
    bindTIMEvent() {
      uni.$TUIKit.on(uni.$TIM.EVENT.SDK_READY, this.handleSDKReady);
      uni.$TUIKit.on(uni.$TIM.EVENT.SDK_NOT_READY,this.handleSDKNotReady);
      uni.$TUIKit.on(uni.$TIM.EVENT.KICKED_OUT, this.handleKickedOut);
    },
    // sdk ready 以后可调用 API
    handleSDKReady(event) {
      uni.setStorageSync('$chat_SDKReady', true);
      uni.hideLoading();
    },
    handleSDKNotReady(event) {
      uni.showToast({
        title: "SDK 未完成初始化",
      });
    },

    handleKickedOut(event) {
      uni.clearStorageSync();
      uni.showToast({
        title: `${this.kickedOutReason(event.data.type)}被踢出,请重新登录。`,
        icon: "none",
      });
    },

    kickedOutReason(type) {
      switch (type) {
        case uni.$TIM.TYPES.KICKED_OUT_MULT_ACCOUNT:
          return "由于多实例登录";
        case uni.$TIM.TYPES.KICKED_OUT_MULT_DEVICE:
          return "由于多设备登录";
        case uni.$TIM.TYPES.KICKED_OUT_USERSIG_EXPIRED:
          return "由于 userSig 过期";
        case uni.$TIM.TYPES.KICKED_OUT_REST_API:
          return "由于 REST API kick 接口踢出";
        default:
          return "";
      }
    },
  },
};
</script>

<style>
/*每个页面公共css */
</style>

    一共就需要三个参数:

                1. 用户的账号
                2. 腾讯im的SDKAppId
                3. 你腾讯im的秘钥

②   pages.json 配置

{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		// {
		// 	"path": "pages/index/index",
		// 	"style": {
		// 		"navigationBarTitleText": "uni-app"
		// 	}
		// },
		{
			"path": "pages/TUIKit/TUIPages/TUIConversation/index",
			"style": {
				"navigationBarTitleText": "云通信 IM"
			}
		},
		{
			"path": "pages/TUIKit/TUIPages/TUIConversation/create",
			"style": {
				"navigationBarTitleText": "选择联系人",
				"app-plus": {
					"scrollIndicator": "none"
				}
			}
		},
		{
			"path": "pages/TUIKit/TUIPages/TUIChat/index",
			"style": {
				"navigationBarTitleText": "云通信 IM",
				"app-plus": {
					"scrollIndicator": "none", // 当前页面不显示滚动条
					"softinputNavBar": "none", // App平台在iOS上,webview中的软键盘弹出时,默认在软键盘上方有一个横条,显示着:上一项、下一项和完成等按钮
					"bounce": "none" // 页面回弹
				}
			}
		},
		{
			"path": "pages/TUIKit/TUIPages/TUIChat/components/message-elements/video-play",
			"style": {
				"navigationBarTitleText": "云通信 IM",
				"app-plus": {}
			}
		},
		{
			"path": "pages/TUIKit/TUIPages/TUIGroup/index",
			"style": {
				"navigationBarTitleText": "群管理",
				"app-plus": {
					"scrollIndicator": "none"
				}
			}
		},
		{
			"path": "pages/TUIKit/TUIPages/TUIGroup/memberOperate"
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	"uniIdRouter": {}
}

到这就基本上就结束了,接下来我们启动项目去看界面

因为我之前这个账号已经使用过了,然后就有消息了

 我们再去发个消息

二、无ui集成方案

IM的api文档

这个不是重点我就不一一说明了,感兴趣的可以逐一看文档。

提前说明: 不能在浏览器下正常展示,我没有去看原因,只有在真机测试是好的

SDKAppID, userSig ,userID 三个值需要去腾讯im中去寻找

SDKAppID

 userSig ,userID 这两个参数,需要通过秘钥来生成

 

(2-1)首先下来依赖

//初始化
npm init
// IM Web SDK
// 从v2.11.2起,SDK 支持了 WebSocket,推荐接入;v2.10.2及以下版本,使用 HTTP
npm install tim-js-sdk --save
// 发送图片、文件等消息需要腾讯云即时通信 IM 上传插件
npm install tim-upload-plugin --save
// 拦截或替换敏感词需要本地审核插件
npm install tim-profanity-filter-plugin --save

 (2-2)使用

<script>
	// 从v2.11.2起,SDK 支持了 WebSocket,推荐接入;v2.10.2及以下版本,使用 HTTP
	// v2.24.0起,SDK 支持使用本地审核插件
	import TIM from 'tim-wx-sdk';
	import TIMUploadPlugin from 'tim-upload-plugin';
	// import TIMProfanityFilterPlugin from 'tim-profanity-filter-plugin';
	export default {
		onLaunch: function() {
			console.log('App onLaunch')
			let options = {
				SDKAppID: {
					SDKAppID: 0 //1. 你的SDKAppID
				}, // 接入时需要将0替换为您的即时通信 IM 应用的 SDKAppID
				userSig: , // 2. 你的userSig,
				userID: // 3. 你的userID
			};
			// 创建 SDK 实例,`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例
			let tim = TIM.create(options.SDKAppID); // SDK 实例通常用 tim 表示
			// 设置 SDK 日志输出级别,详细分级请参见 <a href="https://web.sdk.qcloud.com/im/doc/zh-cn/SDK.html#setLogLevel">setLogLevel 接口的说明</a>
			// tim.setLogLevel(0); // 普通级别,日志量较多,接入时建议使用
			tim.setLogLevel(0); // release 级别,SDK 输出关键信息,生产环境时建议使用
			// 注册腾讯云即时通信 IM 上传插件
			tim.registerPlugin({
				'tim-upload-plugin': TIMUploadPlugin
			});
			// 注册腾讯云即时通信 IM 本地审核插件
			// tim.registerPlugin({
			// 	'tim-profanity-filter-plugin': TIMProfanityFilterPlugin
			// });

			tim.login({
				userID: options.userID,
				userSig: options.userSig
			}).then((imResponse) => {
				console.log("登录成功", imResponse.data);
				if (imResponse.data.repeatLogin === true) {
					// 标识帐号已登录,本次登录操作为重复登录。v2.5.1 起支持
					console.log("登录成功重复", imResponse.data.errorInfo);
				}
			}).catch(function(imError: any) {
				console.warn('login error 登录失败:', imError); // 登录失败的相关信息

			});

		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>

<style lang="scss">
</style>

 在控制台不难发现我们已经登录成功了

 登出功能

 tim.logout().then(function (imResponse: { data: any; }) {
      console.log(imResponse.data, "退出成功"); // 登出成功
    }).catch(function (imError: any) {
      console.warn('logout error:', imError);
    });

接收消息,每当来一个消息,就会触发这个函数

tim.on(TIM.EVENT.MESSAGE_RECEIVED, function(event: any) {
				console.log(event, "来消息了")
})

好了,到这就基本结束了,我就不一一列举了,上面有api接口文档,感兴趣的可以自己研究

完美结束,完结撒花

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值