首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

从零用 Java 实现小红书 SpringBoot Vue UniApp(19)分享卡片、体验时长与上线清单

>## [**移动端演示 http://8.146.211.120:8081/#/**](https://gitee.com/link?target=http%3A%2F%2F8.146.211.120%3A8081%2F%23%2F) ## [**管理端演示 http://8.146.211.120:8088/#/**](https://gitee.com/link?target=http%3A%2F%2F8.146.211.120%3A8088%2F%23%2F) ## [**项目整体介绍及演示**](https://gitee.com/link?target=https%3A%2F%2Fblog.csdn.net%2Fqq_35238367%2Farticle%2Fdetails%2F145126222) **前言** (16)~(18)分别做了 IM、直播、聊天室。把用户真正「拉进来」,还差最后一公里:**分享**与**可控的试用时长**。 本章聚焦两件运营向能力: 1. 直播 / 聊天室邀请以**卡片消息**发到私信或群聊,点击直达房间 2. `max-minutes` 体验限制:配置、倒计时、到期关房、一键 SQL ---- ![IM 架构:卡片消息走统一协议](https://developer.qcloudimg.com/http-save/yehe-12101878/04bc4457806b7d1a66ec617a0543f174.png) ![消息中的直播 / 聊天室邀请卡片](https://developer.qcloudimg.com/http-save/yehe-12101878/953b8b5d07c8bc3753a354e4c606d76e.png) ![线上演示:消息 Tab 会话列表](https://developer.qcloudimg.com/http-save/yehe-12101878/e1bfc2452659ce1148957ea2f8bd400c.png) ![线上演示:私信聊天页](https://developer.qcloudimg.com/http-save/yehe-12101878/905fbdc6e09e8cbb356b02979cfd9cdb.png) ![直播倒计时示意](https://developer.qcloudimg.com/http-save/yehe-12101878/1f41eabad5117b0ae83220c7dae3a065.png) ![聊天室倒计时示意](https://developer.qcloudimg.com/http-save/yehe-12101878/35952566f3618adba262e29d25e2e937.png) ![开播页](https://developer.qcloudimg.com/http-save/yehe-12101878/b2977e3a0ae47120a9aecccafad13891.png) ![聊天室入口](https://developer.qcloudimg.com/http-save/yehe-12101878/f483d9ee5fa9b4d7eda17dfc92bcd679.png) ![管理端仪表盘(线上截图)](https://developer.qcloudimg.com/http-save/yehe-12101878/62d6c56986ff1e8930800477d8bae40a.png) ### 一、分享卡片:为什么不用纯文本链接 纯文本链接有两个问题:聊天里不好识别;无法带封面、标题、主播信息。 因此扩展私信/群聊 `contentType`: |类型值|含义|会话摘要| |:-:|:-:|:-:| |`7` LIVE|直播邀请卡|`[直播]标题`| |`8` VOICE_ROOM|聊天室邀请卡|`[聊天室]标题`| 后端摘要(16 已埋点): ``` if (contentType == TYPE_LIVE) { return "[直播]" + extractNoteTitle(content); } if (contentType == TYPE_VOICE_ROOM) { return "[聊天室]" + extractNoteTitle(content); } ``` #### 发送链路 ``` 直播间/聊天室点击分享 → 选择「发给好友」 → share-invite 页选互关好友(或进群) → 组装卡片 payload 调用私信/群发接口 → 对端气泡渲染卡片 → 点击跳转 live?id= / voice-room/room?roomNo= ``` #### 邀请链接(站外私域) ``` export function buildLiveInviteLink(noteId) { // #ifdef H5 if (typeof location !== 'undefined') { const base = `${location.origin}${location.pathname || '/'}`; return `${base}#/pages/note/live?id=${encodeURIComponent(noteId)}`; } // #endif return `/pages/note/live?id=${noteId}`; } export function buildVoiceRoomInviteLink(roomNo) { // #ifdef H5 if (typeof location !== 'undefined') { const base = `${location.origin}${location.pathname || '/'}`; return `${base}#/pages/voice-room/room?roomNo=${encodeURIComponent(roomNo)}`; } // #endif return `/pages/voice-room/room?roomNo=${roomNo}`; } ``` #### 卡片 payload 组装思路 与笔记分享同一套路(`buildNotePayload` 模式):JSON 字符串写入 `content`,`contentType` 标 7 或 8。 ``` // 直播卡示意 function buildLiveSharePayload(note) { return JSON.stringify({ noteId: note.id, title: note.title || '直播中', coverUrl: note.coverUrl || '', nickname: note.anchorNickname || '', avatar: note.anchorAvatar || '', liveMode: note.liveMode, // 0 语音 / 1 视频 }); } // 聊天室卡示意 function buildVoiceRoomSharePayload(room) { return JSON.stringify({ roomNo: room.roomNo, title: room.title || '聊天室', coverUrl: room.ownerAvatar || '', nickname: room.ownerNickname || '', mediaMode: room.mediaMode, }); } // 发送 await DmApi.sendMessage({ peerId, contentType: 7, // 或 8 content: buildLiveSharePayload(note), }); ``` 后端只需放宽 `contentType` 白名单并写好会话摘要,**不必为卡片单独建表**。 前端协议与页面: - `sheep/helper/dmContent.js` - `pages/message/share-invite.vue` - `pages/message/chat.vue` / `group-chat.vue` 渲染与点击跳转 ---- ### 二、体验时长:配置驱动 |config_key|默认|说明| |:-:|:-:|:-:| |`member.live.max-minutes`|30|直播单场最长分钟,`0`=不限制| |`member.voice-room.max-minutes`|30|聊天室单场最长分钟,`0`=不限制| #### 三端协同 1. **后端**:credentials / 进房接口返回 `maxMinutes` + 到期时间;定时任务扫到期房间 2. **Vue 页**:`experienceCountdown.js` 中部倒计时;到期弹窗 3. **Hybrid TRTC 页**:URL 带 `expireAt`,App WebView 内同样倒计时兜底 ``` export function createExperienceCountdown(options) { const expireAtMs = Number(options?.expireAtMs) || 0; const onTick = options?.onTick; const onExpire = options?.onExpire; let timer = null; const tick = () => { const remain = Math.max(0, Math.ceil((expireAtMs - Date.now()) / 1000)); if (typeof onTick === 'function') onTick(remain, formatRemain(remain)); if (remain **演示地址** 移动端:[http://8.146.211.120:8081/#/](https://gitee.com/link?target=http%3A%2F%2F8.146.211.120%3A8081%2F%23%2F) 管理端:[http://8.146.211.120:8088/#/](https://gitee.com/link?target=http%3A%2F%2F8.146.211.120%3A8088%2F%23%2F) **代码地址** https://gitee.com/ddeatrr/springboot_vue_xhs

优秀的个人博客,低调大师

《灯灯》多租户快速开发平台 4.19.0-java17-beta.1 版本发布,抢先体验新版UI

jdk17 分支升级以下内容: feat(lamp-web-pro-soybean): 基于 [soybean-admin](https://github.com/soybeanjs/soybean-admin)、[fast-crud](https://github.com/fast-crud/fast-crud) 封装的全新前端,功能已完成90%。 [立即体验](https://soy-column.tangyh.top/) feat(lamp-generator): 代码生成器支持生成soybean版前端的单表页面 feat(lamp-generator): 代码生成器支持生成soybean版前端的树结构页面 feat(lamp-generator): 代码生成器支持生成soybean版前端的跳转新路由页面 refactor(lamp-generator): 优化导入表时的提示信息 refactor: DefTenantStatusEnum、LoginStatusEnum、TaskStatus、ExtendMsgPublishVO、HttpMethod、LogType等枚举类新增前端tag组件的颜色属性 refactor(lamp-base-biz): 员工查询页面,查询条件修改为单个数据 fix(lamp-system): 资源新增或修改时,元数据字段json解析失败存储空字符串 fix(lamp-base-biz): 修复员工新增时,字段被覆盖 关于 lamp 灯灯(简称灯,英文名:lamp),她是一个项目集,为满足高内聚低耦合设计原则,将一个大项目拆解为以下几个子项目: lamp-util:后端工具集 lamp-cloud:基于 Spring Cloud 实现的后台 lamp-boot:基于 Spring Boot 实现的后台 lamp-job:基于 xxl-job 集成本项目的分布式定时任务 lamp-generator:代码生成器 lamp-web:前端 lamp-cloud简介 lamp-cloud是基于SpringCloudAlibaba、SpringCloud、SpringBoot开发的微服务中后台快速开发平台,支持jdk17、jdk11和jdk8,专注于多租户 (SaaS 架构) 解决方案,亦可作为普通项目(非 SaaS 架构)的基础开发框架使用,目前已实现数据库隔离、字段隔离等租户隔离方案以及非租户隔离的解决方案。 她拥有自研 RBAC(基于租户应用的角色权限控制体系)、网关统一鉴权、数据权限、优雅缓存解决方案、防缓存击穿、前后端统一表单校验、字典数据自动回显、可视化前后端代码生成器、支持多种文件存储、支持多种短信邮件发送接口、灰度发布、防 XSS 攻击、防 SQL 注入、分布式事务、分布式定时任务等功能;支持多业务系统并行开发,支持多服务并行开发,是中后台系统开发脚手架的最佳选择。 lamp-cloud 代码简洁,注释齐全,架构清晰,非常适合个人学习以及中小企业作为基础框架使用。采用 Spring Cloud Alibaba、SpringBoot、Mybatis、Seata、Sentinel、RabbitMQ、FastDFS/MinIO、SkyWalking 等主要框架和中间件。本项目旨在实现基础框架能力,不涉及具体业务。 关注项目 官网:https://tangyh.top 源码:https://github.com/dromara/lamp-cloud 源码:https://gitee.com/dromara/lamp-cloud

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册