合迹 · 隐私政策
版本:v2.0 | 生效日期:2026 年 11 月 13 日 | 适用范围:合迹(Android 应用,包名 top.tooyang.everymark)及其官方站点 heji.wang
本政策由运营方「嘉兴市秀洲区王江泾镇合乐养生馆(个体工商户)」运营。
统一社会信用代码:92330411MAKCNXUY9Bv2.0 变更说明(2026-11-13 · 网站 ICP 备案已通过、站点已对外开放):
① 官方站点 heji.wang 已完成 ICP 备案并对外开放 —— 备案号 浙ICP备2026096607号(2026-11-13 取得);
本版把政策里此前「ICP 备案通过后开放」「在此之前该域名会被云侧『未备案不得对外提供服务』拦截」
那两句过期事实按现状改掉 —— 站点现已公网可达(HTTP 200 · HTTPS 真签证书)。
② 站点页脚展示 ICP 备案号(并链工信部备案系统https://beian.miit.gov.cn/)—— 备案办法要求在主页底部标明备案编号。
③ 公安联网备案与 APP 备案尚未取得 —— 本版据实写「办理中」,不写任何编造的编号。
④ 其余条款一个字未改 —— 收集范围、出网路径(仍为十条)、权限表、出境提示、权利行使各节实体口径全部保持原样;
本版不改变任何个人信息处理行为,只是把「站点还没备案/还没开放」的旧事实换成现状。
⚠ 本版会让老用户重新看到一次首启同意页(政策正文变更按项目规则必须升版并重新征得同意 · 见docs/PLAN.mdD310)。
核证:docs/compliance/filing-info.json(icp_number/icp_status=已备案)· 2026-11-13 公网实测(https://heji.wang/200 ·/privacy.html200 ·/terms.html200 · HTTPS 证书有效)。v1.9 变更说明(2026-11-10 · 按现行代码纠正分类与语义模型下载口径):
① 分类链路纠正为「本机规则优先 → 规则不能确定时才调用你自己配置的外部大模型」;
本地语义模型不再参与分类决策,只用于重复检测与相似记录。此前版本写的「外部大模型优先、语义模型兜底」已不符合现行代码。
② 语义模型下载触发方式纠正:你在首启页同意隐私政策后,App 启动时会在后台幂等下载语义模型;
已经安装就跳过,不重复下载;也可以在设置里手动重试。下载内容只有模型文件,不含任何记录。
③ 出网路径仍是十条,不新增厂商、不扩大信息种类;本版只让第 3、5 条及相关交叉引用与现行实现一致。
④ 本版会让老用户重新看到一次首启同意页(政策正文变更按项目规则必须升版并重新征得同意)。
核证:lib/core/ai/auto_classifier.dart(规则先行、外部大模型保底)·lib/main.dart(同意后启动幂等下载)·lib/features/settings/semantic_service.dart(已安装直接返回)。v1.8 变更说明(2026-11-05 · OCR 文字交给大模型解读):
① 第六节新增第 10 条出网路径 —— 「OCR 文字 → 外部大模型解读」;
全部出网路径由九条改为十条(第六节标题、第二节与第六节里的交叉引用一并改过)。
② ⚠ 这一条发的是什么 —— 照片上 OCR 认出来的文字(主体部分 —— 不含被判为背景噪音的字);
照片本身不发(照片那一路是第 8 条)、不发记录正文、不发别的记录。
③ ⚠ 什么时候才发 —— 四个条件同时满足才会发:
① 你自己配了外部大模型并填了 Key;
② 设置里「OCR 文字解读 · 走云端大模型」开着(默认开);
③ 这条记录的附件是图片 / PDF;
④ 该附件的 OCR 主体文字 ≥ 40 字(文字太少没有可解读的结构就不发)。
任意一条不满足 → 一段文字都不发(已经解读过的附件不重复发);没配外部大模型时这条链根本不存在(一次请求都不发)。
④ 发给谁 —— 你自己填的那家端点(与第六节第 5 条「记录分类 → 外部大模型」同一处端点,不新增厂商)。
⑤ 一条记录最多 3 个附件(与第六节第 8 条「图片内容识别」同上限)。
⑥ 拿回什么 —— 一段结构化解读(文档类型 / 报告日期(带原文证据)/ 一句话结论 / 关键项),
存在本机、不写进记录正文、不上传别的记录。
⑦ 不用于任何模型训练(与全文口径一致)。
⑧ 开关在哪 —— 设置 → 模型 → 「OCR 文字解读 · 走云端大模型」(默认开;
关掉 = 一段 OCR 文字都不发)。
⑨ ⚠ OCR 文字也会出境 —— 你若用的是境外 7 家里的任何一家,照片上认出来的字也会随之出境
(与正文、录音同一条提醒 —— 见第八节)。
⑩ 其余条款未删改 —— 只按本版新增的这一条出网路径,在第三节(收集口径)、
第五节(用途)、第八节(出境提示)、第十节(撤回同意)、第十一节(安全口径)
做了对应补充;其余条款一个字未删改。
(下文 v1.6 / v1.7 变更说明里出现的「九条」是那两版当时的口径 —— 本版起为十条。)
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
核证日期:2026-11-05(代码:lib/core/ai/ocr_reading.dart·lib/features/settings/app_settings.dart)。v1.7 变更说明(2026-11-05 · 品牌与包名更新):
品牌与包名更新:对外名 Everymark(中文版保留「合迹」)、Android 包名top.tooyang.everymark、本地路径everymark.db/everymark/blobs/。
① 对外品牌名:英文语境一律叫 Everymark;中文语境继续叫「合迹」(中文名不变)。
② Android 包名:更新为top.tooyang.everymark(2026-11-05 起;旧包名同时停用 ——
变更记录见docs/PLAN.mdD409)。
③ 本地路径:本机 SQLite 库heji.db→everymark.db;附件目录heji/blobs/→everymark/blobs/。
④ 其余条款一个字未改 —— 第六节九条出网路径、第七节权限表、第三节敏感域与敏感个人信息说明、第八节出境路径
等实体口径全部保持原样,本次只改名字 / 包名 / 路径。
④′ 附:两处过期事实按代码现状订正(不改变任何权利义务,只是把「已经不存在的功能名」改成现在真实的那个):
① 「整理台」→ 记录页的「待整理」筛选 —— 「整理台」页面已按 D324 退场(lib/features/tidy/目录已不存在),
留在政策里会指向一个用户找不到的功能;行为口径一个字没变(对已存在的未归类记录只给候选、不调模型、不发任何请求)。
② 采集路数在第一节按lib/core/capture/capture_contract.dart:31-37的枚举六项写为六路(计时一路已按 D252 删除)。
⑤ 官方站点 heji.wang 不变(域名与备案流程不变)。
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
⚠ 包名变更 = 视为新 App(备案 / 商店 / 更新链路重来,老用户数据不迁移 —— 见docs/PLAN.mdD409)。
核证日期:2026-11-05(v1.6 变更说明原文保留在下方,作为版本历史)。v1.6 变更说明(2026-11-03 · bot 退役 + 图片内容识别改走大模型):
① 第六节第 8 条换了内容 —— 原第 8 条「跟「合迹」bot 说话」(v1.3 新增)随 bot 退役删除
(App 内的 bot 会话界面与客户端代码已删);第 8 条改为「图片内容识别 → 外部大模型」。
② 图片内容识别怎么发生:只有四个条件同时满足才会发 —— 你配置了外部大模型并填了 Key、
设置里的「图片内容识别」开着(默认开)、这条记录正文信息很少、图不是小票/截图这类文字型图片。
满足时,提交那一刻最多发 3 张照片 + 你写的那几个字给你填的端点,换回一句内容描述,
跟附件一起存在设备上(不写进正文、不上传其他记录)。
③ 关掉开关 = 一张图都不发(设置 → 模型 → 图片内容识别);没配外部大模型时这个功能根本不存在 —— 一次请求都不发。
④ 出网路径仍是九条(第 8 条换了内容,没有净增)。
⑤ 图片识别结果不参与「地点」抽取 —— 那是模型生成的话,不是图上原样写着的字;地点抽取仍只用正文与 OCR 文字。
其余条款未删改(v1.3 变更说明原文保留在上方,作为版本历史)。
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
核证日期:2026-11-03(代码:lib/core/ai/image_recognition_rules.dart·lib/core/ai/provider_client.dart·lib/core/ai/image_content_recognizer.dart)。v1.5 变更说明(2026-11-02 · 新增「坐标 → 地名的逆地理编码」· 位置信息第 ② 层 · 第六节新增一条出网路径):
① 第六节「出网路径」由八条改为九条 —— 新增第 9 条「坐标 → 地名的逆地理编码」
(主人 2026-11-02 追加原话:「位置不坐标,是地图上的位置,比如哪个商场哪个小区」)。
② ⚠ 这一条要联网 —— 拿到坐标后把它交给地理编码服务,换成一个地点名(「XX商场」「XX小区」),
显示在这条记录时间后面。两条路:手机系统自带的地理编码(AndroidGeocoder· 零配置 · 默认开启 · 不需要任何账号或 key)
或 你自己在设置里填了高德 Web 服务 key 的那条(不填 key 就只有系统那一路)。
③ ⚠ 发出去的只有坐标 —— 不发正文、不发附件、不发任何记录内容;
只在主人提交一条记录的那一瞬间发一次,不做后台持续上报。
④ ⚠ 总开关 —— 设置里有一个「把坐标换成地名」开关(默认开);
关掉就完全不发任何反查请求,界面上只显示经纬度。
⑤ ⚠ 高德那枚 key —— 只存本机钥匙串、不进同步目录(D31 口径);反查只发坐标,不发正文。
⑥ ⚠ v1.4 的两句口径本版起不再成立:v1.4 写的「坐标不出设备,也不做反向地理编码」
与「不把坐标发给地理编码 API 去换地名」—— 本版起坐标可能被交给地理编码服务(见第六节第 9 条)。
其余条款未删改(v1.4 变更说明里的原文保留在上方,作为版本历史)。
⑦ 「我们不收集」那一栏没有新增条目 —— 位置从来就不是「不收集」,它一直是可选采集;
变的是「坐标会不会出去」这句话(见第三节与第六节第 9 条)。
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
核证日期:2026-11-02(⚠ 该能力尚未做真机验收;实现侧代码由并行会话落地,见第十节「待补」)。v1.4 变更说明(2026-11-02 · 新增「位置信息」这一类信息 · 授权可选):
① 新增「位置信息」 —— 每条记录可以带一个可读地点(从记录正文与照片 OCR 识别文字里抽出来的),
抽不到时带上最近的坐标(纬度 / 经度 · 用的是最近 5 分钟内的那次定位)。两层都拿不到就不带(不编造假位置)。
② ⚠ 定位权限是「可选」的 —— 只有你主动授权之后才会取坐标;不授权,应用照常工作
(只是少了坐标那一层;从正文里抽出来的可读地点仍然有)。
③ ⚠ 什么时候问你要这个权限 —— 采集面板打开时才申请,不是首启
(首启就弹权限框是商店审核最反感的做法,与通知权限POST_NOTIFICATIONS同一原则);只问一次(你拒了不再反复弹)。
④ ⚠ 坐标不出设备,也不做反向地理编码 —— 坐标只落在本机 SQLite 与你自己选的同步目录;
合迹不把坐标发给任何第三方定位服务,也不把坐标发给地理编码 API 去换地名
(离线反查地名必须联网 → 违背本 App「数据不出设备」的底线)→ 所以界面上显示的是坐标本身,不是地名。
每条记录只有一个坐标点,不记录你的移动轨迹。
(⚠ 本条已被 v1.5 取代 —— v1.5 起坐标会被交给地理编码服务换地点名,见 v1.5 变更说明 ②③⑥ 与第六节第 9 条。)
⑤ 新增两条自声明权限:ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION
→ 自声明权限由 5 条变为 7 条(+ 2 条传递引入,共 9 行)。⚠ 清单实测待核:实现落地后需重跑 release 合并清单核验。
⑥ 第三节「关于『地点』」与「我们不收集」两处原口径已更正(原文写「不采集任何位置信息 · 没有定位权限」——
本版起不再成立)—— 其余条款未删改。
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
核证日期:2026-11-02(代码事实逐条file:line见第九、十节;⚠ 位置能力尚未做真机验收,见第十节「待补」)。v1.3 变更说明(2026-11-01 · D360 · 新增一条出网路径):
① 第六节「出网路径」由七条改为八条 —— 新增第 8 条「跟「合迹」bot 说话」(App 内建 DSH 原生客户端 · 主人 2026-11-01 拍板)。
② ⚠ 这一条含你输入的正文 —— 与第 5 条(外部大模型分类)同类:
但目标是你自己指定的那台 DSH 主机(默认局域网192.168.1.99:3090),不是公网第三方。
③ ⚠ 那枚凭据的暴露面要说清 —— 它能读写你的整个 DSH 工作台、调用工具、用你的模型额度
→ 所以它只存本机钥匙串、30 天过期、换主机必须重登;合迹不保存你的 DSH 口令。v1.2 变更说明(2026-10-30 · D318 · 口径变更):
① 分类口径变了 —— 主人 2026-10-30 原话:「使用了外部大模型是否可以把大模型能做的都归大模型做,
没使用外部大模型时才使用语义模型分类。大模型或语义模型不是用于未归类记录的语义归类,
而是用于记录的语义归类(记录提交时就触发大模型或语义模型进行归类)」。
→ 分类的第一顺位改成「你自己配的外部大模型」:配了供应商并填了 Key,记录提交那一刻,
那一条正文会发给你自己填的端点做分类;没配就全程在本机(本地语义模型 → 纯本地规则兜底),文本不出设备。
③ 第六节「出网路径」由七条改为八条(新增第 8 条「跟合迹 bot 说话」· D360 · 2026-11-01);
② 第六节「出网路径」由六条改为七条(新增第 5 条「记录分类 → 外部大模型」· D318 · 2026-10-30);
③ 删掉第六节里那两句绝对承诺(关于「文字正文绝不会上传给大模型」与「分类去重标签推荐全在本机」)——
在新口径下这两句是假话(配了外部大模型时,那一条正文就是会为了分类发出去);
④ 第八节补入第四种出境路径(用境外供应商做分类 → 文字正文出境);
⑤ 第三节「分类与标签」一行补入外部大模型这一来源;第十一节「默认配置下不出网」的例外由两条改为三条。
⚠ 本版会让老用户重新看到一次首启同意页(政策版本号变了 —— 见docs/PLAN.mdD310)。
核证日期:2026-10-30(代码事实逐条file:line见文末)。v1.1 变更说明(2026-10-29,对照代码实测):
① 第六节「出网路径」由四条改为六条——补入自动更新检查与 ML Kit SDK 诊断用量遥测两条(见第六节第 5、6 条);
② 第三节补入首次启动的同意流程;
③ 第九节权限表按 release 合并清单实测重写(5 条自声明),补入REQUEST_INSTALL_PACKAGES;
④ 第八节补齐三条出境路径(同步目标可出境 / 本地模型预设可改为远程地址 / 自动更新检查经 Cloudflare 节点);
⑤ 第三节「无法收集证件号」与「OCR 原样提取文字」的自相矛盾已改写;第六、十一节的「AES256」「默认无网」措辞按实现更正。
核证日期:2026-10-29(代码事实逐条file:line见文末)。
一、我们是谁
| 项 | 内容 |
|---|---|
| 运营者 | 嘉兴市秀洲区王江泾镇合乐养生馆(个体工商户) |
| 统一社会信用代码 | 92330411MAKCNXUY9B |
| 负责人 | 曹旅 |
| 联系方式 | 电话 189****8149;邮箱 yfxd**s@gmail.com |
| 官方站点 | https://heji.wang(已备案并对外开放) |
| 网站 ICP 备案 | 浙ICP备2026096607号(2026-11-13 取得)· 工信部备案系统查询 |
| 公安联网备案 | 办理中(尚未取得备案号)· 公安备案平台 |
| APP 备案 | 办理中(尚未取得备案号) |
二、一句话总结
合迹是一个本地优先的记录应用:你的记录、附件、分类和语义向量都存在你自己的手机里,默认设置下不会自动上传你的记录到任何服务器。
我们不要求你注册或登录,没有广告,没有第三方统计,没有崩溃上报,不把你的内容用于任何模型训练。
⚠ 有一件事必须说在前面(别被「默认不上传」骗了):合迹出厂包里有与你的记录无关、但确实会出网的路径 —— 自动更新检查(每小时最多一次,只取一个静态版本清单,服务端会看到你的 IP 与请求时间)、Google ML Kit SDK 自己的诊断用量遥测(不含你的记录内容,也不含你的输入,应用不提供开关),以及首启同意后的语义模型下载(只下载模型文件;已安装就跳过)。全部十条出网路径见第六节。
⚠ 还有一条要看你的设置:分类在记录提交那一刻先跑本机规则;规则不能确定时,才把你配置的外部大模型作为保底(配了供应商并填了 Key 才会用)。所以并不是每条记录都会出网分类;只有本机规则定不下来、且你已配置外部大模型时,那一条正文才会发给你填的端点(见第六节第 5 条)。
⚠ 还有一条跟位置有关(v1.5 新增 · 默认开着):你授权定位之后,提交记录的那一刻,合迹会把坐标(只有坐标,不发正文、不发附件)交给地理编码服务,换成一个地点名(「XX商场」「XX小区」)显示在时间后面。手机系统自带的那条地理编码默认开着(零配置、不需要任何账号或 key);设置里的「把坐标换成地名」可以关掉,关掉就一个反查请求都不发,界面上只显示经纬度。详见第六节第 9 条。
⚠ v1.6 新增一条跟照片有关(默认开、可关):配了外部大模型后,正文很少的记录会把最多 3 张照片发给你填的端点做「图片内容识别」(换回一句内容描述,跟附件一起存在设备上);图不是小票/截图这类文字型图片才会发。设置里关掉就一张图都不发;没配外部大模型时这个功能根本不存在。详见第六节第 8 条。
⚠ v1.8 新增一条跟照片上的「字」有关(默认开、可关):配了外部大模型后,照片上 OCR 认出 40 字以上文字的附件,会把认出来的文字发给你填的端点做「OCR 文字解读」(换回一段结构化解读:文档类型 / 报告日期(带原文证据)/ 一句话结论 / 关键项,存在本机、不写进正文);照片本身不发。设置里关掉就一段文字都不发;没配外部大模型时这条链根本不存在。详见第六节第 10 条。
三、我们收集哪些信息、来自哪里
首次启动时,我们会先问你一件事
合迹第一次打开时,唯一看到的界面是一页《隐私政策》摘要(可点开阅读全文),底部两个平级动作:「同意并开始」 / 「不同意」。
- 没有预勾的复选框(审核要的是「明确的同意动作」,预勾的框等于假同意)。不点「同意并开始」就进不了主界面。
- 在你同意之前,合迹不发起任何由应用侧触发的网络请求 —— 这一页只读本机内置的政策快照;主界面在同意之前根本不会被创建(所以自动更新检查也还没跑过)。同步与语音转写要你自行配置;语义模型只会在你同意之后,随 App 启动在后台幂等下载,已安装就跳过。
- ⚠️ 唯一的例外是 Google ML Kit SDK 自身的诊断用量遥测(由 SDK 发起,应用不提供开关,不含你的记录内容、也不含你的输入)—— 详见第六节第 6 条与第七节。
- 点「不同意」不会被锁死:你留在这一页,底部换成「退出应用」,由你决定何时离开。
- 政策版本变了会重新问你一次(同意记录里带政策版本号)。
- 你可以随时在「设置 → 关于与合规 → 隐私政策」重读本政策。
核证状态:首启同意页的代码已落地(
lib/features/onboarding/:同意闸门 + 同意页 + 同意记录存储),但尚未与本文一同做真机验收;本文只描述形态与触发条件,不宣称已验收通过。
我们在本机记录什么
应用在你主动使用功能时,会在你自己的设备上记录以下内容:
| 类别 | 具体内容 | 来源 |
|---|---|---|
| 你输入的文字 | 笔记原文(一字不改地保存) | 你手动输入 |
| 图像与音视频 | 拍摄或选取的照片、视频、任意文件、录音(原始文件字节) | 你主动采集 |
| 机器提取的文本 | 照片里的文字(本机离线 OCR)、录音的转写文本 | 本机 OCR / 你配置的云端转写;⚠ 离线 OCR 的文字现在也可能被发给你自己填的端点做解读(第六节第 10 条) |
| 位置信息(可选) | 可读地点(从正文与照片 OCR 文字里抽出的店名 / 路名等);坐标(纬度 / 经度)—— 只有抽不到可读地点时才取;地点名(「XX商场」「XX小区」)—— 由坐标经逆地理编码解析得到 | ① 本机正则抽取(正文 / OCR 文字)② 你授权后由系统定位取得(仅真机)③ 坐标 → 地点名:系统自带的地理编码服务或你自己配的高德 Web 服务(这一步要联网,见第六节第 9 条) |
| 派生指标 | 金额、时长、录音振幅波形等由正文与附件在本机算出的指标 | 由本机正则与本地算法从上面内容算出 |
| 你手动建的实体 | 人 / 物 / 地点 / 组织的名称 | 你在详情页手动输入 |
| 语义向量 | 由记录正文在本机算出的 512 维向量 | 本机推理(ONNX Runtime) |
| 分类与标签 | 分类名、标签名、分类版本 | 你整理或应用预置种子;自动分类先由本机规则判断,规则不能确定时才由你配置的外部大模型端点兜底;本地语义模型不参与分类决策 |
| 设备与时间 | 本机随机编号(下称「设备标识」)、创建时间、发生时间、到期时间 | 设备本地生成 |
关于「设备标识」:它是合迹首次运行时在本机生成的一串随机编号(存于 App 私有目录的
meta表),唯一用途是区分同步分片的写入者(多台设备写同一个同步目录时用来判断同一行是谁写的)。
它不是 IMEI、不是 Android ID、不是广告 ID —— 合迹不读取任何系统设备标识。
依据:lib/core/record_repository.dart:42-65(生成与读取)、:289-293(合并时按device_id判定写入者)。关于「地点」(2026-11-02 起口径已变 · 原「不采集任何位置信息」的表述本版起不再成立):
合迹现在可以有位置信息,但只在你授权之后。两层来源,先抽后 GPS:
① 先抽 —— 从记录正文与照片 / 图片的 OCR 识别文字里抽出一个可读地点(已有本机正则抽取器lib/core/ai/text_extract.dart:234的extractPlaceHint,认「XX店 / XX公司 / XX市 / XX区 / XX路 / XX街 / XX广场 / XX中心」等)—— 这一层不需要任何权限,纯本机;
② 抽不到才用 GPS —— 真机采集时取最近的坐标(纬度 / 经度;用的是最近 5 分钟内的那一次定位),需要你授权定位权限。
两层都拿不到 → 这条记录就不带位置(不编造假位置:不用 IP 定位、不拿上次的坐标顶替)。
⚠ 坐标 → 地点名(逆地理编码 · v1.5 新增 · 第 ② 层) —— 有了坐标之后,合迹可以把它交给地理编码服务,
换成一个地点名(「XX商场」「XX小区」),显示在这条记录的时间后面。
⚠ 这一步要联网:只发坐标(不发正文、不发附件、不发任何记录内容),
交给手机系统自带的地理编码服务(零配置 · 默认开启 · 不需要任何账号或 key)
或你自己在设置里填了高德 Web 服务 key 的那条(不填 key 就只有系统那一路);
只在提交记录的那一刻发一次,不做后台持续上报。
设置里的「把坐标换成地名」开关默认开着 —— 关掉就完全不发任何反查请求,界面上只显示经纬度。
⚠ 反查失败就还是显示坐标(不编假地点)。
每条记录只有一个坐标点 —— 合迹不记录你的移动轨迹(授权后 App 会保持一个定位监听,只为拿到这个点;没有「你在哪」的列表)。
坐标只落在本机(SQLite 与你自己选的同步目录);⚠ 但坐标可能被交给地理编码服务(见上「坐标 → 地点名」与第六节第 9 条)——
不发正文、不做持续上报;你自己填的那枚高德 key 只存本机钥匙串、不进同步目录。
⚠ 网页预览版没有 GPS 那一层 —— 浏览器只在安全上下文(https 或 localhost)允许定位,而本预览页是明文局域网地址 → 浏览器直接拒绝 → 这一层只有真机 App 有(不是坏了)。
我们不收集:通讯录、通话记录、短信、蓝牙设备、IMEI / Android ID / 广告 ID 等系统设备标识、剪贴板内容。
位置信息不在这一栏 —— 它是可选采集(你授权才有,见上面的「关于『地点』」)。
⚠ 但位置不是「完全不出去」(v1.5 起口径):坐标可能被交给地理编码服务换一个地点名(只有坐标,见第六节第 9 条)——
我们(运营方)自己拿不到这些坐标(合迹没有服务器、没有账号、没有位置数据的副本)。
我们无法自动识别:照片里的人脸、车牌 —— 应用没有人脸识别、车牌识别能力。
但请注意(这里不绕弯子):离线 OCR 会把图片上的文字原样提取成文本,其中可能包含身份证号、银行卡号等身份与金融信息。应用不做这类信息的结构化识别,但原文会一字不改地进到记录里,与该条记录一起保存在你的设备上;一旦你启用云端转写或同步,这些文本会随对应内容一并离开设备;你配了外部大模型并开着「OCR 文字解读 · 走云端大模型」时,这些 OCR 文字也可能被发给你填的端点做解读(第六节第 10 条 —— 只发文字、不发照片)。
四、这些信息存在哪、保存多久
| 位置 | 内容 | 保存期限 |
|---|---|---|
| 手机应用私有目录 | SQLite 库 everymark.db、附件 everymark/blobs/<sha2>/<sha256>(内容寻址,两级分桶)、本地语义模型、向量 |
直到你自己删除记录、卸载应用,或重置手机。我们没有这些数据的副本 |
| 系统钥匙串(Keystore 加密) | 各家模型服务商的 API Key、WebDAV 用户名与密码、S3 Secret Key | 随应用卸载清除 |
| 你自己选的同步目标 | 见第六节 | 由你选择的存储服务商按其规则决定 |
| 官方站点 heji.wang | 仅公开静态页面(已备案并对外开放;ICP 备案号 浙ICP备2026096607号) | 不记录任何个人信息,无 Cookie、无统计脚本 |
我们不建设服务器端账号体系,因此我们手上不存在你的记录数据——删除权在你,不在我们这里。
关于位置信息的存放:坐标、可读地点与解析出来的地点名是每条记录的一个字段,与这条记录存在同一处 —— 本机 SQLite 库 everymark.db,以及(如果你启用了同步)你自己选定的同步目标。
合迹没有为位置信息建任何服务器、没有第三方定位服务账号、没有缓存服务器(高德那枚 key 是你自己的账号,不是我们的)。
⚠ 但反查那一路在服务商那边留过副本:把坐标交给地理编码服务的那一刻,那家服务商会按它自己的规则处理这次请求
(合迹不控制、也无法查看他们留了什么)→ 这一条写在第六节第 9 条与第八节。
关于备份:应用已关闭 Android 系统备份与换机迁移(数据库、附件、偏好全部排除)。换手机时数据不会自动过去,需要你重新同步并重新填写 API Key。
五、我们怎么用这些信息
仅用于为你本人提供记录、分类、搜索、导出、同步这些功能,以及你主动配置的模型转写、外部大模型分类、图片内容识别(v1.6 新增)、OCR 文字解读(v1.8 新增 · 把照片上认出来的字读成结构化解读)与同步。
我们不做下列事情:不用于广告与画像营销;不用于任何模型训练或二次分发;不用于人工审阅;不出售、不交换。
六、什么时候会出网(全部出网路径,共十条)
这十条就是全部。 合迹没有后台推送、没有广告、没有统计、没有崩溃上报;除下面十条以外,应用不发起任何网络请求。
核证日期 2026-11-03(依据:docs/compliance/PLAY-DATA-SAFETY.md附录 A「出网路径总表(按代码)」)。⚠ v1.8 新增了第 10 条(2026-11-05):出网路径由九条改为十条 —— 新增「OCR 文字 → 外部大模型解读」。
(下文 v1.6 那段说明里写的「仍是九条」指的是 v1.6 当时的口径。)⚠ v1.6 改了第 8 条(2026-11-03):原来的「跟「合迹」bot 说话」随 bot 退役删除(App 内的会话界面与客户端代码已删);
第 8 条换成「图片内容识别 → 外部大模型」—— 那时候条数没变(仍是九条)。⚠ 位置信息新增了一条出网路径(v1.5 · 2026-11-02 改):取坐标这一步仍然只是本机调用系统定位,不出网;
但「坐标 → 地名」这一步要联网 —— 坐标会被交给地理编码服务换成一个地点名(见下面第 9 条)。
v1.4 写的「坐标不出设备,也不做反向地理编码」「不把坐标发给地理编码 API 去换地名」本版起不再成立。
(坐标若随记录同步走同步目标,那仍属于第 2 条「手动同步」这条既有路径 —— 目标由你指定,开发者不接收。)
| # | 场景 | 发到哪里 | 发什么 | 触发方式 |
|---|---|---|---|---|
| 1 | 云端语音转写 | 你在设置里配置的模型服务商(18 家预设里只有 4 家真支持语音转写:OpenAI、SiliconFlow、智谱 GLM、MiniMax;或你自填的私有部署) | 整段录音字节(WAV 16kHz 单声道) | ⚠️ 配了供应商之后,录完音会自动发起(唯一「配好就会自动发生」的上传);⚠️ 只发一家(按你的配置顺序取第一家支持转写的服务商;失败就如实说失败,不会接着往下一家发) |
| 2 | 手动同步 | 你自己填的目标:系统目录授权(SAF,这一路是纯本地写入,不出网)、WebDAV 服务器、或 S3 兼容对象存储 | 记录 NDJSON(含原话、OCR 与转写文本)、附件原件、分类表、设备清单(含本机随机编号与条数) | 你点「立即同步」;不自动跑,没有后台任务 |
| 3 | 下载本地语义模型 | hf-mirror.com(模型文件托管站) |
仅模型文件,不含你的任何数据 | 你在首启页同意隐私政策后,App 启动时在后台幂等下载(已安装就跳过,不重复下载);也可以在设置里手动重试。首启同意之前不会发起这个请求 |
| 4 | 模型服务连通性测试 | 你配置的模型服务商 | 请求内容固定为 ping(8 个 token 上限) |
你在设置页点「测试」 |
| 5 | 记录分类 → 外部大模型(D318 · 2026-10-30 新增) | 你自己配置并填了 Key 的那家供应商的端点(域名随你所填的供应商变化:18 家预设里的任意一家,或你自填的私有部署 / 本地 Ollama / LM Studio) | 那一条记录的正文(提交那一刻用来归类的那段文字;含附件 OCR 识别出的文字)—— 不含附件原件、不含录音 | 先跑本机规则;规则不能确定、且你已配置外部大模型并填了 Key 时,才在提交那一刻自动发起(不是后台任务,也不是你手动点)。规则能确定就不发。本地语义模型不参与分类决策,只用于重复检测与相似记录。没配外部大模型时,规则不能确定就留作未分类,正文不出设备。⚠️ 「待整理」筛选不会调模型 —— 它对已存在的未归类记录只给候选,不发任何请求 |
| 6 | 自动更新检查 | 发版时注入的版本清单地址(构建参数 --dart-define=EVERYMARK_UPDATE_URL=…;出厂包指向 https://heji.tooyang.top/update.json) |
只有一个静态 JSON 版本清单(版本号 + 下载地址 + 校验值)——不带任何记录内容 | 冷启动后自动检查,每小时最多一次(lib/features/home/home_page.dart 的 _update.autoCheck();频控常量 kUpdateAutoCheckInterval,lib/core/update/update_config.dart)。⚠️ 服务端会看到你的 IP 地址与请求时间(任何一次 HTTPS 请求都会)。清单地址没有配时它什么都不做 —— 不发请求、也不报错 |
| 7 | Google ML Kit(文字识别 SDK)的诊断用量遥测 | Google 的诊断服务端点(端点地址在 SDK 内部,合迹不控制、也无法关闭) | API 用量与性能指标、设备与应用信息、标识符、事件类型、错误码 —— 不含你的记录内容,也不含你的输入 | ⚠️ 由 SDK 自身发起,合迹不提供任何开关(官方未提供关闭开关)。release 包内含 com.google.android.datatransport 组件(实测:合并清单含 JobInfoSchedulerService / AlarmManagerSchedulerBroadcastReceiver,release dex 含 CctBackendFactory) |
| 8 | 图片内容识别 → 外部大模型(v1.6 · 2026-11-03 新增;取代原先的 bot 会话路径) | 你自己配置并填了 Key 的那家供应商的端点(与第 5 条同一家;域名随你所填的供应商变化:18 家预设里的任意一家,或你自填的私有部署 / 本地 Ollama / LM Studio) | 最多 3 张照片(PNG / JPEG / WebP,单张不超过约 4.5MB)与这条记录的少量正文(用来当语境)—— 不发其他记录、不发录音、不发文件;换回的是一句内容描述,跟附件一起存在设备上(不写进正文) | 你提交记录的那一刻自动发起(仅当:配了外部大模型 + 设置里「图片内容识别」开着(默认开)+ 正文信息很少 + 图不是小票/截图这类文字型图片);任意一条不满足 → 一张图都不发|⚠️ 照片会离开设备、发给你选的供应商;设置里的开关可以彻底停掉 |
| 9 | 坐标 → 地名的逆地理编码(v1.5 · 2026-11-02 新增) | 手机系统自带的地理编码服务(Android Geocoder · 零配置 · 默认开启 · 不需要任何账号或 key)或 你自己在设置里填了高德 Web 服务 key 的高德 Web 服务(不填 key 就只有系统那一路) |
只有坐标(纬度 / 经度)—— 不发正文、不发附件、不发任何记录内容;拿回来的是一个地点名(如「XX商场」「XX小区」),只用于在这条记录的时间后面显示 | 你授权定位(Android 权限)且设置里的「把坐标换成地名」开着(默认开)→ 只在你提交一条记录的那一瞬间发一次;不做后台持续上报。⚠ 关掉那个开关 = 完全不发任何反查请求,界面上只显示经纬度。⚠ 反查失败就还是显示坐标(不编假地点)。⚠ 你自己填的高德 key 只存本机钥匙串、不进同步目录 |
| 10 | OCR 文字 → 外部大模型解读(v1.8 · 2026-11-05 新增) | 你自己配置并填了 Key 的那家供应商的端点(与第 5 条、第 8 条同一家;域名随你所填的供应商变化:18 家预设里的任意一家,或你自填的私有部署 / 本地 Ollama / LM Studio)—— 不新增厂商 | 照片上 OCR 认出来的文字(主体部分 —— 不含被判为背景噪音的字;最长 4000 字,超了只发开头并如实告诉模型)—— 不发照片本身(照片那一路是第 8 条)、不发记录正文、不发别的记录;拿回来的是一段结构化解读(文档类型 / 报告日期(带原文证据)/ 一句话结论 / 关键项),存在本机、不写进记录正文 | 你提交记录的那一刻自动发起(仅当:配了外部大模型并填了 Key 且 设置里「OCR 文字解读 · 走云端大模型」开着(默认开)且 这条记录的附件是图片 / PDF 且 该附件的 OCR 主体文字 ≥ 40 字);一条记录最多 3 个附件(与第 8 条同上限);任意一条不满足 → 一段文字都不发|⚠ 照片上的字会离开设备、发给你选的供应商;设置里的开关可以彻底停掉;不用于任何模型训练 |
⚠ 第 10 条发的是「照片上的字」,不是「照片」 —— 它发的是离线 OCR 认出来的文字(主体部分),
照片本身不发(照片那一路是第 8 条);也不发记录正文、不发别的记录。
关掉设置里的「OCR 文字解读 · 走云端大模型」= 一段文字都不发;
没配外部大模型时这一条根本不存在 —— 一次请求都不发。
拿回来的解读只存在本机(不写进记录正文),不用于任何模型训练。⚠ 第 10 条与第 8 条不一样:第 8 条发的是照片本身,第 10 条发的是照片上认出来的文字 ——
也就是说图不出网,但图上的字可能出网(取决于你的端点配置与那个开关)。⚠ 第 9 条与第 1、5 条不一样:它不含你的记录正文(只有坐标),但它默认开着 —— 手机系统自带的那条地理编码零配置、不需要任何账号或 key。
你可以在设置里关掉「把坐标换成地名」,关掉就一个反查请求都不发;你自己配的高德那条要你填了 key 才有。
关于「记录的文字正文会不会上传给大模型」—— 照实说:取决于你有没有配外部大模型。
配了并填了 Key,且本机规则不能确定 → 记录提交那一刻,那一条正文会发给你自己填的端点做分类(第六节第 5 条),分类结果回到你的设备;规则能确定就不发。
没配 → 分类全程由本机规则完成,不能确定就留作未分类,文字正文一次都不出设备;本地语义模型不参与分类决策。
去重与标签推荐仍然全部在本机完成。上传音频字节的只有第 1 条转写一路 —— 那不是「文字正文」,但它确实会把一段录音交给你指定的第三方。
关于「照片会不会上传给大模型」—— 同样照实说:取决于你的配置与设置。
配了外部大模型 + 设置里「图片内容识别」开着(默认开) + 这条记录正文信息很少 + 图不是小票/截图这类文字型图片
→ 提交那一刻,最多 3 张照片会发给你自己填的端点,换回一句内容描述(第六节第 8 条)。
任意一条不满足 → 一张照片都不发;没配外部大模型时这个功能根本不存在 —— 一次请求都不发。
识别结果只是附件的备注(跟附件一起存在设备上,不写进正文);它不参与「地点」抽取(地点只从正文与 OCR 文字里抽——那是图上原样写着的字)。
向量不同步:语义向量只留在你的设备上,同步时不会被推出去。
API Key 与密码永不同步:同步引擎只读写记录、附件、分类与清单四类文件,不读取钥匙串。
第 6 条与第 7 条的共同点:它们都不含你的记录内容;但它们确实会出网,且第 7 条不受应用开关控制。
所以本政策不再使用「默认无网」这种笼统说法 —— 精确口径见第十一节。
第 5 条不一样:它含你的记录正文,但只有你自己配了供应商才会发生,且目标是你自己填的端点。
七、第三方服务与 SDK 清单
应用内嵌的第三方组件,以及它们在本机还是远端:
| 组件 | 作用 | 在本机 / 远端 |
|---|---|---|
| Google ML Kit 中文文字识别(随安装包内置) | 照片离线 OCR | 识别过程完全在本机(模型内置,不需下载);⚠️ 但同一个 SDK 自带诊断遥测通道,会向 Google 发送 API 用量与性能指标(见第六节第 7 条)—— 合迹不读取也不使用这些指标,且未集成 Firebase Analytics / Crashlytics / 推送 / 广告 SDK |
| ONNX Runtime | 本机语义模型推理 | 本机 |
| Android 系统 SQLite(sqflite) | 本地数据库 | 本机 |
| flutter_secure_storage | 钥匙串加密存储(Android Keystore 加密的偏好存储,不是数据库加密) | 本机 |
| image_picker / file_picker / record / video_player / just_audio / share_plus / saf | 调用系统相机、相册、文件选择器、录音、播放、分享、目录授权 | 本机(系统组件) |
| webdav_client(dio) | 你选择 WebDAV 同步时的 HTTP 客户端 | 远端,仅在你启用 WebDAV 同步时 |
| http | 模型调用、模型下载、S3 同步、自动更新检查 | 远端,仅在你启用对应功能时(更新检查例外:出厂包已内置清单地址,冷启动自动触发,见第六节第 6 条) |
Android 系统地理编码(Geocoder · 系统 API,不是第三方 SDK) |
把坐标换成地点名(见第六节第 9 条) | 远端(把坐标交给系统的地理编码后端;不需要账号或 key;只在提交记录那一刻用一次;默认开启,可在设置里关) |
| 高德 Web 服务(你自己配的 key) | 逆地理编码(坐标 → 地点名) | 远端(仅当你填了高德 Web 服务 key 时才启用;只发坐标,不发正文) |
我们没有集成:广告 SDK、第三方统计/埋点 SDK、崩溃上报 SDK、推送 SDK、用户行为分析服务。
关于「我们没有集成」与「ML Kit 遥测」不矛盾:合迹没有主动集成任何埋点/统计/崩溃上报 SDK;ML Kit 的诊断遥测是那个 SDK 自带的,我们无法关闭,也不使用它收集到的任何指标。
模型服务商预设清单(共 18 家,你可以自行修改地址与模型名,也可以填自己的私有部署):
- 境内 9 家:DeepSeek、Kimi、智谱 GLM、阿里百炼、火山方舟、SiliconFlow、MiniMax、腾讯混元、百度千帆
- 境外 7 家:OpenAI、Anthropic、Gemini、Groq、OpenRouter、Mistral、xAI
- 本地 2 家:Ollama、LM Studio(预设地址是本机
localhost,默认不出网;你可以把地址改成远程地址 —— 改了之后就会出网,见第八节)
其中只有 4 家提供语音转写接口(2026-10-29 逐家实测 + 官方文档核出):OpenAI、SiliconFlow、智谱 GLM(OpenAI 兼容的 /audio/transcriptions)与 MiniMax(自有 /v1/speech_to_text)。其余 14 家没有这个接口 —— 应用会如实说不支持,不会把你的录音发出去碰运气。
八、个人信息出境提示(重要)
如果你选择境外 7 家里唯一支持语音转写的 OpenAI 做语音转写,你的录音内容将被传输至该服务商位于境外的服务器,构成《个人信息保护法》第三十九条所称的个人信息出境。(境外其余 6 家没有转写接口,不会收到你的录音。)
- 我们不会替你做这个选择,也不会把你的数据转发给任何服务商。
- 选择境外供应商并启用转写,等同于你以行为方式作出单独同意;请在知情后再启用。
- 若你身处中国大陆但希望完全避免出境,请用境内支持转写的 3 家(SiliconFlow、智谱 GLM、MiniMax)或本地 2 家。
- ⚠ 分类也会出境(D318 · 2026-10-30 新增):如果你选了境外供应商做分类,记录提交那一刻,那一条记录的正文会传到它的服务器 —— 这同样构成个人信息出境。境内 9 家做分类则不构成出境。
- ⚠ OCR 文字解读也会出境(D414 · 2026-11-05 新增):如果你选了境外供应商,照片上 OCR 认出来的文字(主体部分 —— 不含被判为背景噪音的字;照片本身不发)也会传到它的服务器 —— 这与正文、录音同一条提醒(见第六节第 10 条),同样构成个人信息出境。境内 9 家做解读则不构成出境;关掉设置里的「OCR 文字解读 · 走云端大模型」或没配外部大模型 → 就没有这一条。
- 我们不会将你的任何数据用于训练模型,也不会主动把你的记录、附件、向量或凭据送到境外 —— 但下面五条路径的目标由你决定或由默认配置给出,其中 S3 的默认 endpoint 本身就在境外(详见下表)。
除转写外,还有五条会出境的路(请一并知情)
⚠ 这五条不是「转写出境」那一类,但同样构成个人信息出境:它们的目标地址由你在应用里填写或由默认配置给出,合迹不替你判断它是不是境内。
| # | 出境路径 | 出的是什么 | 出境到什么程度 |
|---|---|---|---|
| ① | 同步目标可以填在境外 | 记录正文 + 附件原件 + OCR / 转写文本(同步包里的四类文件:记录 NDJSON、附件字节、分类表、清单)一起走 | ① WebDAV:你可以填任何地址,包括境外服务器;② S3 兼容对象存储:默认 endpoint 就是 https://s3.amazonaws.com —— AWS 在境外,也就是说不改任何设置、直接用默认 S3 目标就构成出境。想避免,请把 endpoint 换成境内对象存储(自建 MinIO / 阿里云 OSS / 腾讯云 COS 等) |
| ② | 「本地模型」预设可以被你改成远程地址 | 你选中的那条记录的文字正文(大模型请求体) | 预设里的 Ollama(http://localhost:11434/v1)与 LM Studio(http://localhost:1234/v1)默认指向本机、不出网;但地址在应用里可以改(lib/core/ai/provider_presets.dart)。改成远程地址 = 文字正文会发到那个地址,包括你的内网机器或境外服务器 |
| ③ | 自动更新检查经 Cloudflare 节点 | 不带记录内容,但每次检查你的 IP 地址与请求时间会到达境外的 CDN 节点 | 出厂包的版本清单地址是 https://heji.tooyang.top/update.json,该域名解析到 Cloudflare(实测 server: cloudflare、cf-ray: …-LHR,即境外边缘节点)。清单本身是公开的静态 JSON,不含你的任何数据;但「你的 IP 与请求时间到达境外节点」这一条仍然成立 |
| ④ | 用境外供应商做分类(D318 · 2026-10-30 新增) | 那一条记录的正文(提交那一刻用来归类的那段文字) | 先跑本机规则;规则不能确定、且你已配置境外供应商并填了 Key 时,才把正文传到它的境外服务器做保底分类,构成个人信息出境。规则能确定就不发。不配外部大模型就没有这一条 —— 规则不能确定就留作未分类,文本不出设备;本地语义模型不参与分类决策 |
| ⑤ | 用境外供应商解读 OCR 文字(D414 · 2026-11-05 新增) | 照片上 OCR 认出来的文字(主体部分 —— 不含被判为背景噪音的字;照片本身不发、不发记录正文) | 解读用的外部大模型与分类用的是同一家(你配了哪一家,解读就发给哪一家)。选境外 7 家里的任何一家 → 那些照片上的字传到它的境外服务器,构成个人信息出境。关掉设置里的「OCR 文字解读 · 走云端大模型」就没有这一条;不配外部大模型也没有这一条 —— OCR 全程在本机 |
一句话:合迹不会替你把数据送出境,但默认的 S3 endpoint 与更新检查的 Cloudflare 节点确实在境外 —— 属于第 ①③ 条的知情范围,请你在选同步目标时留意 endpoint。
第 ④⑤ 条由你自己决定:选境内供应商,或不配外部大模型(那就完全不出网)。⚠ 位置信息(2026-11-02 新增 · v1.5 改口径):坐标不发给任何第三方定位服务(不查「你在哪」、不记轨迹),
但「坐标 → 地名」这一步会把坐标交给地理编码服务(第六节第 9 条)—— 这一步是否构成出境,取决于那个服务的后端在哪:
① 你自己配的高德 Web 服务在境内 → 不构成出境;
② 系统自带的地理编码服务,它的后端由设备与系统决定(带 Google 服务的机器上通常由 Google 提供 → 境外;
国内多数不带 GMS 的机器上通常没有这个后端 → 这一路直接失败、回落成显示坐标)——
⚠ 具体依设备而定 = UNVERIFIED(本机未实测):如果在你的机器上它落到境外后端,坐标就构成位置信息出境,
需要单独同意并在本表补一条。我们不替你判断 —— 你可以在设置里关掉「把坐标换成地名」,那样就一个坐标都不发。
但如果你把同步目标设在境外,坐标也会随这条记录一起走上面第 ① 条那条既有路径 —— 那时它构成位置信息出境,责任在你选的存储服务所在地。
九、权限逐项说明
口径:以下是 release 合并清单实测的全部 5 条自声明权限(自声明 = 合迹自己在
AndroidManifest.xml里写的;传递引入的 2 条是第三方库带的,合迹不主动使用,也不向系统申请)。
核证日期 2026-10-29(build/app/intermediates/merged_manifests/release/processReleaseManifest/AndroidManifest.xml)。⚠ 2026-11-02 增补:本次新增两条自声明权限(定位,见下表最后一行)→ 自声明权限由 5 条变为 7 条(+ 2 条传递引入,共 9 行)。
⚠ 清单实测待核:上表的 5 条是 2026-10-29 的 release 合并清单实测值;定位两条尚未随本次实现重跑清单核验 → 落地后需重跑合并清单核对行数与声明位置。
| 权限 | 为什么需要 | 什么时候弹窗 / 触发 |
|---|---|---|
相机 CAMERA |
拍照记录 | 你点「拍照」时 |
麦克风 RECORD_AUDIO |
录音记录 | 你点「录音」时 |
联网 INTERNET |
你主动启用的云端转写 / 同步 / 模型下载;你配置的外部大模型做记录分类(D318)与做 OCR 文字解读(D414);以及出厂包内置的自动更新检查 | 同步、转写、模型下载:仅在你启用对应功能后;分类:你提交记录的那一刻(仅当你已配好供应商并填了 Key;没配就全程在本机);OCR 文字解读:同样在你提交记录的那一刻(同样需要你已配好供应商并填了 Key,且设置里的开关开着、该附件的 OCR 主体文字 ≥ 40 字);更新检查:冷启动后自动(每小时最多一次) |
通知 POST_NOTIFICATIONS |
只在应用内升级时用一条:装好新版本后发一条「新版本已安装,点这里打开」 | 你点「升级到 X」时(Android 13+ 需要你授权) |
安装包 REQUEST_INSTALL_PACKAGES |
仅用于应用内自升级:你点「升级到 X」时,由系统安装新版本(会话安装需要它) | 不弹窗(这是系统安装权限,Android 只在安装那一刻弹系统的确认框);不上传任何数据、不读取任何设备信息 |
定位 ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION(2026-11-02 新增 · 可选) |
两件事:① 当这条记录从正文与照片 OCR 文字里抽不出可读地点时,取采集当时的坐标(纬度 / 经度)补上;② 把这个坐标解析成地点名(「XX商场」「XX小区」)显示在时间后面 —— 这一步要联网(只发坐标,见第六节第 9 条;设置里的「把坐标换成地名」可以关掉,关掉就不发)。两条一起声明(系统只弹一次框,你可以选「精确」或「大致」)。不用它也照常记录 | 采集面板打开时申请 —— 不是首启(首启就弹权限框是商店审核最反感的做法,与上面 POST_NOTIFICATIONS 同一原则)。⚠ 不授权 = 应用照常工作,只是记录里少了坐标那一层(正文抽出来的可读地点仍然有);⚠ 授权了但把「把坐标换成地名」关掉 = 不发任何反查请求,界面上只显示经纬度 |
关于定位权限(如实告知,不藏着):
- 可选 —— 只有你主动授权后才会取坐标;不授权,应用照常工作(只是没有坐标那一层)。
- 什么时候问 —— 采集面板打开时申请,不是首启。
- ⚠ 坐标可能被交给地理编码服务(v1.5 起口径变了) —— 坐标只落在本机 SQLite 与你自己选的同步目录;
合迹不把坐标发给任何第三方定位服务(不查「你在哪」、不记轨迹),
但会把它交给地理编码服务换成一个地点名(「XX商场」「XX小区」)→ 只发坐标,
不发正文、不发附件、不发任何记录内容,只在提交记录那一刻发一次,不做后台持续上报(第六节第 9 条)。
设置里的「把坐标换成地名」开关(默认开)关掉 = 一个反查请求都不发,界面上只显示经纬度。
你自己填的那枚高德 key 只存本机钥匙串、不进同步目录;反查只发坐标,不发正文。
- 只取一个点,不记轨迹 —— 坐标来自系统定位:提交那一刻用的是最近 5 分钟内的那一次定位(系统会缓存「上次的位置」),不等定位(不卡住「完成」);若提交时 GPS 还在路上,定位到了会补到这条记录上(最多等 8 秒)。授权后 App 会保持一个定位监听(系统定位服务自带门槛:30 秒 / 50 米才更新一次),只是为了拿到这个位置点 —— 每条记录只有一个坐标,没有你的移动轨迹,也没有「你在哪」的列表。
- ✅ 权限申请点已核:采集面板打开时申请(lib/features/capture/capture_controller.dart:294-303,注释写明「D381:主人打开『记一笔』时才问定位权限 · 不是首启」),且只问一次(主人拒了不再反复弹,同文件:308)。数据层已落地(android/app/src/main/AndroidManifest.xml:43-44声明两条权限;lib/core/db.dart:103-105加place/lat/lng三列;lib/core/record_repository.dart:856的updateLocation写入方法)。关于
REQUEST_INSTALL_PACKAGES(如实告知,不藏着):这条权限只服务于「直接分发 APK」的场景 —— Google Play 明令禁止 App 自行下载安装更新(必须走 Play 的机制),国内五大商店同样限制「自更新」。
因此:如果你从应用商店安装,本权限实际不会被用到(合迹的商店渠道版本不靠自升级分发);只有当主人从直链下载 APK 安装时,「升级到 X」才会真正调用它。
依据:android/app/src/main/AndroidManifest.xml:20-24(清单内注释写明「走商店渠道上架时,这条权限要么去掉、要么在商店页说明里说清只服务于非商店分发」)+:29(声明行)。传递引入的 2 条(合迹不主动使用、不申请):
ACCESS_NETWORK_STATE(由androidx.media3播放栈带入)、top.tooyang.everymark.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION(由androidx.core带入的自签名级广播保护)。通知权限
POST_NOTIFICATIONS曾于 2026-10-26 移除(当时它是为尚未实现的「到期提醒」声明的,声明用不到的权限会被应用商店审核追问),于 2026-10-28 加回来(D271):更新检查与提醒装完之后,Android 10+ 的后台启动限制会拦掉「App 自己弹回前台」,只剩发一条通知这一条路——没有它,装完新版本就找不回来了。这条通知只说一件事:新版本已安装,点一下就能打开;你点「升级到 X」时才会申请这个权限。相册权限
READ_MEDIA_IMAGES/READ_MEDIA_VIDEO已于 2026-10-26 从安装包中移除 —— 从相册选照片或视频走系统选择器按件授权(系统照片选择器),App 全程不读取你的相册目录、也不申请任何存储权限;声明用不到的权限同样会被商店审核追问。当前 release 合并清单里已不含这两条。
我们不申请通讯录、电话状态、蓝牙、存储空间读写权限。导出不申请「另存为」权限,而是走系统分享面板,由你选择去向。
(位置不在这一栏 —— 定位权限是本次新增的可选权限,见上表最后一行。)
十、你的权利与怎么行使
| 权利 | 在应用内怎么行使 |
|---|---|
| 查阅、复制 | 记录详情页查看;「设置 → 导出」生成 zip(记录 + 附件 + 分类 + 清单)后由系统分享面板带走 |
| 更正 | 记录详情页直接编辑正文、分类、标签、实体 |
| 删除 | 记录详情页删除(软删:这条记录被标记为已删除,标记会随同步上传,可在你自己的存储里清理);附件随记录删除;卸载应用会清除全部本机数据 |
| 撤回同意 | 关闭对应功能(删除供应商配置即停止转写与外部大模型分类;删除同步目标即停止同步);首启同意可在「设置 → 关于与合规」撤回(撤回后 App 停止一切应用侧网络行为,需重新同意才能继续使用);定位授权可在系统设置里关掉本 App 的定位权限 → 合迹不再取新的坐标(已经采到的坐标留在本机,随对应记录走下面的删除口径);「把坐标换成地名」开关可在设置里关掉 → 合迹不再发任何反查请求(界面上只显示经纬度);「OCR 文字解读 · 走云端大模型」开关可在设置里关掉 → 合迹不再把照片上认出来的文字发给你的大模型(关掉就一段文字都不发);删掉你填的高德 key 即停用高德那一路 |
| 注销 | 本应用无账号体系,卸载应用即等同于注销 |
| 解释规则 | 本政策;如仍有疑问,用第一节的联系方式找我们 |
| 投诉 | 同上联系方式。我们会在 15 个工作日内答复 |
位置信息的删除与导出(2026-11-02 新增 · 如实写):
- 删除一条记录 —— 位置是这条记录的一个字段(
place文本 + 坐标 + 解析出来的地点名),随这条记录一起被删除。
精确口径:合迹的删除是软删 —— 只写上「已删除」标记与修订号,不清空这一行(lib/core/db.dart:455-467:softDeleteRecord只更新deleted_at与rev)→ 被标记为已删除的这一行里仍带着它的place/ 坐标,直到你在自己的存储里清掉那条记录,或卸载应用(App 私有目录随卸载清除)。
→ 同步时被标记为已删除的记录也会把位置带上(同步包是整行倒出:lib/core/record_repository.dart:1233-1240的SELECT r.*→lib/core/sync/sync_engine.dart:226-228)。 - 导出全部 —— 「设置 → 导出」产出的 zip 包含位置(
place/ 坐标两列都导:lib/core/platform/exporter_io.dart:264-266;网页版同口径exporter_web.dart:159-161)→ 导出包带走坐标,请自行保管这个 zip。 - 卸载应用 —— 随 App 私有目录一并清除,本机不留残留(应用已关闭系统备份与换机迁移,坐标不会被搬到别的设备)。
- 已经发出去的那一次反查(v1.5 新增 · 如实写) —— 反查那一刻,坐标已经交给了地理编码服务;那家服务商会按它自己的规则留存这次请求
(合迹不控制、也无法替你删除它那边的副本)。要彻底不发生这一路:在设置里关掉「把坐标换成地名」,并删掉你填的高德 key。 - ✅ 采集流程已接上(2026-11-02 核):采集面板打开时申请权限(
lib/features/capture/capture_controller.dart:294-303)· 只问一次(:308)· 提交时用最近 5 分钟内的缓存定位(:327-334、:1075-1080)· 坐标迟到就回填到那条记录(:336-353)· 抽得出可读地点就不要坐标(:344+ 仓储层同样取舍)。 - ⚠ 待补(真机验收后回填):以上都是代码事实,尚未做真机验收 —— 装到真机上跑一遍:授权 / 拒绝各一条,确认「拒绝也能照常记」「坐标确实落在那条记录上」。
删除的边界:应用只能删除你自己设备上和你自己选定的同步目标里的数据。我们没有你的云盘账号,无法替你删除云端副本;删除云端副本需要你在对应的存储服务里操作。
把同步目录交给 agent / 第三方工具之后(重要边界,请看)
合迹提供一条 MCP(Model Context Protocol)接入方式:它是一个你自己电脑上跑的 stdio 命令(不联网、不占端口),读取你自己的同步目录,给你的 AI agent 提供读写记录与附件的工具。
- 只要你把同步目录(或「导出全部」产出的目录)挂给任何 agent 或第三方工具,你的记录内容就进入了那个工具的控制范围 —— 那一刻起,数据离开你的控制范围,那些工具的留存、训练、二次分发行为不由合迹负责、我们也无法查看或撤回。
- 合迹自己不读这些目录;App 内的「复制 MCP 配置 / 复制命令」按钮只会把命令文本写入剪贴板,不会读取剪贴板内容(只写不读)。
- 合迹不提供手机侧的局域网接入形态(v1 暂未提供),也不向任何 agent 开放远程接口。
十一、我们怎么保护安全
- 凭据加密:API Key、WebDAV 密码、S3 Secret Key、高德 Web 服务 key 存放于 Android Keystore 加密的偏好存储(
flutter_secure_storage),不进入同步目录、不出设备。精确口径:应用创建该存储时未传任何加密选项,走的是插件的默认实现(AndroidKeyStore 中的密钥对包裹 AES 密钥)——不是
EncryptedSharedPreferences那条 AES256-SIV/GCM 路径。所以本政策不宣称「AES256」。依据:lib/core/platform/prefs_store_io.dart:10-13(const FlutterSecureStorage(),无 options)。 - 内容寻址:附件按 sha256 内容寻址存储,附件元数据只存摘要、类型与大小,不存原始路径。
- 写入原子性:附件与模型文件先写临时文件再改名,避免半截文件。
- 默认配置下你的记录内容不出网:默认配置下(没配任何外部大模型),你的记录内容不会有任何后台网络行为。
⚠️ 以下几类路径必须写明:① 自动更新检查(冷启动后每小时最多一次,只取一个静态 JSON 版本清单;不带任何记录内容,但服务端会看到你的 IP 与请求时间);② ML Kit SDK 的诊断用量遥测(由 SDK 自身发起,应用不提供开关;不含你的记录内容、不含你的输入);③ 首启同意后的语义模型下载(只下载模型文件;已安装就跳过,不重复下载,不含任何记录内容);④ 本机规则不能确定时的外部大模型分类(只有你已配置供应商并填了 Key 才发生;规则能确定就不发;没配外部大模型时,规则不能确定就留作未分类)。详见第六节第 3、5、6、7 条。
⚠️ v1.5 再加一条(位置的反查):⑤ 坐标 → 地名的逆地理编码(默认开启)—— 提交记录那一刻,坐标会交给地理编码服务换地点名(只发坐标,不含记录正文;不是后台行为 —— 只在提交那一刻发一次,不做持续上报);设置里的「把坐标换成地名」可以关掉,关掉就不发。详见第六节第 9 条。
⚠️ v1.8 再加一条(OCR 文字交给大模型解读):⑥ OCR 文字 → 外部大模型的解读(默认开启)—— 提交记录那一刻,照片上 OCR 认出来的文字(主体部分;主体文字 ≥ 40 字才发,文字太少没有可解读的结构就不发)会交给你自己填的端点,换回一段结构化解读(文档类型 / 报告日期(带原文证据)/ 一句话结论 / 关键项)。只发文字、不发照片、不发记录正文;不是后台行为 —— 只在提交那一刻发一次,不做持续上报;设置里的「OCR 文字解读 · 走云端大模型」可以关掉,关掉就一段文字都不发。详见第六节第 10 条。
→ 本政策不使用「默认无网」「永不出网」这类笼统说法 —— 精确口径就是上面这几条例外。 - 关闭备份:避免密钥密文被搬到另一台设备而无法解密。
- 位置信息的处理(2026-11-02 新增 · v1.5 改口径):坐标只落在本机(SQLite + 你自己选的同步目录);不发给任何第三方定位服务(不查「你在哪」)、不用于广告与画像;每条记录只有一个坐标点,不记录你的移动轨迹(授权后 App 保持一个定位监听,只为拿到这个点)。⚠ 但「坐标 → 地名」这一步会把坐标交给地理编码服务(只发坐标,不发正文;默认开启,可在设置里关掉 —— 见第六节第 9 条)。系统已关闭 Android 备份与换机迁移 → 坐标不会被系统搬到别的设备。
- 我们在自己这边几乎没有数据:没有账号体系、没有服务端数据库,我们无法查看你的记录。
十二、未成年人
合迹面向一般用户设计。若使用者未满 14 周岁,请在监护人陪同下使用,并由监护人代为完成需要同意的操作。我们不会主动收集未成年人的个人信息,也不会基于记录内容做画像或营销。
十三、本政策的更新
政策变更时,我们会在本页面更新版本号与生效日期。涉及处理目的、信息种类、出境路径的重大变更,会在应用内以显著方式提示,并重新征求同意。
十四、联系我们
- 电话:189****8149
- 邮箱:yfxd**s@gmail.com
- 站点:https://heji.wang(已备案并对外开放;网站 ICP 备案号 浙ICP备2026096607号 · 查询)—— 公安联网备案与 APP 备案办理中
- 运营者:嘉兴市秀洲区王江泾镇合乐养生馆(个体工商户)· 统一社会信用代码 92330411MAKCNXUY9B
本政策所述事实对应合迹 v1(Android)的实际实现(核对日期 2026-10-30;本版 v1.4 的位置相关部分核对日期 2026-11-02;本版 v1.5 的「坐标 → 地名」逆地理编码部分核对日期 2026-11-02;本版 v1.8 的「OCR 文字 → 大模型解读」部分核对日期 2026-11-05)。
逐条证据(file:line)见docs/compliance/PLAY-DATA-SAFETY.md附录 A「出网路径总表」与本文第六、七、九节的括注。
⚠ 本版还标着「待补」:① 位置能力尚未做真机验收;② v1.5 新增的逆地理编码(系统Geocoder/ 高德 / 设置里的总开关)尚未在真机上跑过,
③ 系统地理编码服务的后端在哪(是否境外)= UNVERIFIED(依设备而定)—— 验收后回填,不必再改本版的其余条款。
若应用行为与本政策不一致,以本政策为准并请向我们反馈。