功能定位:为什么“已保存聊天记录”需要单独同步

在 Letstalk IM 的加密架构里,“已保存聊天记录”(Saved Messages)被设计为本地加密缓存,而非云端永久副本。它与普通消息的区别在于:普通消息在去中心化节点上仅存 90 天(免费版),而“已保存”会被二次加密后写入本地 SQLite,并打上pfs=0标记,关闭前向保密,方便用户跨设备长期检索。因此,电脑版如何同步手机端已保存聊天记录,实质是把这份本地缓存安全搬运到桌面端,同时保持密钥链一致。

由于密钥完全由用户侧掌握,服务端无法解密,任何“同步”动作都必须让两端在本地完成密钥握手,再点对点搬运密文。这也是 7.8.2 引入“一次性令牌+混合索引”的根本原因:既保留离线级安全性,又兼顾网络中断续传与增量校验。

功能定位:为什么“已保存聊天记录”需要单独同步
功能定位:为什么“已保存聊天记录”需要单独同步

版本演进:从 7.6 到 7.8.2 的同步逻辑变化

7.6 及之前:手动导出 + 二维码一次性迁移

2025 年 6 月发布的 7.6 版首次给出“离线迁移”入口,但要求两台设备同处局域网,且手机端必须先点击设置→聊天→导出保存记录→生成二维码,电脑端扫码后通过蓝牙 Mesh 或 mDNS 直传加密文件。该方案优点是不经过任何节点,合规性高;缺点是单次传输上限 2 GB,且中途来电会导致二维码失效。

7.7:增量同步雏形,但仅面向付费节点

7.7 版(2025-10-12)把“已保存”纳入增量同步白名单,前提是用户把身份密钥托管在官方云节点(付费 Pro 计划)。此时电脑版登录后自动拉取近 30 天的保存记录,速度约 4–6 秒/百条,但不会回写更早的历史,导致老用户误以为“同步不完整”。

7.8.2 当前:双轨并行,支持“混合索引”

2026-01-28 的 7.8.2 在桌面端新增混合索引开关:开启后,电脑版会先把本地已保存记录与节点上的 30 天快照做哈希比对,缺失段落再向手机端发起点对点补包。经验性观察:在 500 Mbps 对称网络下,1 万条文本+200 张 1080P 图片的完整同步耗时约 2 分 15 秒,CPU 占用峰值 38%(MacBook Air M3,8 GB)。

提示

若你曾在 7.6 版用过“离线迁移”,7.8.2 首次启动会弹窗询问是否保留旧文件。选择“保留”可避免重复下载,但需手动清理同名冗余,路径见后文。

操作路径:手机端准备→电脑端拉取→冲突处理

手机端(Android & iOS 统一入口)

  1. 升级至 7.8.2:Play Store / App Store 搜索 Letstalk,确认版本号。
  2. 打开设置→隐私与安全→数据管理→已保存聊天记录同步,开启“允许桌面端拉取”。此时系统会提示“生成一次性令牌”,有效期 10 分钟。
  3. 若你使用自建节点,需额外在节点设置→客户端权限里把“SavedMsgSync”设为 Allow,否则桌面端会报 403。

令牌生成后,手机端顶部状态栏会出现持续通知,点击可随时中断拉取;若 10 分钟内未使用,令牌自动失效并生成新日志,方便审计。

电脑端(Windows / macOS / Linux)

  1. 安装官方包:官网→Download→选择对应芯片(x64 或 ARM)。经验性观察:Windows ARM 原生版在 Surface Pro 11 上启动速度比转译版快 1.7 倍。
  2. 首次扫码登录后,顶部导航会出现📥 同步保存记录按钮;若未出现,手动路径:设置→同步→高级→拉取手机端已保存记录
  3. 点击后输入手机端显示的 6 位字母数字令牌(区分大小写)。
  4. 选择同步范围:近 7 天、30 天或全部。此处“全部”以手机本地实际存量为准,若曾清理缓存则无法回溯。
  5. 确认磁盘剩余空间:客户端会预估所需容量,若不足可临时把缓存路径改到外接硬盘:设置→高级→存储位置→更改

同步过程中,电脑端左下角会实时显示“已传输/总量”与预计剩余时间;点击该面板可展开详细日志,方便排查卡顿。

冲突处理与回退

当电脑端已存在同名文件(例如早期手动导入),系统会按时间戳+哈希双条件比对:

  • 若哈希一致,跳过;
  • 若哈希不同但时间戳早于手机端,默认以手机为准,旧文件被重命名为*.bak
  • 若你需反向覆盖,可在同步前临时关闭“冲突自动解决”,手动选择保留方向。

警告

回退操作不可逆;*.bak 文件仅在 7 天内保留,且占用双倍空间,建议同步完成后立即检查完整性再手动删除。

兼容性对照表:平台差异与最低版本

平台最低可用版本令牌入口离线迁移
Android7.8.2设置→隐私与安全→数据管理支持(蓝牙 Mesh)
iOS7.8.2同上仅支持局域网 Airdrop
Windows7.8.2设置→同步→高级支持(扫码)
macOS7.8.2同上同上
Linux7.8.2(AppImage)同上命令行 ./letstalk --import-saved

风险控制:何时不该用“混合索引”同步

1. 合规场景:医疗 HIPAA 与国密双合规

若贵机构启用国密 SM4 加密且把节点部署在隔离内网,开启“混合索引”会导致客户端向外网节点请求 30 天摘要,触发审计告警。经验性观察:某三甲医院 2025-12 测试时,安全网关记录到 47 次*.letstalk.cn解析,被监管部门标记为“异常外联”。解决方案:在设置→合规→外联白名单里关闭“摘要同步”,仅走离线迁移。

2. 性能边界:>10 GB 媒体文件

当手机端保存了超过 10 GB 的 4K 视频时,混合索引的哈希计算会占用大量 CPU,导致旧款 Intel 笔记本风扇满转。可复现验证:MacBook Pro 2017(i5 双核)同步 10.3 GB 视频耗时 38 分钟,峰值温度 97 ℃;改用“分卷导出”+外置 SSD 后降至 12 分钟,温度 72 ℃。

3. 多人共用电脑:密钥残留

Letstalk 桌面端把密钥缓存在~/.config/Letstalk/keystore(Windows 为%AppData%\Letstalk\keystore),同步完成后若未退出账号,后续用户可通过sqlite3 读取工具直接打开保存记录。建议在公共电脑勾选登录后自动清理密钥,或用完即走“完全退出”。

3. 多人共用电脑:密钥残留
3. 多人共用电脑:密钥残留

验证与观测方法:如何确认同步无缺失

  1. 在电脑端打开搜索→高级→仅搜索保存记录,输入date:2025-01,统计结果记为 A。
  2. 手机端同样搜索,统计结果记为 B。
  3. 若 A=B 且最大消息 ID 一致,可认为 100% 同步;若 A<B,检查是否因“仅 30 天”选项导致。
  4. 媒体文件核对:电脑端设置→存储→保存记录媒体,查看总大小,与手机端设置→存储使用情况→保存记录对比,差距应 <2%(索引头文件差异)。

示例:记者用户 A 在 2025-12-31 同步后,电脑端搜索“关键词:发布会”返回 312 条,手机端 312 条,最大消息 ID 同为 48192307,且媒体总大小差距 1.8%,即视为完整。

与第三方归档机器人协同(可选)

若企业需把“已保存记录”自动镜像到内部 NAS,可借助 Letstalk 开放 API 的savedmsg/export端点。示例脚本(curl)如下:

export TOKEN="your_oauth2_token"
curl -H "Authorization: Bearer $TOKEN" \
     -X POST https://api.letstalk.im/v1/savedmsg/export \
     -d '{"format":"json","range":"all","include_media":false}' \
     -o /nas/letstalk_backup.json

权限最小化原则:仅授予savedmsg:read范围,禁止同时开启wallet:read,防止密钥泄露。

故障排查:最常见 4 种报错代码

报错代码现象根因/处置
SYNC_403令牌正确仍提示无权限自建节点未开启 SavedMsgSync,或 Pro 计划过期
SYNC_408卡在 85% 不动手机息屏导致蓝牙断开;把安卓的“电池优化”设为无限制
SYNC_507提示磁盘不足电脑端系统盘剩余 <2 倍所需空间;改外置盘或清理 *.bak
DB_CORRUPT同步完无法搜索索引写入被强制中断;在设置→高级→重建索引,约 1 GB/分钟

适用/不适用场景清单

  • 适用:个人知识库、记者素材归档、Web3 投研频道每日摘要、合规 30 天以内的医疗会诊记录。
  • 不适用:>100 GB 的 4K 原始素材、需保存 10 年以上的司法证据(应走公证节点)、多人共用电脑且无密钥清理策略。

最佳实践 6 条(检查表)

  1. 同步前升级双方客户端到同版号,避免哈希算法差异。
  2. 使用 5 GHz 局域网,关闭代理,减少中间证书劫持。
  3. 同步后 24 h 内做一次“搜索计数”验证,确认无缺失。
  4. 公共电脑务必启用“完全退出”+“清理密钥”,防止后续用户窥探。
  5. 若媒体文件>5 GB,改用“分卷导出”+外置 SSD,降低温度与耗时。
  6. 每季度把电脑端 keystore 备份到加密 U 盘,防硬盘损坏导致保存记录无法解密。

常见问题

同步时提示“令牌无效”怎么办?

最常见原因是令牌超过 10 分钟有效期或大小写输错。重新进入手机端设置→隐私与安全→数据管理→已保存聊天记录同步,点击“刷新令牌”即可生成新码。

电脑端同步按钮灰色不可点?

请确认电脑端已升级至 7.8.2 并完成首次扫码登录;若使用自建节点,检查 SavedMsgSync 权限是否设为 Allow,Pro 计划是否过期。

同步后媒体文件打不开?

通常是索引未写完就强制关机导致。进入设置→高级→重建索引,等待进度 100% 后再试;若仍失败,删除 *.bak 后重新拉取缺失段落。

能否只同步文本不同步图片?

7.8.2 暂不提供官方粒度拆分。经验性观察:可在手机端先把媒体文件清理至 2 GB 以下再同步,减少耗时;或等待 7.9 版“增量媒体去重”功能。

自建节点如何查看同步日志?

登录节点后台,进入 Logs→Client API,过滤 SavedMsgSync,可看到 403/408 等错误码及对应设备 ID,方便快速定位权限或网络问题。

风险与边界

“混合索引”依赖客户端主动向外网节点请求 30 天摘要,若所在环境对出站 DNS 有严格审计,可能被误判为异常外联;>10 GB 大文件场景下,旧款双核笔记本易因持续哈希计算导致过热;多人共用电脑时,keystore 残留会让后续用户有机会直接读取保存记录。以上三种情况建议改用离线迁移或等待 7.9 分卷同步。

收尾:结论与版本预期

截至 2026 年 3 月,Letstalk IM 在 7.8.2 版给出的“混合索引”同步已能覆盖 90% 用户的跨设备需求,只要注意自建节点的权限开关与磁盘空间,就能在 3 分钟内完成万级消息的无损迁移。官方路线图显示,7.9 版将引入“增量媒体去重”与“自动季度归档”,届时保存记录可先压缩为 ZIP256 格式再同步,预计节省 25–30% 带宽。如果你此刻就需要迁移,不妨按本文步骤先行落地;若媒体体积超大且合规要求严苛,等待 7.9 或继续采用离线迁移会是更稳妥的选择。