隐私政策
一句话:你的病历存在你自己的手机上,我们看不到。
MedMe 没有账号、没有注册、不需要登录。默认情况下,你导入的病历、识别出的文字和原始照片全部只存在于你的设备上,不经过我们的服务器。
本政策的重点不是罗列我们能收集什么,而是逐条说清楚在哪几种情况下会有数据离开你的手机——一共四种,都写在下面第三节,每一种都需要你主动触发。
一、我们不收集什么
以下内容从不发送到我们或任何第三方的服务器:
- 病历原件(照片、PDF、扫描件)
- 文字识别(OCR)的结果
- 从病历中解析出的任何信息:诊断、药名、检验值、就诊日期、医院名、医生名
- 你或家人的姓名、性别、出生日期
- 文件名
- 你的位置。我们不获取、不使用、不上报你的位置,App 从不请求定位权限
- 通讯录、通话记录、短信、已安装应用列表
- 设备唯一标识符(IMEI、IDFA、Android ID、MAC 地址等)
我们也不出售、不出租、不以任何形式交易个人信息。我们没有广告业务。
关于位置,有两点要说清楚:
1. iOS 版本的系统信息里包含两条定位用途声明。那是因为「从相册/文件导入」用到的开源选图组件引用了系统定位接口(它自带给照片打地理标记的能力),苹果按代码里有没有引用来判定,上架时必须声明。我们从不调用它,App 也从不弹出定位授权请求。
2. 你从相册导入的照片,本身可能带有拍摄地点(EXIF GPS)。我们不读取、不解析、不单独上报它,但它会跟着照片原件一起保存在你的保险箱里;当你主动分享这份病历时,它会随原件一起(在我们无法解读的密文中)传给对方。
二、文字识别在你的手机上完成
把病历照片变成文字这一步(OCR),使用随 App 一起打包的开源模型(PP-OCRv5),完全在你的设备本地运行。iPhone 和 Android 用的是同一个引擎、同一份模型。
照片不会被上传到任何云端识别服务。这一步不需要联网。
两点补充:
- iPhone 上,喂给识别引擎之前会先用系统的 Apple Vision 做一次画面拉正(把拍歪的纸拉成正方形)。它只处理画面,不做识别,也不联网。
- Android 上「拍照」这一步调用的是系统的文档扫描器。在装有 Google Play 服务的手机上,该组件由 Google 提供、可能按需下载模块;没有 Google 服务的手机会自动退回普通相机。这一步不涉及病历内容的传输,但它属于 Google 的组件。
三、数据可能离开你手机的四种情况
只有以下四种,并且每一种都由你主动触发。
1. iCloud 同步(可选,默认关闭)
如果你在设置里主动开启 iCloud 同步,你的保险箱会存到你自己的 iCloud 账户,以便在你自己的多台设备之间同步。
数据去的是 Apple 提供给你的私有容器,不是我们的服务器,我们无法访问。这部分数据受 Apple 的隐私政策与你的 iCloud 设置约束。
关闭这个开关,数据只留在本机。
目前手机版尚未开放这个开关(桌面版有)。也就是说,我们不会把你的病历同步到 iCloud。
2. 你出示二维码给医生看的时候
当你在「导出 · 分享」里生成二维码给医生扫的时候,你的病历(包含原件照片)会先在你自己手机上加密(AES-256-GCM),然后把密文临时上传到我们在阿里云(中国杭州)的对象存储,好让医生扫码后能在浏览器里打开。
解密密钥不上传。它放在链接 # 号之后的片段里——按照 HTTP 协议,# 之后的内容不会被发送到服务器。因此我们的服务器上只有一团无法解读的密文。
我们不持有解密所需的密钥。
保留期限与访问方式:
- 云端密文:15 天后由存储桶的生命周期规则自动删除
- 上传许可地址:最长 2 小时有效(为了让上传中断后能接着传,而不必整份重来)
- 密文对象的地址是一串不可枚举的随机编号。在保留期内,持有该地址的人可以取回这团密文——但没有
#之后的密钥,读不出任何内容
不生成二维码,就不会有任何数据经过这条通道。
3. 医生用「代拍」为你建档的时候
医生用代拍功能为你拍摄病历后,内容会先在医生手机上加密,再把密文临时上传到我们在阿里云(中国杭州)的对象存储,并当场生成一个认领二维码给你扫。这样你不必装 App、也不必加医生好友,扫了就能带走。
这与上面第 2 项走的是同一条通道,性质相同:解密密钥在链接的 # 号之后,不上传,我们的服务器上只有一团无法解读的密文;云端密文15 天后由存储桶的生命周期规则自动删除。
网络不通时会退回旧办法:在医生手机上生成一个加密文件,由医生通过自己的渠道(微信、AirDrop 等)发给你,并当面告诉你口令。这条退路不经过我们的服务器。
另外,医生手机上留存的病人材料保留 12 小时,超时后会在医生下次打开 App 时自动清除。
4. 匿名的使用行为统计(可关闭)
为了知道哪些功能真的被用到、哪一步会失败,App 会上报不含任何病历内容的行为事件。服务商是 PostHog(服务器在美国)。
你可以在设置 → 帮助改进 MedMe 里随时关闭。关闭后不再上报任何新事件(关闭这个动作本身会记录一次)。
四、行为统计具体采了什么
完整清单见开源仓库中的 埋点目录,该文件由自动化测试与代码强制保持一致。概括如下。
事件(只有动作,没有内容)
| 类别 | 记录的是 |
|---|---|
| 打开应用 | 打开了、保险箱是否正常打开 |
| 导入病历 | 从哪个入口(拍照/相册/文件)、成功还是失败、失败在哪一步、失败的原因代码、耗时区间、份数区间 |
| 查看病历 | 打开了一份(不含是哪一份、不含内容) |
| 导出 / 二维码 / 分享 | 发生了、载荷大小区间、上传失败后选择了重试还是降级 |
| 医生代拍 | 开始了、同意书已签、交付完成、耗时区间、份数区间 |
| 认领 | 打开了认领页、成功或失败、失败原因代码 |
| 身份选择 | 选了「个人」还是「医生」,以及是首次选的还是后来在设置里改的 |
| 关闭统计 | 你关掉统计时会记录这一次动作,之后不再有任何上报 |
随事件附带的设备描述
这些描述的是设备的状态,不是你的身份:
- 距首次使用多久(只分四档:当天 / 1-7 天 / 8-30 天 / 30 天以上)
- 这是第几次打开(分档)
- 档案里有多少份病历(分档:0 / 1 / 2-5 / 6-20 / 21-50 / 50 以上)
- 当前是「个人」还是「医生」模式
- 本地时段(只分四档:00-06 / 06-12 / 12-18 / 18-24)
此外,PostHog 的软件包会自动附带一批标准技术信息,例如手机型号、操作系统与 App 版本、系统语言。这些是排查问题所必需的,不含病历内容。
所有数值一律分档上报,不报精确值。「导入用了 8.4 秒」会变成「3-10 秒」;「档案里有 23 份」会变成「21-50」。这样做是为了让这些数字无法在组合后指向具体的人。
我们刻意不做的
- 不建立跨会话的持久标识。每次打开 App 都会重置统计标识,因此我们无法把你今天的使用和明天的使用关联起来,也无法追踪单个用户的行为轨迹。代价是我们看不到用户留存数据,这是我们主动接受的取舍。
- 不记录 IP 地址与地理位置。每条事件都显式禁用了 IP 地理位置解析,并在 PostHog 项目设置中关闭了客户端 IP 记录。
- 不做屏幕录制(session replay)。这项功能会录到病历内容,因此被完全禁用。
- 不做自动采集(autocapture)。只上报上面列出的事件,没有别的。
- 医生查看器网页不含任何统计代码。那个页面里是解密后的病历原文,我们在架构上禁止在其中放入任何分析脚本。设计决策记录
四之二、统计数据保留多久
行为统计数据在 PostHog 保留 1 年,之后自动删除。
五、权限
| 权限 | 什么时候用 |
|---|---|
| 相机 | 你选择「拍照」导入病历时。照片直接进你的保险箱 |
| 相册 / 文件 | 你选择从相册或文件导入时。只读取你主动选中的那些文件 |
| 网络 | 仅用于上面第三节的第 2、3 项。其余功能均不需要联网 |
拒绝任何一项权限,只影响对应的导入方式,不影响其他功能。
六、第三方
| 第三方 | 用途 | 拿到什么 |
|---|---|---|
| PostHog(美国) | 行为统计 | 第四节列出的事件与分档描述。无病历内容、无身份标识、无 IP |
| 阿里云对象存储(中国杭州) | 二维码分享与医生代拍认领的加密中转 | 一团我们无法解密的密文,15 天后自动删除 |
| Apple iCloud | 你主动开启的同步 | 存进你自己的私有容器 |
| Google Play 服务(仅 Android) | 「拍照」用的系统文档扫描器 | 不传输病历内容;组件是否可用、模块何时下载由 Google 决定。无 Google 服务的手机退回普通相机 |
| GitHub Pages | 托管本网站与医生查看器网页 | 常规访问日志(含 IP)。病历密文不经过它——查看器直接从阿里云取,页面的内容安全策略只放行那一个地址 |
关于跨境:行为统计数据会传输至位于美国的 PostHog 服务器。这部分数据不包含病历内容,也不包含能识别到你的信息。病历本身从不出境——二维码中转用的是中国境内的服务器,且内容是我们无法解读的密文。
七、我们如何保护数据
- 保险箱以文件形式存放在设备的应用私有目录中,依赖操作系统提供的加密保护(iOS 数据保护 / Android 文件级加密 / macOS FileVault)。App 层的独立口令加密尚未上线,在计划中
- 分享与代拍使用 AES-256-GCM 端到端加密,密钥不经过我们的服务器
- 离线分享文件在技术上无法联网:其内容安全策略把网络访问限制为完全禁止
- 整个项目源代码公开(AGPL-3.0),上述每一条都可以被独立核实:github.com/Chesterguan/medme
八、你的权利
因为我们没有你的账号,也没有你的病历,所以:
- 查阅、复制、更正、删除:你的数据全部在你手中,在 App 内直接操作即可。卸载 App 会删除本机的全部数据(如果曾开启过 iCloud 同步,iCloud 里的副本需要你在 iCloud 设置里另行删除)。
- 撤回统计同意:设置 → 帮助改进 MedMe → 关闭。
- 注销账号:不适用——我们从未为你创建过账号。
正因为数据只在你手上,我们也无法帮你找回。设备丢失、误删、未开启同步而更换手机,都会导致数据无法恢复。请自行做好备份。
九、未成年人
MedMe 面向成年人设计。如果你要为未成年子女或被监护人保存病历,请以监护人身份使用,并对其中的健康信息负责。我们不会主动收集任何年龄信息。
十、政策变更
本政策如有变更,我们会更新本页顶部的日期,并在应用内提示。涉及数据处理方式实质性改变的,会在变更生效前告知。
十一、联系我们
关于隐私的任何问题、意见或投诉:[email protected]
你也可以在 GitHub Issues 公开提出。