Files
what-to-eat/docs/decisions/0004-web-only.md
T
toor 8ff7b879b9 refactor: 个人自用,移除登录与云同步全链路
站点只给本人用,云乐坊 SSO 授权、收藏/历史云同步、获客归因和账号切换记账都没有收益,却被登录状态检查和同步失败提示持续打扰。

- 删除 useYunlefunAuth / yunlefunAuth / yunlefunSsoConfig / yunlefunAuth 适配器、useUserDataSync / userDataSync / userData 适配器、三个 client 插件与 /auth/callback 回调页
- 抽出 adapters/cloudbase.ts,让「反馈一下」和匿名筛选信号不再依赖登录态;cook-feedback 云函数保留
- 删除 cook-user-data 云函数与 cook_user_data 权限规则,移除 @yunlefun/sso 依赖
- 「我的」页删掉登录按钮、账号卡、四个统计格和退出登录;「关于」页删掉项目作者、致谢名单和上游宣传链接
- 本地收藏/历史与导出导入保留,删除同步专用的 lastUid 记账

取舍见 docs/decisions/0005-drop-login-and-sync.md
2026-10-22 15:52:54 +08:00

4.0 KiB
Raw Blame History

0004 只保留 Web,移除 Capacitor 原生壳

背景

  • 仓库同时维护着三套东西:Nuxt Web 应用、Capacitor 的 iOS 壳、Capacitor 的 Android 壳。
  • Capacitor 依赖比想象中深:登录走原生浏览器 + 原生回调 URL,暗色模式改原生状态栏,Android 有物理返回键处理, SSO 事务存在 Preferences 里。为此多出了 nativeSso.ts、createNativeYunlefunAuthorizationAdapter、 resolveYunlefunSsoConfig 的 platform 分支,以及 6 个只为原生分支存在的测试文件。
  • 0003 决定用 SwiftUI 原生版替换 Capacitor 版,把 iOS 当作要上架收费的主力。但 SwiftUI 工程 (apps/ios)至今没有开工,Capacitor 壳反而成了长期负担:每次升级 @capacitor/* 都要在 Web 侧 重新验证原生分支,而这些分支在浏览器里根本走不到。
  • 实际使用中,Web 版已经同时服务普通浏览器和云乐坊容器(window.ylf JSAPI),原生壳带来的能力 (状态栏配色、物理返回键、原生 SSO 回跳)都有 Web 侧的等价实现。

方案对比

问题 方案 取舍
原生壳去留 保留 Capacitor iOS + Android 两条壳都要跟 @capacitor/* 版本走;Web 侧原生分支长期没人跑
只删 Android,保留 iOS iOS 壳仍在,Capacitor 依赖无法卸掉,清理不彻底
全部移除,只保留 Web 失去上架 App 与原生 SSO;换来单一代码路径和持续可维护的 Web

决定

删除

  • android/、ios/ 两个 Capacitor 原生壳工程。
  • capacitor.config.ts、根 ionic.config.json。
  • scripts/android/、scripts/ios.sh。
  • 根与 apps/web 的 package.json 里全部 @capacitor/* 依赖,以及 dev:android、build:android、 dev:ios、ios、android、open:ios、open:android、sync 等脚本。

Web 侧去 Capacitor 化

  • composables/dark.ts:只改 meta[name="theme-color"],不再设置原生状态栏。
  • pages/tabs.vue:移除 Android 物理返回键处理(浏览器自带返回,无需拦截)。
  • adapters/yunlefunAuth.ts:删掉原生授权适配器和基于 Preferences 的事务存储,只保留 Web 授权适配器。
  • utils/nativeSso.ts:整体删除。它的产物只是原生 SSO 的 PKCE 事务与回调解析,Web 端走 @yunlefun/sso 的顶层重定向,不需要。
  • utils/yunlefunAuth.ts / utils/yunlefunSsoConfig.ts:控制器和配置解析去掉 platform 分支, 只保留 Web 一种形态。
  • nuxt.config.ts:去掉 yunlefunSsoNativeClientId / yunlefunSsoNativeRedirectUri。

保留

  • @nuxtjs/ionic 与 Ionic UI:Ionic 是 Web UI 框架,与 Capacitor 无关。
  • utils/yunleHost.ts 与云乐坊容器(window.ylf)集成:这是 Web 被嵌入第三方 App 容器时的适配层, 和 Capacitor 无关。
  • PWA 安装、Service Worker、离线能力:都是 Web 能力。

影响

  • 不再有 iOS / Android 安装包。若之后要上架,需要另起仓库做原生工程,而不是把 Capacitor 壳捡回来。
  • 云乐坊 SSO 在 Web 上继续可用:容器内走宿主授权面板,容器外走顶层重定向回到 https://cook.yunyoujun.cn/auth/callback。PKCE 与 HTTPS 回跳地址的约束不变。
  • docs/dev/ios-roadmap.md 与 docs/decisions/0003-native-ios-monorepo.md 随之作废。
  • @nuxtjs/ionic 自身仍会传递依赖 @capacitor/cli / @capacitor/core(构建期使用,运行时不会调用), pnpm-workspace.yaml 里对应的 override 保留。