docs 架构描述补原生数据面:ios/PLAN §附 对照表 + README

- ios/PLAN.md §附「与桌面端策略对照」表「引擎」行原写「桌面 Go 原生 / iOS 复用 web/src JS(无头)」,未反映数据面已下沉原生——改为「JS 编排 + 原生数据面」(桌面 Go/pion、iOS libwebrtc),并加表下数据面对称说明(决策 F)
- README.md「已落地」补「原生数据面」条:P2P 数据通道从 WebView JS 下沉原生(桌面 pion / iOS libwebrtc),逃 256KB rwnd 与渲染器节流,信令/中继/编排留共享 JS 引擎
This commit is contained in:
2026-06-28 19:49:37 +08:00
parent 349d94aa8f
commit adfd2912a5
2 changed files with 4 additions and 1 deletions
+1
View File
@@ -24,6 +24,7 @@ MVPM0M13)已上线 prodOIDC PKCE 接入自建 CasdoorCloudflare Re
- **剪贴板同步**:单条覆写式云剪贴板(短 TTL 限暴露面)+ 文本消息一次性通道 - **剪贴板同步**:单条覆写式云剪贴板(短 TTL 限暴露面)+ 文本消息一次性通道
- **桌面客户端**Wails v2macOS universal `.app` + Windows `.exe`)—— 瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密) - **桌面客户端**Wails v2macOS universal `.app` + Windows `.exe`)—— 瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密)
- **原生数据面**P2P 数据通道从系统 WebView 的 JS 下沉到原生——桌面走 Go/pion、iOS(原生 SwiftUI 客户端)走 libwebrtc——逃出 WebKit / WebView2 写死的 256KB SCTP 接收窗与渲染器节流;信令 / 中继 / 编排仍由共享 JS 引擎统一,三端共享同一线协议(详见 docs 分支 `CHANGELOG`
- **浏览器免重登 + PWA**:可安装为独立 PWA;浏览器侧 refresh_token 不再进 JS,改由服务端 HttpOnly cookie 会话持有(AES-256-GCM 落盘),关闭重开自动免重登(7 天滑动失活),设备名随会话持久化(抗 PWA 存储清除) - **浏览器免重登 + PWA**:可安装为独立 PWA;浏览器侧 refresh_token 不再进 JS,改由服务端 HttpOnly cookie 会话持有(AES-256-GCM 落盘),关闭重开自动免重登(7 天滑动失活),设备名随会话持久化(抗 PWA 存储清除)
- **推送通知**:页面 / PWA 关闭时,收到文件、消息、传输完成或失败以系统通知提醒;页面打开时仍走应用内提示。网页走 Web Push(VAPID,覆盖浏览器 / Android / iOS 16.4+ 已安装 PWA),桌面客户端走原生系统通知(仅窗口非前台才弹)。文案按设备语言在服务端渲染(中简 / 中繁 / 英) - **推送通知**:页面 / PWA 关闭时,收到文件、消息、传输完成或失败以系统通知提醒;页面打开时仍走应用内提示。网页走 Web Push(VAPID,覆盖浏览器 / Android / iOS 16.4+ 已安装 PWA),桌面客户端走原生系统通知(仅窗口非前台才弹)。文案按设备语言在服务端渲染(中简 / 中繁 / 英)
- **扫码登录**:临时借用陌生设备时,陌生设备显二维码、已登录手机扫码批准即可登入(微信 / WhatsApp 网页版模型)。批准方选“信任此设备(7 天)”或“仅此次(1 小时)”,授予的是受限访客会话(能收发文件,不能改账号 / 不能再批准别的设备 / 不能签发长效 token)。三密钥分离:二维码只含批准信息,会话只投递给持私有轮询密钥的原设备,偷拍二维码者拿不到会话。身份仍源自 OAuth providercdrop 自维护薄账户层 + 自签会话令牌(详见 `AUTH.md` - **扫码登录**:临时借用陌生设备时,陌生设备显二维码、已登录手机扫码批准即可登入(微信 / WhatsApp 网页版模型)。批准方选“信任此设备(7 天)”或“仅此次(1 小时)”,授予的是受限访客会话(能收发文件,不能改账号 / 不能再批准别的设备 / 不能签发长效 token)。三密钥分离:二维码只含批准信息,会话只投递给持私有轮询密钥的原设备,偷拍二维码者拿不到会话。身份仍源自 OAuth providercdrop 自维护薄账户层 + 自签会话令牌(详见 `AUTH.md`
+3 -1
View File
@@ -306,7 +306,7 @@ iOS 界面引入与 web 一致的品牌资产与字体栈——这是强约束
| 维度 | 桌面(Wails | iOSarch A | | 维度 | 桌面(Wails | iOSarch A |
|---|---|---| |---|---|---|
| UI | 复用 `web/src` | 原生 SwiftUI(分叉,PARITY 管) | | UI | 复用 `web/src` | 原生 SwiftUI(分叉,PARITY 管) |
| 引擎 | Go 原生 | 复用 `web/src` JS(无头) | | 引擎 | JS 编排(`web/src`,与 UI 同 WebView+ **Go/pion 数据面** | JS 编排(`web/src`,离屏无头)+ **原生 libwebrtc 数据面** |
| 桥方向 | JS-UI 顶层 → Go | SwiftUI 顶层 → 无头 JS | | 桥方向 | JS-UI 顶层 → Go | SwiftUI 顶层 → 无头 JS |
| refresh_token | Go keyring | iOS Keychain | | refresh_token | Go keyring | iOS Keychain |
| 登录 | loopback PKCE | `ASWebAuthenticationSession` / 扫码 | | 登录 | loopback PKCE | `ASWebAuthenticationSession` / 扫码 |
@@ -314,3 +314,5 @@ iOS 界面引入与 web 一致的品牌资产与字体栈——这是强约束
| 剪贴板 | Go Monitor 实时双向 | 控制中心手动两控件(纯原生 REST) | | 剪贴板 | Go Monitor 实时双向 | 控制中心手动两控件(纯原生 REST) |
| 平台判定 | `isDesktop()``window.runtime` | `isIOSShell()``window.webkit.messageHandlers` | | 平台判定 | `isDesktop()``window.runtime` | `isIOSShell()``window.webkit.messageHandlers` |
| 分发 | Dropbox 旁加载 | 旁加载(非 App Store | | 分发 | Dropbox 旁加载 | 旁加载(非 App Store |
> **数据面对称(2026-06-28)**:两端结构同构——共享 JS 引擎跑编排(信令 / relay / presence / 状态机),P2P 数据面下沉原生(桌面 Go/pion、iOS libwebrtc),逃 WebView WebRTC 的 256KB rwnd 与渲染器节流;三端共享同一线协议。详见 `desktop/NATIVE-TRANSFER.md`(决策 F)。