web端已有项目集成含UI腾讯IM

通过 npm 方式下载 TUIKit 组件,将 TUIKit 组件复制到自己工程的 src 目录下:

npm i @tencentcloud/chat-uikit-vue
mkdir -p ./src/TUIKit && rsync -av --exclude={'node_modules','package.json','excluded-list.txt'} ./node_modules/@tencentcloud/chat-uikit-vue/ ./src/TUIKit

js 工程如何接入 TUIKit 组件?

vue add typescript

在需要使用的页面

<template>
  <TUIKit></TUIKit>
</template>
<script setup lang="ts">
import { ref} from "vue";
import { TUIStore, StoreName } from "@tencentcloud/chat-uikit-engine";
const currentConversationID = ref<string>("");
TUIStore.watch(StoreName.CONV, {
  currentConversationID: (id: string) => {
    currentConversationID.value = id;
  },
});
</script>

使用pinia,定义一个tim store  @/store/tim.js

import { defineStore } from 'pinia'
import store from '@/store'
import { useUserStore } from '@/store/user'
import TencentCloudChat from '@tencentcloud/chat';
import { genTestUserSig, TUIChatKit } from '../TUIKit'
import router from '@/router'
import {
    TUIChatService, TUIUserService
} from '@tencentcloud/chat-uikit-engine'
import { TUILogin } from '@tencentcloud/tui-core'
export const useTimStore = defineStore('useTimStore', () => {
    let userStore = useUserStore();
    const SDKAppID = process.env.NODE_ENV === 'development' ? 123 :234 // Your SDKAppID
    const secretKey = process.env.NODE_ENV === 'development' ? 'rr' : 'kk' // Your secretKey

    // tim登录
    async function BLKTIMLogin() {
        //进行IM登录之前首先验证token
        if (!localStorage.getItem('token_blk')) {
            // 没有token 跳转登录页
            router.push('/login')
        } else {
            // 验证token是否有效
            userStore.getInfo().then(async res => {
                if (res && res.code == 200) {
                    let userInfo = res.data.info;
                    console.log("userInfo->", userInfo)
                    await TUILogin.login({
                        SDKAppID,
                        userID: userInfo.name,
                        userSig: genTestUserSig({
                            SDKAppID,
                            secretKey,
                            userID: userInfo.name,
                        }).userSig,
                        useUploadPlugin: true,
                        framework: 'vue3'
                    }).then(res => {
                        setTimeout(() => {
                            TUIUserService.updateMyProfile({
                                nick: userInfo.name,
                                avatar: userInfo.avatar,
                                profileCustomField: [{
                                    key: "Tag_Profile_Custom_ID",
                                    value: userInfo.id
                                }, {
                                    key: "Tag_Profile_Custom_Email",
                                    value: userInfo.email
                                }, {
                                    key: "Tag_Profile_Custom_Phone",
                                    value: userInfo.phone
                                }]
                            })
                        }, 2000);
                    }).catch(err => {
                        console.error("loginIm-error->", err)
                    })
                } else if (res && res.code == 401) {
                    router.push('/login')
                    localStorage.removeItem('token_blk')
                } else {
                    router.push('/login')
                }
            }).catch(err => {
                router.push('/login')
            })
        }
    }

    // tim登出
    function TIMLoginOut() {
        TUILogin.logout();
    }

    //   to:消息接收方的 userID 或 groupID,
    // conversationType:会话类型,取值TencentCloudChat.TYPES.CONV_C2C(端到端会话) 或 TencentCloudChat.TYPES.CONV_GROUP  
    // type:自定义常量
    // extension:消息内容 json字符串格式

    function TIMSendCustomMessage(to, type, extension, conversationType, description) {
        const options = {
            to: to,
            conversationType: conversationType ? conversationType : TencentCloudChat.TYPES.CONV_GROUP,
            payload: {
                data: type,
                description: description,
                extension: extension
            },
        }
        return new Promise((resolve, reject) => {
            TUIChatService.sendCustomMessage(options).then(res => {
                console.log('im发送成功->', res);
                resolve('success')
            }).catch(err => {
                console.warn('im发送失败->', err);
                reject('error')
            })
        })

    }

    let keyword = '';

    return { isLoginIM, SDKAppID, secretKey, BLKTIMLogin, TIMLoginOut, TIMSendCustomMessage, keyword }
})

// 非setup
export function useTimStoreHook() {
    return useTimStore(store)
}

main.ts/main.js 中引入登录模块,并进行登录

import { createApp } from 'vue'
import App from './App.vue'
import { useTimStore } from '@/store/tim'
import { TUIComponents, TUIChatKit } from './TUIKit'


const app = createApp(App)

let TimStore = useTimStore();

TUIChatKit.components(TUIComponents, app)
TUIChatKit.init()
TimStore.BLKTIMLogin();

腾讯IM sdk文档

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

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

相关文章

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver gdb是一款开源的、强大的、跨平台的程序调试工具。主要用于在程序运行时对程序进行控制和检查&#xff0c;如设置断点、单步执行、查看变量值、修改内存数据等&#xff0c;从而帮助开发者定位和修复代码中的错误。 gdbserve…

昇思MindSpore学习笔记6-02计算机视觉--ResNet50迁移学习

摘要&#xff1a; 记录MindSpore AI框架使用ResNet50迁移学习方法对ImageNet狼狗图片分类的过程、步骤。包括环境准备、下载数据集、数据集加载、构建模型、固定特征训练、训练评估和模型预测等。 一、概念 迁移学习的方法 在大数据集上训练得到预训练模型 初始化网络权重参数…

突发!马斯克3140亿参数Grok开源!Grok原理大公开!

BIG NEWS: 全球最大开源大模型&#xff01;马斯克Grok-1参数量3410亿&#xff0c;正式开源!!! 说到做到&#xff0c;马斯克xAI的Grok&#xff0c;果然如期开源了&#xff01; 就在刚刚&#xff0c;马斯克的AI创企xAI正式发布了此前备受期待大模型Grok-1&#xff0c;其参数量达…

【Linux】文件和目录管理命令——ls,cp,rm,mv

1.文件与目录的查看&#xff1a;Is ls [-aAdfFhilnrRst] 文件名或目录名称ls [ --color{never&#xff0c;auto&#xff0c;always} ]文件名或目录名称ls [ --full-time ]文件名或目录名称 选项与参数&#xff1a; -a&#xff1a;全部的文件&#xff0c;连同隐藏文件&am…

高质量PPT模板素材,免费下载

在制作演示文稿时&#xff0c;选择合适的PPT模板至关重要。为了帮助您轻松找到免费的PPT模板资源&#xff0c;这里分享了6个优秀的网站。这些资源库提供了各种风格和主题的PPT模板&#xff0c;让您的演示内容更生动、更吸引人。 1、baotuppt ppt模板下载-ppt背景 一个专业分享…

如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围

如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围 在这篇博客中&#xff0c;我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片&#xff0c;并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type"file" webkitdirecto…

探展2024世界人工智能大会之合合信息扫描黑科技~

文章目录 ⭐️ 前言⭐️ AIGC古籍修复文化遗产焕新⭐️ 高效的文档图像处理解决方案⭐️ AIGC扫描黑科技一键全搞定⭐️ 行业级的大模型加速器⭐️ 结语 ⭐️ 前言 大家好&#xff0c;我是 哈哥&#xff08;哈哥撩编程&#xff09; &#xff0c;这次非常荣幸受邀作为专业观众参…

深入解析工信认证分类:价值及重要性

随着科技的发展和全球化的推进&#xff0c;企业对于产品和服务的质量、安全、环保等方面的要求日益提高。在这样的背景下&#xff0c;工信认证作为一种权威的第三方认证服务&#xff0c;受到了众多企业的青睐。 一、工信认证的类型 工信认证涵盖了多个领域&#xff0c;包括但不…

温州海经区管委会主任、乐清市委书记徐建兵带队莅临麒麟信安调研

7月8日上午&#xff0c;温州海经区管委会主任、乐清市委书记徐建兵&#xff0c;乐清市委常委、副市长叶序锋&#xff0c;乐清市委办主任郑志坚一行莅临麒麟信安调研&#xff0c;乐清市投资促进服务中心及湖南省浙江总商会相关人员陪同参加。麒麟信安董事长杨涛、总裁刘文清热情…

百度Feed业务数仓建模实践

作者 | XY 导读 Feed&#xff0c;即个性化推荐信息流&#xff0c;是百度 App 上承载各种类型内容&#xff08;如文章、视频、图集等&#xff09;的重要 topic。本文概要讲述了随着业务发展&#xff0c;移动生态数据研发部在 Feed 数据宽表建模上的演进过程以及一些实践&#xf…

自动驾驶SLAM又一开源巅峰之作!深挖时间一致性,精准构建超清地图

论文标题&#xff1a; DTCLMapper: Dual Temporal Consistent Learning for Vectorized HD Map Construction 论文作者&#xff1a; Siyu Li, Jiacheng Lin, Hao Shi, Jiaming Zhang, Song Wang, You Yao, Zhiyong Li, Kailun Yang 导读&#xff1a; 本文介绍了一种用于自动…

【触想智能】工业一体机在工程机械车辆上的应用分析

随着工程机械行业的不断发展和自动化程度的提高&#xff0c;工业一体机在工程机械车辆上的应用越来越广泛。工业一体机是集电脑、显示器、触摸屏、通讯、测量、控制等多种功能于一体的高度集成化的工业控制系统&#xff0c;在工程机械车辆上的应用可以为用户提供更为便捷、高效…

Android EditText+ListPopupWindow实现可编辑的下拉列表

Android EditTextListPopupWindow实现可编辑的下拉列表 &#x1f4d6;1. 可编辑的下拉列表✅步骤一&#xff1a;准备视图✅步骤二&#xff1a;封装显示方法✅步骤三&#xff1a;获取视图并监听 &#x1f4d6;2. 扩展上下箭头✅步骤一&#xff1a;准备上下箭头icon图标✅步骤二&…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

js碰撞检测

碰撞检测 碰撞检测&#xff08;边界检测&#xff09;在前端游戏&#xff0c;以及涉及拖拽交互的场景应用十分广泛。 碰撞&#xff0c;顾名思义&#xff0c;就是两个物体碰撞在了一起&#xff0c;眼睛是可以直观的观察到碰撞的发生。但对于前端实现&#xff0c;如何让 JavaScrip…

使用Simulink基于模型设计(二):系统定义和布局

Simulink模型的顶层系统布局是许多工程团队可以使用的公共环境&#xff0c;是基于模型的设计范式&#xff1a;分析、设计、检验和实现。您可以通过确定模型的结构和各个组件来定义顶层系统。然后&#xff0c;您可以将模型按照层次结构进行组织&#xff0c;分别与系统的各个组件…

群晖NAS配置WebDav服务结合内网穿透实现跨平台云同步思源笔记

文章目录 前言1. 开启群晖WebDav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar4. 配置远程同步地址5. 笔记远程同步测试6. 固定公网地址7. 配置固定远程同步地址 前言 本教程主要分享如何将思源笔记、cpolar内网穿透和群晖WebDav三者相结合&#xff0c;实现思源笔记的云同步…

华为手机照片视频恢复,2种有效方法,让你的回忆重现

“曾经沧海难为水&#xff0c;除却巫山不是云。”这话放在我们手机里的照片视频上也是相当贴切。那些一不小心删除或丢失的珍贵回忆&#xff0c;就像巫山云雨般飘渺难寻&#xff0c;让人心痛不已。照片视频恢复究竟该如何解决呢&#xff1f;今天我就为你带来2种手机照片视频恢复…

C++--继承(下)

目录 5.继承与友元 6.继承与静态成员 7.复杂的菱形继承与菱形虚拟继承 8.继承与组合 5.继承与友元 简单来说就是父类的友元函数子类继承不了&#xff0c;所以父类的友元函数不能访问子类的私有和保护成员 class Person { public:friend void Display(const Person&…