## 文档更新内容补充 - 收录 OpenInstall 配置参数: - appkey:alf57p - iOS Associated Domains:applinks:alf57p.oplinking.com - 其余方案保持既定约束:静默邀请、仅在 kr_deviceLogin 成功后调用、仅打印日志、不改动 UI、不清理本地、桌面平台从包名截取邀请码、网络层 silentInvite 标识屏蔽响应弹窗但保留请求拦截。 ## 《说明文档.md》新增/修订片段(拟写) ### OpenInstall 配置 - 版本:openinstall_flutter_plugin:^2.5.7 - appkey:alf57p - iOS: - Associated Domains:applinks: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) - **识别规范**:文件名或路径中包含 `ic-`,例如 `HiFastVPN-ic-888.dmg`。 - **解析逻辑(分层检测策略)**: 1. **直接路径匹配 (Win/Mac 通用)**:从当前运行的 `.exe` 或 `.app` 全路径中正则提取。这是最直接、最高效的手段。 2. **安装渠道配置文件 (Windows 独有)**:读取程序安装目录下的 `channel.txt`。支持 Inno Setup 在安装时通过 `{srcexe}` 获取安装包名并自动生成该文件。这为 Windows 提供了最稳定的安装后识别方案。 3. **挂载源追溯 (macOS 独有)**:通过 `hdiutil info` 关联运行中的 App 及其原始 `.dmg` 文件名。专门解决“程序未改名但在已命名的镜像中运行”的场景。 4. **下载元数据提取 (macOS 独有)**:通过 `mdls` 读取文件扩展属性。即便安装包已清理,只要系统保留了下载来源记录,仍可识别。 5. **下载目录智能扫描 (Win/Mac 通用)**:作为最后兜底,扫描用户下载目录(Downloads)下最近修改的、符合命名规范的镜像或安装包(`.dmg`/`.exe`)。这一策略能有效解决用户下载后虽然安装程序没改名,但原始安装包依然留在下载文件夹中的场景。 - **调试支持**:当 `inviteDebugMode` 开启且识别到邀请码时,桌面端会弹出确认对话框。 ### 网络层标识(silentInvite) - 载体:Dio RequestOptions.extra(可选 Header: X-Client-Mode: invite_silent) - 行为:保留请求拦截;屏蔽响应弹窗与登录失效弹窗;错误向上传递,调用方仅打印日志 ### 测试清单 - iOS UL 验证:applinks:alf57p.oplinking.com - Android 深链验证 - 设备登录成功后静默绑定日志验证 - 桌面解析包名验证 ## 交付 - 经你确认后,我将把上述内容写入《说明文档.md》,目前仍不进行代码改动。