Hawk VPN
اینترنت امن و سریع
برای اتصال لمس کنید
سریع‌ترین سرور انتخاب می‌شود
انتخاب سرور›
Ad
📢
تبلیغات TopOn
320×50 Banner
⭐
ارتقا به اشتراک ویژه
حذف تبلیغ · حجم بیشتر · سرورهای ویژه
›
ترافیک
حجم امروز۵۰۰ MB
حجم باقی‌مانده۱۸۰ MB
🎁›
سرورها
EU
اروپا
۵ سرور
32-45 ms
✓
TR
ترکیه و همسایه
۳ سرور
28-35 ms
✓
Asia
آسیا PREMIUM
۲ سرور
85-92 ms
🔒
✓
ورود روزانه
+1 GB
Ad
📢
TopOn Ads
320×50 Banner
🎬
حجم ویدیویی
+50 MB
اشتراک ویژه
Free
ارتقا
FreePlusPremium
订阅与扣费记录›
Ad
📢
TopOn Ads
320×50 Banner
عمومی
زبان
فارسی‹
حساب
حساب کاربری
وصل نشده‹
پروفایل
‹
بازخورد
‹
نسخه
v1.0.0‹
درباره
مجوز متن‌باز
GPL-3.0‹
سیاست حفظ حریم خصوصی
‹
جزئیات
پروژه پایهFlClash
مجوزGPL-3.0
اطلاعات حساب
UUIDa1b2c3d4-e5f6
ایمیل
کد دعوتTRN-A7K2M
حساب کاربری
ایمیل و بازیابی حساب
‹
کد دعوت دوست
🎁

هر دعوت = ۵ گیگابایت

پس از اولین اجرای برنامه توسط دوستتان، هر دو نفر حجم می‌گیرید

Ad
📢
TopOn Ads
320×50 Banner
5
دعوت موفق
25 GB
حجم دریافت شده
کد دعوت دارید؟ اینجا وارد کنید
当前会员
Free
未订阅
扣费渠道Google Play
下次扣费--
扣费历史
退款、取消和续费状态以应用商店与后端验证结果为准。
AD5s
▶
Loading ad...
🎉
恭喜获得奖励!
+50 MB
流量已添加到您的账户
🚀
连接成功
看一个短视频,立即获得额外流量
⚡
流量快用完了
剩余流量不足 20%,看一个短视频立即补充,避免连接中断
به‌روزرسانی اختیاری
نسخه جدید در دسترس است
v1.0.0 → v1.2.0
تغییرات این نسخه
حجم: 12.4 MB
0%
✓شما از آخرین نسخه استفاده می‌کنید
📱
حساب در دستگاه دیگری وارد شد
حساب شما روی یک دستگاه جدید وارد شده است. این دستگاه به حالت مهمان بازگشت.
⚠️
دریافت اشتراک ناموفق بود
دریافت لیست سرورها با خطا مواجه شد. لطفاً اتصال اینترنت خود را بررسی کنید یا برای کمک با پشتیبانی تماس بگیرید.
🚦
حجم شما تمام شد
حجم امروز شما به پایان رسید. یک ویدیو ببینید و ادامه دهید، یا برای حجم بیشتر اشتراک بگیرید.
🛒
Google Play
پرداخت امن از طریق فروشگاه
Premium
اشتراک سالانه
$49.99
原型语言
本次迭代(1.0.0)
启动 主页 节点 权益 邀请 签到 UI 设计 流量用尽 设置 埋点
非本次迭代
邀请改版 非本次埋点 设置扩展 会员/支付 订阅管理 更新 订阅失败 反馈 资料 账号 客服激活
启动页 (Splash)
App 冷启动时展示品牌标识,同时完成初始化检查
📋 页面元素
元素说明数据源
品牌 Logo盾牌图标,圆角方形,绿色渐变,100×100px静态
App 名称"Hawk VPN",36px 粗体白色静态
品牌标语多语言标语(安全快速的互联网)静态i18n
加载动画旋转圆环,品牌绿色,40×40px本地
🔄 交互逻辑
触发行为时机
自动App 启动展示 Splash 页 → 执行后台初始化立即
自动初始化完成生成/读取 UUID → 拉取节点列表 → 版本检查 → 进入主页2.5s
⚙️ 后台初始化任务
任务说明失败处理
UUID 检查首次安装自动生成并上报服务端注册离线时延迟上报
节点列表更新拉取最新订阅地址,更新本地缓存使用本地缓存
版本检查对比最新版本号,强制更新时阻断进入跳过
任务状态同步同步当日签到/视频/分享完成状态默认未完成
主页 (Home)
核心页面,一键连接 VPN 并展示实时网络状态,一屏完整展示。连接前为大按钮,连接后将控制栏、计时、速率与曲线整合为一个紧凑整体卡片
📋 页面元素
元素说明数据源
连接按钮(未连接)大按钮,脉冲动画引导用户点击连接,居中展示,下方为状态文案+节点选择器本地VPN 引擎
紧凑整体卡片(已连接)连接后大按钮收起,控制栏、计时、速率数据与曲线图收敛到同一个卡片内展示;控制栏为一行:关闭(圆形) — 节点药丸(蓝绿描边胶囊,含节点名+国旗) — 重启(圆形),下方居中显示"已连接: HH:MM:SS"本地
关闭按钮54px 圆形,红色调电源图标,点击断开 VPN 并恢复大按钮视图本地
重启核心按钮54px 圆形,橙色调刷新图标,点击重启 VPN 核心(不断开会话),图标旋转 ~1.6s本地VPN 引擎
节点药丸(中间)绿色渐变胶囊,圆形国旗 + 节点名 + 实时连接指示(呼吸绿点"已连接") + 箭头,点击切换节点本地
节点选择器(未连接)圆角胶囊,圆形国旗 + 节点名 + 箭头,默认已预选节点(欧洲),非"选择节点"占位文案本地
实时速率下载/上传 (Mb/s) + 延迟 (ms),每 2s 刷新本地VPN 引擎
速率曲线图下载(绿)+上传(紫)双线实时曲线本地
Banner 广告位速率曲线图与流量卡片之间,60px 高横幅,左上角"Ad"角标,承载 TopOn 聚合 320×50 BannerTopOn SDK
流量配额卡片标题栏含刷新按钮(圆形,旋转图标);下方总流量(500MB)/剩余流量(180MB)+进度条服务端
刷新按钮30px 圆形,刷新图标,点击重新拉取流量数据,加载时图标旋转 ~0.8s服务端
🔄 交互逻辑
操作行为
点击大连接按钮(未连接)进入"连接中"过渡态:按钮图标淡出 → 显示白色旋转圈 + 光晕呼吸动画 + 状态文案"正在连接..." → 连接成功后大按钮淡出收起 → 紧凑控制栏缩放淡入 → 开始计时 → 开始速率监控
连接中过渡期间按钮锁定(pointer-events:none),忽略重复点击,避免状态错乱
点击关闭按钮(已连接)进入"断开中"过渡态:状态显示"正在断开..." → 紧凑控制栏缩放淡出 → 清除速率数据 → 大按钮(脉冲)视图淡入 → 停止计时
点击重启核心按钮保持连接 → 图标旋转 → 速率短暂重置 → 恢复"已连接",状态文案显示"核心重启中..."
点击节点选择器/中间节点信息弹出节点底部弹窗(覆盖当前页面 70% 高度),已连接时切换节点即时更新控制栏
点击刷新按钮图标旋转 → 重新请求服务端流量数据 → 更新总量/剩余/进度条
自动流量耗尽强制断开 → 弹窗提示"流量已用尽" → 提供「看视频 +流量」和「升级会员」两条恢复路径
连接成功补给仅 Free 用户连接成功后展示「获取流量」引导弹窗;弹窗包含「看视频 +流量」主按钮与「暂不需要」次按钮。点击主按钮拉起激励视频,成功后按后台配置增加流量并同步主页流量卡片;关闭弹窗后保持已连接。Plus/Premium 不弹,频控规则由客户端或后台配置。
自动网络断线网络恢复后自动重连
📢 Banner 广告 (TopOn 聚合)
项说明
位置速率曲线图与流量卡片之间,常驻展示
广告平台TopOn 聚合平台,标准 Banner 尺寸 320×50
广告标识左上角"Ad"角标,符合广告合规要求
加载失败拉取失败时折叠隐藏,不占用布局空间
免广告后续 Premium 用户可移除 Banner 广告
🎁 连接成功后的获取流量引导弹窗
项说明
页面定位连接成功后的轻量流量获取引导,属于本次迭代主页链路
展示对象Free 用户;Plus / Premium 用户不展示
展示时机VPN 连接成功并切换到已连接状态后展示,不阻塞连接成功
弹窗内容标题提示已连接;正文说明看视频可获得额外流量;主按钮「看视频 +流量」,次按钮「暂不需要」
主按钮行为点击后拉起激励视频,成功后按后台配置增加流量配额,并刷新主页流量卡片
次按钮行为关闭弹窗,保持 VPN 已连接状态,不发放流量
频控避免每次连接都打扰用户,展示频控由客户端或后台配置
广告单元quota_recovery_rewarded_video(复用流量不足 / 流量用尽弹窗激励视频广告单元)
一屏布局确保连接操作零滚动。节点选择器默认预选ping最低节点,用户无需先选节点即可直接连接。已连接状态下,控制栏、计时、速率与曲线图作为一个整体紧凑展示,去掉内部卡片外框,减少页面占用。连接/断开均有过渡动画:连接中显示旋转加载圈+光晕呼吸,两个视图缩放淡入淡出平滑切换。流量卡片提供刷新(手动同步服务端数据)。流量用尽的强制断开与弹窗引导逻辑见「流量用尽」页签。
节点选择 (Node Sheet)
底部弹窗形式,从首页唤起,选择后自动关闭回到首页
📋 节点列表
区域节点延迟范围
🇪🇺 欧洲德国/法兰克福、荷兰/阿姆斯特丹、芬兰/赫尔辛基、罗马尼亚/布加勒斯特、瑞典/斯德哥尔摩32-45ms
🇹🇷 土耳其及邻国土耳其/伊斯坦布尔、亚美尼亚/埃里温、格鲁吉亚/第比利斯28-35ms
🌏 亚洲新加坡、印度/孟买85-92ms
📋 卡片信息
字段说明
国旗 Emoji视觉标识,28px
国家名称多语言,14px 粗体白色
城市名称多语言,11px 灰色
延迟值绿色数字 + "ms",右对齐
🔄 交互逻辑
操作行为
点击首页节点选择器弹出底部弹窗(高度 70%),列表可滚动
点击节点卡片卡片高亮(绿色边框)→ 200ms 后自动关闭弹窗 → 首页显示已选节点名
点击遮罩层关闭弹窗,不改变选择
节点数据 Splash 时预加载并缓存。底部弹窗保证用户不离开主页,选择后可直接连接。未来版本可增加 Premium 节点标识和延迟排序。
免费页 = 免费流量权益中心 (Benefit Center)
从「任务列表」变更为「权益中心」。
📋 页面结构
区块说明数据源
每日签到(内嵌)直接内嵌在权益中心,非二级页:顶部卡片(连签天数/今日奖励/是否需视频/距高奖励天数) + 领取按钮 + 5 天波浪轨道。详见「签到」页签服务端配置
视频补给卡看激励视频换流量(单次奖励/每日次数后台配置),显示 {n}/{max} 进度;广告=换权益的步骤TopOn
Banner 曝光位保留首页/权益中心的广告曝光,不做独立广告页;广告与拿权益流程自然衔接TopOn
🔄 状态标签
状态含义样式
去领取 / 去领今日可领、未完成绿色 ready
✓ 已领 / ✓ 已满今日已完成或达上限灰色 done,卡片禁用点击
🎬 激励视频流程
阶段UI 表现时长
1. 启动全屏黑色覆盖 + AD 标识 + 倒计时(5s) + 旋转加载圆0s
2. 加载文案"加载中..." + 进度条从 0% 开始走0-1.5s
3. 播放文案变"播放中..." + 进度条持续推进1.5-5s
4. 完成视频层消失 → 流量直接加进配额 → 弹出奖励弹窗5s
每日签到 = 5 天波浪(内嵌权益中心)(Check-in Loop)
把固定签到改成 5 天一轮的波浪式奖励:前段轻松直领,中后段加视频门槛并出现峰值,形成「坚持到第 5 天最值」的心理锚点。直接内嵌在免费页/权益中心顶部,不做二级页面。
📅 5 天波浪节奏
天数奖励领取方式说明
第 1 天1 GB免费直领第一次签到直接领
第 2 天1 GB免费直领第二次签到直接领
第 3 天2 GB看激励视频中段出现门槛
第 4 天1 GB看激励视频—
第 5 天5 GB🏆看激励视频峰值记忆点,橙色高亮
之后进入下一轮看激励视频循环 1→5
📋 页面元素
元素说明数据源
顶部卡片(紧凑)连续签到天数(只显示已连续 N 天,不显示"共5天",可无限连签) / 今日奖励(占比缩小) / 是否需看视频 / 距下次高奖励还差几天服务端
领取按钮免费天:「免费领取」;视频天:「看视频领取」;已领:「✓ 今日已领取」灰化本地
5 天轨道横向 5 格,今日高亮描边并上浮,第 5 天橙色峰值样式,已领打勾;不显示底部视频标识本地
🔄 交互逻辑
操作行为
点击领取(免费天)直接发放 → 流量加进配额 → 奖励弹窗 → 推进到下一天
点击领取(视频天)先播激励视频(5s) → 完成后发放 → 奖励弹窗 → 推进到下一天
第 5 天后回到第 1 天,进入下一轮
基础版:连签展示(只显示已连续天数,可一直连续签到) + 下次高奖励提示。奖励节奏 5 天一轮循环,连续签到不因进入新一轮而中断。补签、连签保护、连续签到提醒为后续迭代。奖励数值与第 5 天是否递增均由后台配置。第 5 天做成记忆点是留存关键,让用户愿意回来。
整体 UI 设计升级 (UI System)
当前界面仍处于 demo 状态,本轮只做 App 客户端视觉与交互统一,不新增对外 API;目标是把首页、权益中心、邀请、签到、设置和状态弹窗收敛成一套可上线的产品界面。
🎨 设计方向
维度要求
品牌色保留 Hawk 绿色,但降低 demo 感,改成更成熟、更高级的产品绿
视觉层级统一标题、正文、辅助文案、角标和状态标签的层级,不同页面共享同一套卡片与按钮语义
组件风格统一圆角、描边、阴影、图标尺寸、间距与按钮密度,避免每个页面各画各的
信息密度首页 1 屏内讲清:今日还能拿什么权益、剩余流量多少、有没有补流量入口
📱 覆盖页面
页面要点
首页连接态 / 未连接态 / 速率 / 流量 / Banner / 获取流量入口 的视觉统一
权益中心签到、视频补给、Banner 曝光位与补流量入口的卡片化整理
签到页5 天游走波浪、峰值第 5 天、高亮状态、已领取 / 可领取 / 视频领取的统一表达
设置页语言切换、个人资料、填写邀请码、反馈、关于等入口的统一分组,并预留 Banner 横幅广告位
状态弹窗加载、空态、失败态、已连接 / 未连接、低流量 / 流量用尽等共用样式
⚙️ 设置页设计内容
入口设计要求
语言切换作为通用设置入口,展示当前语言,点击后使用底部 Sheet 切换语言,切换后即时生效
个人资料展示 UUID、邮箱/账号状态等基础信息,入口清晰但不抢主操作
填写邀请码保留为设置内入口,用于老用户/客服兜底填写邀请码,不作为主流程强推
反馈提供问题/建议提交入口,支持描述与图片上传,视觉上归入支持类设置
关于展示版本号、隐私政策、用户协议等信息,版本号可作为检查更新入口
Banner 横幅广告位设置页新增 320×50 Banner 广告位,位置不打断基础设置入口,加载失败时隐藏
🧩 状态规范
状态视觉规则
加载中以骨架屏 / 旋转加载 / 半透明遮罩表达,避免空白闪烁
空态信息少时降低卡片噪音,保留主要操作按钮,不堆叠次级按钮
失败态统一用红/橙警示色、明确文案和下一步操作,不做模糊报错
连接态已连接 / 未连接 / 连接中 / 断开中使用同一套卡片语言与过渡动画
权益态低流量 / 用尽、可领取 / 已领取都必须有一致的颜色与标签规则
🛠️ 交付边界
项范围
改动范围只整理 App 客户端页面结构、组件规范、视觉层与交互层,不动对外 API
结果标准demo → product-ready;窄屏、长文案、语言切换、RTL / LTR 都不破版
验收重点一屏可读、状态一致、按钮统一、卡片统一、弹窗统一
会员 & 应用内支付 (Membership / Paywall)
Store-first 订阅变现:第一阶段只做 Android 三家应用商店(Google Play / Samsung Galaxy Store / Xiaomi GetApps)。当前先去掉流量包购买入口,主路径聚焦 Plus / Premium 订阅;客服后台仍可手工激活/延长/撤销权益,但不做 Web/客服外部购买后 App 内兑换。所有购买与后台操作统一汇入 entitlement(权益)层,客户端只读「当前权益状态」。
🧭 会员分层
层定位差异化
Free广告支持的基础可用展示广告、标准节点、基础免费流量
Plus轻会员去广告 + 50G 高级流量 + 更低延迟;不解锁 Premium 节点/优先线路
Premium高价值会员去广告 + Premium 节点 + 优先线路 + 更低延迟 + 更大高级流量
💳 SKU 设计(价格演示,真实价格由商店本地化下发)
SKU价格优惠核心权益
Plus 月付$0.9/月—去广告 + 50G 高级流量 + 更低延迟
Plus 年付$9.9/年约省 8%Plus 月付权益,年付优惠
Premium 月付$4.9/月—Premium 节点 + 优先线路 + 100G 高级流量
Premium 年付$39.9/年约省 32%Premium 完整权益 + 150G 高级流量
📋 会员页元素
区块说明数据源
标题区首屏顶部固定表达「获取 Plus/Premium」,副标题说明去广告、更多流量、Premium 节点静态i18n
订阅 Tab四个紧凑选项:Plus 月、Plus 年、Premium 月、Premium 年;年付展示优惠折扣服务端
Free vs 当前订阅权益表选中 Plus 时不展示 Premium 节点/优先线路;选中 Premium 时解锁全部高级权益静态i18n + 配置
主要操作按钮按钮显示「升级 Plus/Premium · 价格/周期 · 年付优惠」→ 打开当前渠道商店支付确认点击
恢复购买 / 客服激活底部保留恢复/同步购买;客服激活仅作为补偿或手工处理,不作为购买入口本地
🔄 购买流程(商店确认单)
步骤行为
1. 选择 SKU会员页选中 Plus/Premium 月付或年付 → 点主要操作按钮
2. 商店确认单底部弹出确认(显示 Google Play / Galaxy Store / GetApps + 商品 + 价格 + 续费说明)
3. 确认支付调起当前渠道商店原生支付(原型模拟 loading)
4. 回执验证拿到 purchaseToken / receipt → 后端验证 → 写入 entitlement
5. 权益生效客户端刷新:去广告、Premium 节点/优先线路按 tier 解锁
🎯 转化入口(顺痛点,不硬推)
入口时机强度
流量不足弹窗(20%)剩余跌破阈值中:看视频补流量 / 升级会员 / 暂不需要
流量用尽弹窗流量归零断连强:看视频继续使用 / 升级会员,不再引导客服索要流量
连接成功补给Free 用户连接成功后弱:看视频拿额外流量;Plus/Premium 不弹
节点选择器点击 Premium 节点(锁)中:引导会员页
首页横条Free 用户常驻(付费后隐藏)弱:去广告、更多流量、Premium 节点
设置会员卡设置页顶部弱:展示 Free/Plus/Premium 状态,可进入会员页和订阅管理
🗄️ 权益模型 (Entitlement)
字段说明
tierfree / plus / premium
channelgoogle_play / samsung / xiaomi / manual(仅来源标签)
statusactive / grace / expired / revoked / pending
expireAt订阅到期或续费时间
权益位ad_free / premium_nodes / latency_sort / device_limit=1 / traffic_cap / traffic_balance
页面优化决策:充值页必须短,首屏完成 Free vs 订阅差异说明、推荐订阅展示和主要操作按钮;流量包当前先去掉,避免把购买决策页拉得过长。
已确认决策:第一阶段只做 Google Play / Samsung Galaxy Store / Xiaomi GetApps;Plus/Premium 流量额度由后端配置(原型占位 Plus 50G、Premium 月 100G、Premium 年 150G);不支持多设备,所有订阅 device_limit=1;不提供免费试用;不做 Web/客服外部购买后 App 内兑换。
合规红线:App 内数字权益(订阅、去广告、Premium 节点)必须走当前分发商店的应用内支付;App 内不得放「去官网购买」按钮或外部支付链接。VPN 不承诺「无限流量」,必须保留 fair use / 配额 / 可用性边界。客户端不持有任何 secret,只消费服务端下发的短期权益。当前 subFail(订阅获取失败)语义是「节点/配置拉取失败」,与付费订阅无关,命名保持区分避免污染支付埋点与客服。
管理订阅 / 扣费历史 (Subscription Management)
用于记录用户购买历史、扣费历史和当前订阅状态。App 内只展示和跳转商店管理;取消、退款、续费状态以应用商店与后端验证结果为准。
🚪 入口
入口行为说明
会员页主要操作按钮已付费用户点击「管理订阅」进入本页免费用户主要操作仍是开通订阅
设置页顶部会员卡点击卡片内「订阅与扣费记录」进入本页便于用户从设置查看历史扣费
商店管理按钮打开 Google Play / Galaxy Store / GetApps 的订阅管理能力原型用 Toast 演示;真实客户端按渠道跳转
📋 页面元素
区块元素说明
当前订阅卡当前会员显示 Free / Plus / Premium
状态标签未订阅 / 生效中 / 宽限期 / 已过期 / 已撤销
扣费渠道Google Play / Galaxy Store / GetApps / Manual
下次扣费显示续费或到期日期;免费态显示 --
主按钮打开商店订阅管理用于取消订阅、查看商店侧订阅状态;不在 App 内直接取消
扣费历史订单列表展示 SKU、周期、价格、支付时间、渠道、订单号、状态(已支付/已退款)
说明文案合规提示退款、取消和续费状态以应用商店与后端验证结果为准
🗄️ 历史记录字段
字段说明
transaction_id / order_id商店订单号或后端交易 ID,需可复制/排查
skuplus_month / plus_year / premium_month / premium_year
tier / cyclePlus/Premium,月付/年付
price / currency商店本地化价格与币种,原型用 USD 占位
channelgoogle_play / samsung / xiaomi / manual
paid_at扣费时间
statuspaid / refunded / canceled / pending / failed
🔄 交互逻辑
操作行为
点击打开商店订阅管理按当前渠道跳转商店订阅页;跳转失败时 Toast 提示并建议稍后重试/联系客服
购买成功后端验证成功后刷新 entitlement,并在交易历史中新增扣费记录
退款/撤销后端通过商店通知或后台操作更新交易状态,客户端下次刷新展示最新状态
进入页面拉取当前 entitlement + purchase history;失败时保留本地缓存并提示同步失败
本页是「记录与管理入口」,不是新的支付渠道。App 内不承诺直接退款/取消;用户取消订阅、退款、续费失败等状态必须由商店通知与后端验证同步。后台也需要能查看同一份交易历史和商店交易详情,方便客服排查。
设置页 (Settings)
本次迭代说明设置页基础入口与广告位:语言切换、个人资料、填写邀请码、反馈、关于,以及设置页 Banner 横幅广告位;其他设置能力统一放到「设置扩展」非本次迭代页签。
📋 本次迭代设置项
设置项类型分组说明
语言切换选择器 / 底部 Sheet通用展示当前语言,支持波斯语 / English / 中文切换;切换后全局文案即时生效,并自动适配 RTL / LTR 方向。
个人资料入口 →账户进入个人资料页,展示 UUID、邮箱 / 账号状态等基础信息;入口清晰但不抢主页连接主操作。
填写邀请码入口 →账户保留为设置内入口,用于老用户、客服或特殊场景兜底填写邀请码;不作为本次邀请主流程强推。
反馈入口 →支持进入反馈页,用户可提交问题或建议;入口归入支持类设置。
关于信息入口 →信息展示版本号、隐私政策、用户协议、开源许可等基础信息;不承载会员 / 支付或复杂账号逻辑。
Banner 横幅广告位Banner广告设置页新增横幅广告位,承载 TopOn 320×50 Banner;进入设置页时发起加载,加载失败时隐藏广告区域,不影响设置项使用。
🔄 交互逻辑
操作行为存储 / 数据
点击语言切换弹出底部 Sheet → 选择语言 → 全局文案即时切换本地SharedPreferences
点击个人资料进入个人资料页,查看 UUID、邮箱 / 账号状态等基础信息本地 + 服务端
点击填写邀请码进入邀请码填写页,提交后按服务端结果展示成功 / 失败状态服务端
点击反馈进入反馈页,填写问题 / 建议并提交服务端
点击关于进入或展开关于信息,展示版本号、隐私政策、用户协议、开源许可静态 + 本地版本号
自动进入设置页请求设置页 Banner 广告;成功则展示广告,失败则隐藏广告位并保留页面布局稳定TopOn
设置页本次验收五个基础入口 + 一个 Banner 横幅广告位;会员、订阅、账号绑定、检查更新等不放在本次设置需求里。
设置扩展(非本次迭代)
设置页除本次五个基础入口之外的能力,统一作为非本次迭代说明,后续版本再拆分设计与验收。
📋 非本次内容说明
内容说明后续归属
顶部会员卡 / 会员状态入口展示 Free / Plus / Premium 当前状态、升级入口、权益状态等,不纳入本次设置页需求。会员 / 支付
订阅与扣费记录查看当前权益、扣费渠道、下次扣费时间、购买 / 退款历史等,不纳入本次设置页需求。订阅管理
账号绑定 / 找回 / 退出邮箱验证码绑定、换机找回、单设备登录、退出登录等完整账号体系,不纳入本次设置页需求。账号
版本检查 / 应用更新手动检查更新、可选更新、强制更新、下载进度等,不纳入本次设置页需求。更新
会员去广告联动设置页 Banner 广告位本次新增;会员去广告后的隐藏策略随会员 / 支付能力后续统一处理。广告 / 会员
高级网络设置Kill Switch、自动连接、分应用代理、深色模式等高级设置项,后续版本再做。设置扩展
非本次设置扩展不影响当前版本:当前设置页只保证语言切换、个人资料、填写邀请码、反馈、关于五个入口,以及 Banner 横幅广告位可用且样式统一。
应用更新 (App Update)
启动时检查版本,根据更新类型弹出可选/强制更新弹窗;设置页提供手动检查入口
📋 更新类型
类型updateType可否关闭行为
可选更新optional可关闭弹窗显示「稍后」+「立即更新」,用户可关闭继续使用
强制更新force不可关闭隐藏「稍后」,无遮罩关闭,点击遮罩/返回均无效,必须更新完成才能使用
无更新none—启动时静默;手动检查时提示「已是最新版本」
📋 弹窗元素
元素说明数据源
更新图标圆角方形下载图标,绿色渐变,64×64px静态
类型标签「可选更新」蓝色 / 「强制更新」红色服务端
标题可选:「发现新版本」/ 强制:「需要更新」静态i18n
版本号当前版本 → 最新版本 (v1.0.0 → v1.2.0)服务端
更新内容更新说明列表(多语言),可滚动,最大高 160px服务端
安装包大小显示 APK 体积 (12.4 MB)服务端
下载进度条点击更新后显示,0-100% + 百分比文案本地
操作按钮「立即更新」主按钮 + 「稍后」次按钮(仅可选)静态
🔄 启动检查流程
触发行为时机
自动Splash 初始化请求服务端版本信息接口启动 ~0.4s
自动进入主页后若 optional/force → 弹出更新弹窗;none → 不弹Splash 结束 2.5s 后
自动请求失败(离线)跳过检查,使用本地版本正常进入—
🔄 设置页手动检查
操作行为
点击版本号项检查更新已合并到设置页"版本号"项;点击 → 版本号变「...」→ 请求服务端
有更新弹出更新弹窗(逻辑与启动一致,按类型区分可选/强制)
无更新底部 Toast 提示「已是最新版本」,2.2s 后消失
🔄 更新交互逻辑
操作行为
点击立即更新隐藏按钮 → 显示下载进度条 → 进度到 100% → 「安装中...」→ 关闭弹窗 → Toast「更新成功」→ 版本号刷新
点击稍后(仅可选)关闭弹窗,正常使用 App
点击遮罩(强制更新)无响应,弹窗不可关闭
点击遮罩(可选更新)保留弹窗(也可配置为关闭),引导用户决策
📡 版本检查接口 (示例)
字段类型说明
updateTypestringforce / optional / none
latestVersionstring最新版本号 (v1.2.0)
apkSizestring安装包大小 (12.4 MB)
downloadUrlstringAPK / 商店下载地址
minSupportedVersionstring低于此版本强制更新
notesobject多语言更新说明 {fa, en, zh}
强制更新场景:服务端协议变更、严重安全漏洞、低于 minSupportedVersion。强制更新弹窗不可绕过,确保旧版本用户必须升级。可选更新尊重用户选择,避免打扰。建议同一版本的可选更新弹窗每日最多提示一次。
订阅获取失败 (Subscription Fail)
拉取订阅/节点列表失败且无本地缓存时的兜底弹窗,引导用户联系客服
📋 触发条件
场景处理
拉取失败 + 有本地缓存不弹窗,静默使用缓存节点进入主页
拉取失败 + 无可用缓存弹出「订阅获取失败」弹窗,阻断进入,引导求助
触发入口Splash 初始化拉取订阅;主页/节点手动刷新失败亦可复用
📋 弹窗元素
元素说明数据源
警告图标⚠️ 红色圆形背景,60×60px静态
标题"订阅获取失败"(多语言)静态i18n
说明文案提示检查网络或联系客服(多语言)静态i18n
主按钮联系客服,含消息图标,点击打开客服渠道静态
次按钮"重试",关闭弹窗并重新拉取订阅本地
🔄 交互逻辑
操作行为
点击联系客服打开客服渠道(Telegram/邮箱/在线客服,示例 t.me/hawkvpn_support),关闭弹窗
点击重试关闭弹窗 → 重新执行订阅拉取(成功进入主页 / 再次失败复弹)
仅在无缓存可用、无法进入应用时弹出,避免打扰有缓存的正常用户。客服入口是关键兜底:网络受限地区订阅失败常见,直达人工可显著降低卸载率。客服渠道通过脚本顶部 SUPPORT_URL 统一配置。
流量不足 & 流量用尽 (Quota Low / Exhausted)
两个阶段都围绕同一决策:看视频继续获得流量,或开通会员获得更高额度。流量不足不断开;流量用尽会先断开 VPN,再给出「看视频 / 开会员」两条路径。
⚡ 流量不足弹窗(20%)
项说明
触发剩余流量跌破 20% 阈值且 >0、当前已连接时弹出;每次跌破最多提示一次(回升到阈值以上后重置)
定位轻提醒 + 双路径转化:用户有明确痛感时,给出看视频补给和开会员两个选择;不断开连接
主按钮「看视频 +流量」→ 播激励视频 → 完成补充流量 → 奖励弹窗
升级按钮「升级会员」→ 关闭弹窗 → 进入会员页
关闭按钮「暂不需要」→ 关闭,继续使用直到真正用尽
阈值默认 20%,后台可配置
📋 流量用尽触发条件
场景处理
剩余流量归零强制断开 VPN → 弹出「流量已用尽」弹窗
演示行为点击触发按钮时,若当前已连接会先模拟强制断开再弹窗
📋 弹窗元素
元素说明数据源
警示图标🚦 橙色圆形背景,60×60px静态
标题"流量已用尽"(多语言)静态i18n
说明文案说明今日流量已用完,可看短视频继续使用,或开通会员获得更多流量静态i18n
视频按钮看视频 +流量,播放激励视频,完成后补充流量并弹奖励TopOn
升级按钮升级会员,关闭弹窗并进入会员页点击
🔄 交互逻辑
操作行为
自动流量归零强制断开 VPN → 清空实时速率 → 弹出流量用尽弹窗
点击看视频 +流量关闭弹窗 → 播放激励视频 → 完成后补充流量 → 奖励弹窗
点击升级会员关闭弹窗 → 进入会员页,默认展示 Plus 月付
两阶段设计统一:用户还能继续时给「看视频 / 开会员 / 暂不需要」;用户已经用尽时只保留「看视频 / 开会员」两条可恢复路径。客服不再作为流量用尽弹窗主路径,避免把可自助解决的问题转人工。流量不足阈值与补给数值均后台可配置。
反馈页 (Feedback)
用户提交问题或建议,自动附带设备信息辅助定位
📋 表单字段
字段类型必填说明
问题类型下拉选择是连接/速度/错误/建议/其他
问题描述多行文本是最多 500 字
截图图片上传否最多 3 张,单张 ≤5MB
🔄 交互逻辑
操作行为
点击提交按钮校验必填项 → 提交 → 按钮变"已提交 ✓"(2s) → 恢复
点击上传图片唤起系统图片选择器 → 显示"已选择 1 个文件"
自动附带信息设备型号、OS版本、App版本、UUID、网络类型、当前节点
反馈提交后无需等待回复确认。设备信息自动收集减少用户填写负担。
个人资料 (Profile)
只读账户信息展示。邮箱绑定/找回已抽离为独立"账号"页(设置一级入口)
📋 页面元素
区块元素说明数据源
账户信息卡片UUID设备唯一标识(匿名账号),自动生成,不可修改本地
邮箱状态未绑定(红色标签)/ 已绑定(绿色✓)服务端
邀请码用户唯一码 TRN-XXXXX(兼容展示,不作为当前主流程)服务端
账号入口「邮箱与账号找回」入口 →跳转账号页(绑定/找回/退出)点击
个人资料页改为纯展示。账号相关的所有操作(绑定邮箱、换机找回、退出登录)统一收口到独立"账号"页,本页与设置页均提供入口。邀请码字段仅做兼容展示,不作为当前主流程入口。
账号体系 (Account)
匿名优先 + 邮箱找回。一个动作(邮箱+验证码)统一承担绑定、登录、找回,无密码,单设备登录
🧭 账号模型
概念角色说明
UUID匿名账号本身安装即生成,零注册可用,全部功能开放
邮箱账号钥匙(找回锚点)绑定后可在新设备找回;不是账号本身
云端账号数据载体按账号存流量/绑定状态/当前活跃设备;一个邮箱对应一个云端账号
🔑 核心原则:一个动作走天下
项说明
用户视角永远只做"输入邮箱 → 收验证码 → 填验证码",无需理解绑定/登录/找回的区别
服务端判定邮箱未注册 → 绑定到当前匿名账号;邮箱已注册 → 切换到老账号(找回/登录)
验证方式邮箱 6 位数字验证码(OTP),无密码
📋 页面元素(三态)
状态元素说明
未绑定·邮箱步说明卡片"绑定邮箱后换机可找回账号和流量"
邮箱输入 + 发送验证码校验邮箱格式,点击发送进入验证码步
未绑定·验证码步验证码输入框6 位数字,大字间距居中
重发倒计时"重新发送(60s)",倒计时结束才可点
更换邮箱返回上一步重填邮箱
已绑定账号卡片绿色✓ + 邮箱地址 + "退出登录"按钮
保护说明说明单设备登录规则
🔄 四条流程
流程步骤
A 首次使用安装 → 生成 UUID → 直接可用,不弹任何登录/注册
B 绑定邮箱设置/资料→账号 → 输入邮箱 → 发码 → 填码 → 绑定成功,状态变"已绑定/可找回"
C 新机找回新机(临时匿名账号) → 账号页 → 输入已注册邮箱 → 验证码 → 拉取老账号数据 → 临时账号丢弃
D 老设备被踢新机登录后,老设备下次活动时收到"已在他处登录" → 弹窗提示 → 退回匿名账号
🔐 验证码 (OTP) 规则
项规则
位数 / 有效期6 位数字 / 10 分钟
发送频率60s 内仅一次,按钮倒计时
错误处理验证码错误:输入框抖动报错;过期:提示重新发送
防滥用同邮箱/同 IP 每日发送次数上限(服务端)
⚖️ 单设备登录 & 边界场景
场景处理
单设备规则一个账号同一时刻仅一台设备活跃;新设备登录成功 → 老设备下次活动被踢下线
踢下线时机被动发现(下次打开/连接时),无需长连接推送
被踢后状态温和弹窗"账号已在新设备登录" → 退回新的匿名账号,App 仍可用
绑定时邮箱已被占用不报错,自动转找回:"该邮箱已有账号,正在为你恢复" → 走流程 C
新机登录时本地已有流量以老账号为准,本地临时数据丢弃
主动退出登录退回新的匿名账号,App 继续可用,不停在空白页
绑定前换机/卸载数据不可恢复(匿名固有代价),靠"攒流量后引导绑定"降低发生率
设计目标:用户不需要理解"注册/登录/绑定"的概念,全程只有"填邮箱+验证码"一个动作。绑定时机不应一进 App 就强制,而是在用户攒下流量等"有价值资产"时温和引导。话术讲收益("换手机也能找回流量"),不讲动作("去注册")。原型中已绑定态提供一个"模拟其他设备登录(演示)"入口,用于演示被踢下线弹窗。
填写邀请码 (Invite Code · Deferred)
邀请功能本轮延期,本页仅保留兼容原型与历史说明,不纳入当前主流程
📋 页面元素
元素说明数据源
邀请码输入框placeholder: TRN-XXXXX,LTR 方向,供被邀请人填写—
提交按钮半透明绿色按钮,提交成功后灰化不可再次修改—
奖励提示"填写好友邀请码,双方各得免费流量"(数值后台配置,与邀请页一致)静态
🔄 交互逻辑
操作行为后续影响
点击设置→填写邀请码跳转本子页—
点击提交邀请码校验格式 TRN-XXXXX → 提交 → 输入框+按钮灰化禁用双方各获得奖励流量(数值后台配置)
输入格式错误输入框边框变红 1.5s → 恢复—
邀请码流程本轮延期,仅保留兼容原型。当前迭代不把邀请码作为主流程入口,后续版本再统一补齐发放与归因规则。
邀请页 (Invite)
邀请本次不做流程变更,邀请页仅增加一个横幅广告位;原有分享链接、复制链接、邀请统计、邀请码兜底入口保持不变。
📋 本次迭代变更
元素说明数据源
Banner 横幅广告位新增在邀请页内容中,位于链接预览与邀请统计之间;60px 高横幅,左上角展示 "Ad" 角标,承载 TopOn 聚合 320×50 BannerTopOn SDK
🔄 交互逻辑
操作行为
进入邀请页按原邀请页逻辑展示内容,同时请求 Banner 横幅广告
广告加载成功展示 Banner 横幅广告,并记录邀请页横幅广告调用成功
广告加载失败广告位折叠隐藏,不影响邀请页原有分享/复制/统计功能
本次迭代只给邀请页增加横幅广告,不调整邀请链路、归因、发奖、邀请码等规则。新的邀请变更放到「非本次迭代」的「邀请改版」页签。
邀请改版(非本次迭代)
新的邀请链路变更暂不纳入本次迭代,仅作为后续版本参考:分享邀请链接、复制链接、查看邀请统计;邀请码输入仍作为老用户/客服兜底路径。
📋 页面元素
元素说明数据源
🎁 奖励说明卡片「每邀请 = 奖励流量」,好友首次打开 App 后双方各得(数值后台配置)静态
主按钮:分享邀请链接调用系统分享(Web Share API),分享带参数的落地页链接;降级为分享流演示本地
次按钮:复制链接复制落地页链接到剪贴板,含 invite_code 参数本地
链接预览虚线框展示完整邀请链接本地
邀请统计成功邀请数 + 已获流量(双卡片),数值随语言本地化服务端
邀请码输入入口降级为底部小字链接「有邀请码?在这里输入」,仅老用户迁移/客服兜底,非主路径静态
🔄 推荐主流程
步骤说明
1. 分享用户点「分享邀请链接」,系统生成带 invite_code 参数的落地页链接
2. 落地页承接好友点开先进落地页(不直接跳商店),展示邀请关系 / 产品价值 / 下载按钮
3. 主动下载好友主动点「下载 / 打开 Play / 打开其他商店 / 下载 APK」后才跳转
4. 建票据点击时链接参数先进服务器侧会话,生成一次性邀请票据 invite_session_id
5. 认领发奖App 首次打开自动注册成功后带票据回来认领 → 双方各得 5 GB
🎯 归因与发奖(两层)
层职责说明
层 1:点击与落地页归因记录「谁分享给谁」落地页建 invite_session,写入服务器会话 + 短期 cookie/localStorage
层 2:有效行为发奖首开发放App 首次成功打开(自动注册成功)即允许认领并发奖;全局统一,不混用多个发奖点
🗄️ 邀请码输入框(保留旧路径)
用途说明
老用户迁移历史用户手动补录邀请关系
客服兜底归因异常时人工补录
不再作主路径普通用户不先面对邀请码输入框
邀请奖励继续用流量单位(GB),和签到/视频/分享统一成「免费流量权益中心」。发奖触发点固定为首开(用户打开自动注册成功后即发放)。落地页承接与归因票据详见「落地页」页签。
邀请落地页 + 归因(Deferred)
邀请能力本轮延期,本页仅保留历史参考;当前版本不把落地页承接纳入主迭代目标。
📋 页面元素
元素说明数据源
邀请奖励卡「5 GB」大数字 + Install → First open 路径静态
主要安装按钮按 UA 检测跳 Play / Galaxy Store / 小米 GetApps本地UA
商店说明「打开 Google Play / Galaxy Store / GetApps」+「首次打开后发放奖励」静态i18n
APK 下载兜底按钮下方一行小字「直接下载 APK」,无商店设备的备用路径静态
多语言en / ru / fa,按 ?lang= 或浏览器语言,fa 自动 RTL本地
🔄 归因边界(各渠道)
渠道归因做法注意
Samsung Galaxy Store按官方 Install Referrer / User Attribution 接收归因信号不承诺任意自定义参数一定透传
Xiaomi GetApps按官方 Referral API / Install Referrer 接收以商店返回的 referral 与落地页票据匹配
直接下载 APK落地页先建票据,App 首开带票据回服务器认领普通浏览器下载 URL 参数不可靠透传,不依赖 query string
无商店兜底提示「未检测到可用商店」→ 唯一主要按钮 下载官方 APK,保留票据不让用户第一步卡死,不强制跳商店
🎫 邀请票据机制
阶段行为
建票据点击安装/下载时,落地页向服务器登记邀请关系,拿回一次性 invite_session_id,同时写入短期 cookie/localStorage
透传尝试商店链接附带 referrer(Play Install Referrer / Galaxy 官方参数),作为辅助信号
认领App 首次打开(自动注册成功)时带票据回服务器认领;服务器确认后正式记邀请关系
发奖首开认领成功 → 双方各得奖励(数值后台配置)
邀请能力本轮不在主流程内。该段仅保留历史参考,当前迭代聚焦增长闭环与客户端 UI 统一设计;后续若恢复邀请能力,再统一接入票据与归因逻辑。
客服激活 / 后台手工处理 (Support Activation)
当前版本不做「外部购买后 App 内兑换」。该页只作为原型演示客服补偿、测试或账号修正的手工激活能力;正式产品中可弱化入口,常规用户购买必须走 Google Play / Galaxy Store / Xiaomi GetApps 应用内支付。
📋 页面元素
元素说明
激活码输入框格式 HAWK-XXXX-XXXX,LTR 方向;仅客服补偿/测试/账号修正使用
激活按钮校验通过 → 写入 entitlement(原型演示直接开通 Premium)→ 按钮灰化
说明文案明确不是站外购买兑换入口,避免合规误导
🔄 后台手工处理流程
步骤行为
1. 客服确认原因补偿、测试、异常订单处理或账号修正
2. 后台操作按用户手工激活/延长/撤销会员,或补发/撤销流量包
3. 写入权益channel=manual,记录 operator、reason、变更前后状态
4. 刷新 UI会员页、首页广告、节点锁全部按新 entitlement 更新
后台本来就需要支持手工延长、撤销、补发流量包和查看商店交易详情。所有手工操作必须有审计日志。该能力是客服兜底,不是支付主路径。
数据埋点 (Tracking)
按页面统计核心操作次数,用于分析连接、广告调用、激励视频和邀请分享转化
📋 公共参数(每个事件自动附带)
参数类型说明
uuidstring设备唯一标识
app_versionstringApp 版本号 (v1.0.0)
osstring操作系统 (Android/iOS)
os_versionstring系统版本号
device_modelstring设备型号 (Samsung SM-G991B)
channelstring渠道来源 (official/telegram;invite 为历史参考)
regionstring用户地区 (IR/TR/DE),根据 IP 或 SIM 卡判断
languagestringApp 当前语言 (fa/en/zh)
network_typestring网络类型 (wifi/4g/5g)
timestampint64事件时间戳 (ms)
🚀 App 生命周期
事件名触发时机附加参数
app_launchApp 冷启动完成is_first_launch(bool)
app_init_completeSplash 初始化完成进入主页duration_ms(int)
app_enter_foreground从后台切回前台—
app_enter_background切到后台connection_status(connected/disconnected)
🏠 主页
统计项事件名触发时机统计口径
单用户统计点击连接次数home_connect_tap用户点击主页连接按钮按 uuid 累计次数;附带 selected_node、is_auto_select
连接成功次数home_connect_successVPN 隧道建立成功按 uuid 累计次数;附带 node_id、connect_duration_ms
调用横幅广告次数home_banner_request主页 Banner 广告位发起加载/请求按 uuid + page=home 累计请求次数;附带 ad_unit_id
横幅广告调用成功次数home_banner_request_success主页 Banner 广告加载成功并可展示按 uuid + page=home 累计成功次数;附带 ad_unit_id、ad_network
连接成功获取流量弹窗展示home_connect_boost_popup_showFree 用户连接成功后展示获取流量引导弹窗按 uuid 累计展示次数;附带 node_id、ad_unit_id
连接成功获取流量视频点击home_connect_boost_rewarded_video_tap用户点击弹窗内「看视频 +流量」按 uuid 累计点击次数;附带 reward_mb
连接成功获取流量视频拉起home_connect_boost_rewarded_video_show成功拉起连接成功场景激励视频按 uuid 累计拉起次数;附带 ad_unit_id、ad_network
连接成功获取流量视频成功home_connect_boost_rewarded_video_success激励视频完成并满足发奖条件按 uuid 累计成功次数;附带 reward_mb、duration_sec
连接成功获取流量弹窗关闭home_connect_boost_popup_skip用户点击「暂不需要」关闭弹窗按 uuid 累计关闭次数
🎁 权益中心
统计项事件名触发时机统计口径
调用横幅广告次数benefit_banner_request权益中心 Banner 广告位发起加载/请求按 uuid + page=benefit 累计请求次数;附带 ad_unit_id
横幅广告调用成功次数benefit_banner_request_success权益中心 Banner 广告加载成功并可展示按 uuid + page=benefit 累计成功次数;附带 ad_unit_id、ad_network
点击激励视频次数benefit_rewarded_video_tap用户点击视频补给/激励视频入口按 uuid 累计点击次数;附带 reward_mb、count_today
拉起激励视频次数benefit_rewarded_video_show客户端成功拉起激励视频播放页/广告容器按 uuid 累计拉起次数;附带 ad_unit_id、ad_network
激励视频成功benefit_rewarded_video_success激励视频播放完成并满足发奖条件按 uuid 累计成功次数;附带 reward_mb、duration_sec
⚙️ 设置
统计项事件名触发时机统计口径
调用横幅广告次数settings_banner_request设置页 Banner 广告位发起加载/请求按 uuid + page=settings 累计请求次数;附带 ad_unit_id
横幅广告调用成功次数settings_banner_request_success设置页 Banner 广告加载成功并可展示按 uuid + page=settings 累计成功次数;附带 ad_unit_id、ad_network
🚨 流量用尽
统计项事件名触发时机统计口径
流量不足弹窗展示quota_low_popup_show剩余流量低于阈值并展示流量不足弹窗按 uuid 累计展示次数;附带 remaining_mb、total_mb
流量不足拉起视频quota_low_rewarded_video_show流量不足弹窗成功拉起激励视频播放页/广告容器按 uuid 累计拉起次数;附带 ad_unit_id、ad_network
流量不足完成视频quota_low_rewarded_video_success流量不足场景激励视频播放完成并满足补流量条件按 uuid 累计完成次数;附带 reward_mb、duration_sec
流量用尽弹窗展示quota_exhaust_popup_show流量用尽强制断开后展示流量用尽弹窗按 uuid 累计展示次数;附带 total_used_mb
流量用尽拉起视频quota_exhaust_rewarded_video_show流量用尽弹窗成功拉起激励视频播放页/广告容器按 uuid 累计拉起次数;附带 ad_unit_id、ad_network
流量用尽完成视频quota_exhaust_rewarded_video_success流量用尽场景激励视频播放完成并满足补流量条件按 uuid 累计完成次数;附带 reward_mb、duration_sec
👥 邀请
统计项事件名触发时机统计口径
调用横幅广告次数invite_banner_request邀请页 Banner 广告位发起加载/请求按 uuid + page=invite 累计请求次数;附带 ad_unit_id
横幅广告调用成功次数invite_banner_request_success邀请页 Banner 广告加载成功并可展示按 uuid + page=invite 累计成功次数;附带 ad_unit_id、ad_network
点击分享链接或者复制链接次数invite_share_or_copy_tap用户点击「分享邀请链接」或「复制链接」按 uuid 累计次数;附带 method(share/copy)、invite_code
📋 上报策略
策略说明
上报方式实时上报,失败时本地缓存,下次启动重发
批量合并5s 内的事件合并为一次请求
离线缓存无网络时本地存储,上限 1000 条,FIFO 淘汰
本轮埋点以单用户(uuid)次数统计为核心:连接点击/成功、连接成功获取流量引导弹窗、各页面 Banner 调用/成功、权益中心激励视频点击/拉起/成功、流量不足/用尽弹窗与视频补给、邀请分享/复制点击。
非本次迭代埋点需求 (Tracking · Deferred)
非本次迭代功能对应的埋点集中放在这里,当前版本不纳入本次埋点验收。
💳 会员 / 支付漏斗
事件名触发时机附加参数
paywall_impression会员页展示source(quota_low/quota_exhaust/node/home/settings)
paywall_cta_tap点击开通订阅sku, tier, cycle
purchase_start打开商店支付确认单sku, channel
purchase_success后端验证通过发放权益sku, channel, price
purchase_fail购买/验证失败sku, reason
restore_success恢复/同步购买成功tier
manual_grant_success后台手工激活或补发成功tier, operator_id
entitlement_expired订阅到期失效tier
premium_node_selected付费用户选中 Premium 节点node_id
会员 / 支付相关功能属于非本次迭代,对应埋点仅作为后续版本预留。