跳到主要内容

RYZZ-H5页面

RYZZ H5 页面是嵌入 App 内或独立运行的移动端 Web 应用集合,包含三个独立项目:Public(核心功能应用)、Binding(Web3 社交绑定)和 LandPages(营销落地页)。其中 Public 是功能最复杂的项目,涵盖钱包(Fiat + Crypto + NFT)、游戏、任务、支付、竞猜、签到、空投等完整的平台生态功能。


一、项目全景架构​

1.1 三个项目的定位​

1.2 技术栈对比​

特性PublicBindingLandPages
框架UmiJS Max 4UmiJS Max 4React 18 + 自定义 Webpack
路由UmiJS 约定式 (30+ 页)UmiJS 约定式 (6 页)React Router v6 (2 页)
样式Tailwind CSS + SCSSSASSLess + Styled Components
UI 库Antd Mobile + @ryzz/uikitAntd MobileReact Vant
Web3ethers.js 5.7.2--
监控Sentry React 7.91--
国际化UmiJS locale + 手动检测UmiJS localei18next
App 交互JS Bridge SDKJS Bridge SDK-
构建Max (UmiJS)Max (UmiJS)Webpack 5 自定义配置
移动适配Tailwind 响应式-amfe-flexible (rem)

二、Public - 核心功能应用(重点项目)​

2.1 整体架构​

2.2 路由全景图​

2.3 钱包系统(最核心模块)​

架构决策

钱包系统是 Public 项目中最复杂的模块,采用双钱包架构,同时支持平台内虚拟货币和 Web3 加密资产。这是 Web2 与 Web3 融合的典型实践,通过 Tab 切换无缝衔接两套资产体系。

Balance 消费钱包:

  • 管理平台内虚拟币(Coins 和 Gem)
  • 支持发送/接收/提现/申诉完整操作链
  • 交易历史查询和筛选

Ryzz Wallet 加密钱包:

  • 基于 ethers.js 的多链加密资产管理
  • Crypto Tab:查看持有的加密货币列表、实时价格估算
  • NFT Tab:查看和管理 NFT 资产
  • 发送/接收加密资产

数据获取流程:

获取支持的货币列表 → 批量查询估算价值 → 渲染资产列表(含实时价格)

2.4 Web3 登录体系​

特点:

  • 支持 DAuth 和标准 Web3 钱包两种方式
  • 自动 Token 刷新机制
  • 支持断开连接和重新认证

2.5 游戏模块​

游戏模块受 App 环境保护,只能在原生 App 的 WebView 中访问。

环境限制

游戏模块受 App 环境保护,通过 User Agent 中的 vico 标识判断是否在 App 内。在浏览器中直接访问会被拦截并显示下载引导页,开发调试时需要注意使用 isDebug 模式绕过此检测。

2.6 任务系统​

平台提供多种类型的任务激励机制:

任务类型路由目标用户
回购任务/task/repurchase全部用户
币任务/task/coin全部用户
代币任务/task/token全部用户
用户分享任务/task/share/user普通用户
创作者分享任务/task/share/creator创作者

2.7 竞猜系统​

2.8 其他功能模块​

模块路由功能
签到/sign/dayrewards, /sign/streakrewards每日签到奖励 + 连续签到奖励
Flame/flame/index火力值系统
Check-in/checkin/index签到打卡
奖励/rewards/index奖励中心
空投规则/airdrop/rule空投活动规则说明
Vote to Earn/vote2earn/content投票赚币
公会邀请/guild/invite公会邀请页
推荐下载/recommend/downloadApp 下载引导
JS Bridge 调试/test/bridge(非生产)开发调试工具

2.9 组件架构​

2.10 请求拦截器​

Public 项目的请求拦截器实现了丰富的 Header 注入:

Header来源用途
AuthorizationBearer Token身份认证
X-Lcid语言 ID国际化
X-Device-Id设备 UUID设备追踪
X-Sid会话 UUID会话追踪

2.11 服务层(20+ 模块)​


三、Binding - Web3 社交账号绑定​

3.1 功能定位​

Binding 是专门处理 Web3 钱包与社交账号绑定 的 H5 应用,通过 OAuth 2.0 协议对接多个社交平台。

3.2 支持的绑定平台​

3.3 绑定流程​

3.4 核心技术要点​

多业务类型支持:

constants/bizType.ts
bizType: 1  // 账号绑定
bizType: 2 // 市场
bizType: 3 // 任务
技术亮点 - BroadcastChannel

使用 Web API BroadcastChannel 实现多标签页状态同步,相比传统的 postMessage / localStorage 事件监听方案更简洁。典型场景:OAuth 回调页通知原始页面绑定结果,通过 UmiJS Model 管理 channel 实例生命周期。

路由保护:

  • wrappers/Auth.tsx 实现路由级身份验证
  • 未登录用户显示提示而非跳转

JS Bridge 集成:

utils/bridge.ts
// 从 App 获取登录信息
const loginInfo = User.getLoginInfo();
const accessToken = loginInfo?.data?.accessToken;

// 获取语言设置
const languageInfo = User.getLanguageInfo()?.data;

// App 环境检测
const isApp = navigator.userAgent.includes('vico');

3.5 页面结构​

页面路径功能
引导页/guide绑定入口(需身份验证)
登录页/login登录页面
登录回调/afterlogin登录后处理
连接回调/afterconnect钱包连接后处理
任务详情/Task/Detail任务详情页
备用页/fallback降级处理
404/404错误页面

四、LandPages - 营销落地页​

4.1 功能定位​

LandPages 是面向外部用户的营销引流落地页,不依赖 App 环境,可在任意浏览器中独立运行。

4.2 技术特色​

完全自定义 Webpack 构建:

  • 不依赖 Create React App,100% 自定义 Webpack 5 配置
  • 支持 CSS Modules + Less 预处理
  • Babel 转译 + Styled Components
  • 三环境独立构建(local / test / production)

rem 移动端适配:

使用手淘 amfe-flexible 方案,自动根据屏幕宽度计算根字号,实现像素级还原设计稿。

4.3 页面详情​

RoomShare - 直播间分享页​

三种分享文案(根据 identity 参数动态切换):

  1. 好友推荐:"My live streaming room will surprise you..."
  2. 主播推荐:"I highly recommend this streamer..."
  3. 内容推荐:"I've seen a lot of interesting content..."

Follow - 关注引导页​

简洁的关注引导页面,引导用户关注平台。

4.4 类型安全的 HTTP 请求​

类型安全方案

通过 TypeScript 泛型约束实现 API 端点、请求参数、响应数据的三方类型联动,编译期即可捕获接口调用错误。

utils/request.ts
// 通过 TypeScript 泛型确保 API 调用类型安全
const request = <T extends keyof typeof apis>(
api: T,
data: HttpRequest[T], // 请求参数类型自动推导
method = 'post'
): Promise<Response<HttpResponse[T]>> // 响应类型自动推导

API 端点和类型定义分离,通过 apis.ts、HttpRequest.d.ts、HttpResponse.d.ts 三个文件实现类型映射。


五、JS Bridge SDK - App 桥接核心​

三个 H5 项目与原生 App 的交互都通过 JS Bridge SDK 实现。

5.1 模块架构​

5.2 Transaction 模块(关键)​

Transaction 模块封装了所有需要与 App 协作完成的链上操作:

方法功能参数
send转账amount, to, currency
pledgeChannel质押频道channelId
unlockKeys解锁 KeyschannelId
buyKeys购买 KeyschannelId, amount
withdrawKeys提取 Keys 收益channelId
buyKeysFromMarket二级市场购买saleId, channelId
addBettingTopic开启竞猜orderId
betUp用户下注orderId
addBettingOdds添加赔率orderId
addPledgeAmount添加质押金额orderId

5.3 Router 模块 URL 协议​


六、埋点分析体系​

多平台数据采集

埋点系统同时对接 Google Analytics、Facebook Pixel、Twitter Conversion 和自有后端四个渠道,实现一次埋点多端上报,覆盖广告归因和用户行为分析。

6.1 Report SDK 三平台集成​

Twitter 事件映射(17 个核心事件):

  • register_show_count → 注册展示
  • login_success_count → 登录成功
  • recharge_success_count → 充值成功
  • send_gift_count → 送礼
  • betting_bet_up_count → 投注
  • 等等...

七、技术亮点总结​

7.1 双钱包架构​

Public 项目的钱包系统同时支持平台内虚拟货币(Coins/Gem)和 Web3 加密资产(多链 Crypto + NFT),通过 Tab 切换无缝衔接,是 Web2 与 Web3 融合的典型实践。

7.2 App 内嵌 H5 的完整解决方案​

  • 认证同步:通过 Bridge 获取 App 中的 accessToken,避免重复登录
  • 语言同步:读取 App 语言设置,H5 页面自动适配
  • 交易协作:复杂的链上操作通过 Bridge 委托给 App 原生层执行
  • 环境保护:游戏等敏感模块通过 UA 检测限制只能在 App 内访问

7.3 BroadcastChannel 跨标签页通信​

Binding 项目创新性地使用 Web BroadcastChannel API 解决 OAuth 回调场景下的跨标签页状态同步问题,避免了传统 postMessage / localStorage 事件监听的复杂性。

7.4 类型安全的全链路​

  • Public/Binding:OpenAPI 自动生成 API 类型
  • LandPages:手动定义 HttpRequest / HttpResponse 类型映射,通过泛型约束确保 API 调用的类型安全

7.5 多端适配策略​

项目适配方案优势
PublicTailwind CSS + @ryzz/uikit 预设原子化样式,开发效率高
BindingSASS 模块化样式组件级隔离
LandPagesamfe-flexible + postcss-pxtorem像素级还原设计稿,自动 rem 转换

7.6 Sentry 生产环境监控​

Public 项目集成 Sentry React SDK,实现:

  • 生产环境错误自动捕获和上报
  • 错误堆栈还原
  • 性能监控

7.7 自定义 Webpack 构建(LandPages)​

LandPages 完全脱离脚手架,自定义 Webpack 5 配置:

  • 环境变量注入(.env.local / .env.test / .env.production)
  • CSS Modules + Less 预处理
  • React.lazy + Suspense 代码分割
  • Bundle 分析工具
  • Styled Components + px2rem 插件

7.8 国际化多策略​


八、三项目对比总结​

8.1 复杂度对比​

维度PublicBindingLandPages
页面数量30+62
API 模块20+41
组件数15+51
代码规模大中小
业务复杂度极高中低

8.2 共同特征​

  • 移动优先:所有项目都针对移动端优化
  • 多环境支持:开发/测试/生产三套环境
  • 国际化:支持英文、中文、印尼文等多语言
  • 统一错误处理:HTTP 状态码 + 业务状态码双重校验
  • Token 认证:Bearer Token + 请求/响应拦截器

8.3 业务价值​


九、项目数据概览​

指标PublicBindingLandPages合计
页面路由30+6238+
API 服务模块20+4125+
技术框架UmiJS MaxUmiJS MaxReact+Webpack3 种
Web3 集成ethers.js间接无-
移动适配方案Tailwind-rem2 种
监控Sentry---
JS Bridge完整集成完整集成--