记录时间:2026-09-02 状态:方案讨论完成,待管理层拍板三个决策点后按 spec-kit 立项(规格 → 计划 → 任务 → 实现) 需求:推广人员分享推荐链接,他人通过链接去应用商店下载 App 后,系统能关联"这个用户是谁推荐的"
info_user 已有 mycode(本人 8 位邀请码,注册时生成)和 thiscode(记录邀请人)字段;/setuser 已能接收 thiscode 入库。thiscode 只记录不结算)。分享链接:https://play.google.com/store/apps/details?id={包名}&referrer={推广令牌}
App 首启调 Play Install Referrer API 读出令牌 → 首启上报 → 注册自动绑定
| 优先级 | 通道 | 原理 | 用户成本 | 准确率 |
|---|---|---|---|---|
| 1 | 手机号中转 | 落地页"输手机号领新客券",服务端记录(手机号 → 推广令牌);注册用同一手机号时精确匹配自动绑定 | 填一次手机号 | ≈100% |
| 1' | 快速预注册(中转页变体) | 落地页直接手机号+验证码预建账号,下载后登录即归因;适合不给奖励的场景 | 完成注册 | ≈100% |
| 2 | 复制邀请码 | 落地页"复制"按钮把 https://域名/r/{令牌} 写入系统剪贴板(设备级全局存储,装 App 不清空);注册页输入框出现 iOS 系统粘贴建议条,点一下自动填 |
点两下 | ≈100%(依赖配合) |
| 2' | 剪贴板无弹窗自动读取 | iOS 16+ UIPasteboard.detectPatterns 可无弹窗检测剪贴板内 URL 并取值;因此复制内容必须包成 URL 而非裸码。时机必须在注册页而非启动页 |
无感 | 高(iOS 16+) |
| 3 | 指纹匹配 | 落地页记录 IP+UA(机型/系统)+屏幕+点击时间;App 首启上报同字段,服务端窗口期配对 | 无 | 60–80% |
| 4 | 手填邀请码 | 推广人 LINE 里直接发码,注册页输入框手输 | 手输 | 100% |
注意事项:
采用"首启上报、服务端待归因、注册自动绑定"三段式,不依赖客户端在注册时提交推荐码:
推广人生成分享链接(服务端签发不透明令牌,非裸 mycode,可验真/撤销/统计)
↓
落地页(记录指纹 + 手机号/复制码;Android 直跳 Play 带 referrer)
↓
App 首启 → POST /app/install/attribution(令牌 + 设备信息)
↓
服务端待归因记录:设备指纹/手机号 + 令牌 + 上报时间(状态=待绑定)
↓
用户注册 → 服务端自动查待归因记录 → 绑定 thiscode → 记录置为已消费
绑定优先级(需写死):手填邀请码 > 手机号中转 > 剪贴板 > 指纹匹配(用户明确意图优先)。
| 场景 | 归因率 |
|---|---|
| Android(点了链接) | ≈100%(Install Referrer) |
| iOS 走了手机号中转 | ≈100% |
| iOS 只点了复制码、剪贴板未被覆盖 | ≈100% |
| iOS 剪贴板被覆盖、无手机号 | 指纹兜住 60–80% |
| 未点链接直接商店搜索 | 0%(手填码除外) |
iOS 综合预期 85% 以上(取决于落地页"填手机号/复制码"的转化率);其余算自然流量。
specs/0xx-app-referral-attribution/spec.md:用户故事(推广人生成链接、被邀请人下载注册自动绑定、推荐数据查询)、验收场景、防刷规则。