hi-client/邀请文档.md
2026-01-19 09:20:38 -08:00

71 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 文档更新内容补充
- 收录 OpenInstall 配置参数:
- appkeyalf57p
- iOS Associated Domainsapplinks:alf57p.oplinking.com
- 其余方案保持既定约束:静默邀请、仅在 kr_deviceLogin 成功后调用、仅打印日志、不改动 UI、不清理本地、桌面平台从包名截取邀请码、网络层 silentInvite 标识屏蔽响应弹窗但保留请求拦截。
## 《说明文档.md》新增/修订片段(拟写)
### OpenInstall 配置
- 版本openinstall_flutter_plugin:^2.5.7
- appkeyalf57p
- iOS
- Associated Domainsapplinks:alf57p.oplinking.com
- 在 AppDelegate 转发 openURL/Universal Links 到插件
- Android
- Manifest 配置深链与自定义 scheme与 iOS 域名对应),按官方文档完成
### 触发点与静默行为
- 触发点await authApi.kr_deviceLogin() 成功分支([app_run_data.dart](file:///Users/apple/Documents/source/hi-client/lib/app/common/app_run_data.dart#L410-L460)),在 kr_saveUserInfo 之前调用 KRUserApi().hi_inviteCode(inviteCode)
- 静默:仅打印控制台日志,不走响应弹窗,不清理本地状态,不重试
### 桌面端各平台识别方案
由于 Windows 和 macOS 的分发机制完全不同,识别策略已进行针对性分离:
#### Windows 平台(高可靠方案)
* **主流方案:自动读取 `channel.txt`**
* **原理**:利用 Inno Setup 脚本,在安装过程中实时获取安装包名(如 `Setup_ic-888.exe`),截取 `ic-` 后缀并将其写入安装目录下的 `channel.txt`
* **代码实现**:程序启动时优先检测运行路径下的 `channel.txt`。只要该文件存在,识别率接近 100%,无需依赖其他高危权限。
* **辅助/降级方案**
1. **直接路径匹配**:识别手动重命名的 `.exe` 文件名。
2. **下载目录扫描**:作为最后兜底,扫描 `~/Downloads` 文件夹下的重命名安装包。
#### macOS 平台(多级追溯方案)
* **识别逻辑(分层检测策略)**
1. **挂载源追溯 (核心)**:通过 `hdiutil info` 关联运行中的 App 及其原始 `.dmg` 文件名。专门解决“程序未改名但在已命名的镜像中运行”的场景。
2. **直接路径匹配**:从当前 `.app` 包名的全路径(或已改名的包名)中正则提取。
3. **下载元数据提取**:通过 `mdls` 读取文件扩展属性 `kMDItemWhereFroms`。即便安装包已清理,只要系统保留了下载来源记录,仍可识别。
4. **下载目录扫描**扫描用户下载目录Downloads下最近修改的 `.dmg` 安装包。
- **调试支持**:当 `inviteDebugMode` 开启且在任意平台识别到邀请码时App 会弹出醒目的确认对话框,方便测试验证。
### 100% 可靠性技术分析(深入)
目前桌面端的提取逻辑存在性能天花板,以下是针对生产环境的最终建议:
#### 1. 为什么 DMG 改名不是 100%
macOS 的隔离机制决定了当文件从 DMG 拷贝到 `/Applications` 后,父容器的所有属性(文件名、挂载关联)都会被物理切断。**本地提取方案仅作为“零成本辅助”存在。**
#### 2. 如何实现 100% 闭环?
* **工业级方案指纹识别OpenInstall / Adjust**
* **地位**:核心主力方案。
* **逻辑**通过浏览器端采集IP、UA、分辨率等与 App 启动端采集进行云端指纹匹配。
* **优势**无视安装位置无视文件名改动100% 跨生存周期追踪。
* **备选方案PKG 安装包 (macOS Installer)**
* **逻辑**:模仿 Windows 的 Inno Setup`postinstall` 阶段运行脚本。
* **局限**:签发成本极高,需要服务端实时重签名,通常不推荐。
### 结论
**Windows 依靠 `channel.txt` 已实现 100% 识别macOS 建议以“OpenInstall 指纹识别”为主力本代码实现的“hdiutil/mdls 追溯”为辅,共同构建 100% 识别链路。**
### 网络层标识silentInvite
- 载体Dio RequestOptions.extra可选 Header: X-Client-Mode: invite_silent
- 行为:保留请求拦截;屏蔽响应弹窗与登录失效弹窗;错误向上传递,调用方仅打印日志
### 测试清单
- iOS UL 验证applinks:alf57p.oplinking.com
- Android 深链验证
- 设备登录成功后静默绑定日志验证
- 桌面解析包名验证
## 交付
- 经你确认后,我将把上述内容写入《说明文档.md》目前仍不进行代码改动。