06 · 云同步(自建 Supabase · 多设备 + 照片备份)
App 出厂默认纯本地运行(不上传、不需要账号)。如需「多设备同步 + 照片备份」, 自建一个免费的 Supabase 项目(BYO 模式——每个用户自己的项目), 把 URL + Anon Key 粘到登录页即可。完全可选。
步骤
- 去 supabase.com 注册账号 → Dashboard 点 「New project」 建一个免费档项目

- 项目就绪后 → 左侧菜单 → SQL Editor → + New query → 粘贴
schema.sql(App 内有「复制 schema.sql」按钮一键复制)→ 点 Run 执行

回 App 进「登录 / 注册(云同步)」页 → 选「未配置过」分支(首次) → 把 Supabase
Project URL+anon public key(在 Project Settings → API 里)粘进去 → 保存登录页三种方式任选一种:邮箱验证码 / GitHub OAuth / Google OAuth → 数据开始双向同步
登录页 3 种登录方式
| 方式 | 何时用 |
|---|---|
| 邮箱验证码 | 零配置即用;适合首次 / 不想走 OAuth |
| GitHub OAuth | 需要 Supabase 控制台启用 GitHub provider |
| Google OAuth | 需要 Supabase 控制台启用 Google provider |
登录页 3 个同步按钮
| 按钮 | 行为 | 风险 |
|---|---|---|
| 立即同步 | 双向 LWW 合并;冲突建副本(id#c<毫秒>,两版本并存) | 无 |
| 从云端覆盖本地 ⚠️ | 删本机全部 → 拉云端 | 本机未同步的改动丢失 |
| 将本地覆盖到云端 ⚠️ | 删云端你账号下全部 → 推本机 | 云端其他设备的改动被覆盖 |
后两个按钮会先弹 AlertDialog 列出「将删除 N 行 M 张图」+ 红底「确认覆盖」。
计费 / 配额
- 免费档:DB 500 MB / Storage 1 GB / 月活 50,000 —— 个人球拍 + 穿线 + 握把远用不完
- 数据全部存在你自己的 Supabase 项目;AceCrush 团队看不到,开发者也看不到
- 想停用:App 内右上角「更换 Supabase 项目」图标 → 二次确认 → 清空当前会话
排错速查
| 现象 | 原因 / 处理 |
|---|---|
| 探测显示「✗ 表不存在」 | 没跑 schema.sql 或没成功 → 重跑步骤 2 |
| 探测显示「✗ Anon Key 无效」 | 复制时漏字符;重新完整复制 Project Settings → API 里的 anon public |
| GitHub / Google 登录报错「该登录方式未启用」 | 自建 Supabase 默认未配这两个 provider;去控制台启用或改用邮箱 |
| 邮箱登录收到的是「点击链接」而非 6 位码 | 控制台关「Confirm email」;Email Templates 正文含 token 占位(模板里写成 {{ .Token }},Supabase 渲染时替换为真验证码) |
| 照片下载不下来(行同步成功但 photoUp = 0) | 用「从云端覆盖本地」一键强拉 |