DoneAt 保存的数据

你输入的信息默认保存在本地:网页计时写在浏览器的本地存储里,iPhone、iPad、Android、Mac 和 Windows 上的应用写在应用数据里。DoneAt 不提供产品账号,也不会把这些信息发送到 DoneAt 的服务器。

在 iPhone 和 iPad 上,你可以选择打开 iCloud 同步。打开后,排班、记录、薪资、提醒偏好、外观、语言、生活档案和专注数据会存入你 Apple 账户下的私人 iCloud 数据库。通知授权、生物识别保护、实时活动设置、当前工作计时和新手引导状态仍只留在各台设备上。Android、网页计时、Mac 和 Windows 不参与这项 iCloud 同步。

倒计时、进度和收入估算都在你的设备上根据这些信息计算。

通常包括:

  • 上下班时间、工作日,以及休息或加班相关设置
  • 薪资金额、计薪周期与职业薪资历史
  • 工作记录与修订、职业阶段,以及你选择填写的人生里程碑或日期
  • 专注任务名称、计划、专注记录与休息设置
  • 通知和提醒偏好
  • 语言与外观

可选的 iCloud 同步

同步默认关闭。在 iPhone 或 iPad 上开启后,Apple 的 CloudKit 服务会将上述数据存入你 Apple 账户对应的私人数据库,DoneAt 自有服务器不会收到副本。使用同一 Apple 账户的设备可以恢复和同步这些数据;这需要可用的 iCloud 账户及网络连接。

开启同步需要 DoneAt Plus。已开启的同步在订阅到期后仍会继续。关闭同步只会停止这台设备的同步,并保留当前本地副本和已有的 iCloud 副本,不会删除其中任何一份。

Android 系统备份与设备转移

Android 应用目前处于测试阶段。本文中 Android 相关说明适用于该测试版本;公开下载与 Plus 购买以 Google Play 正式发布为准。

Android 将记录和设置保存在应用的私有存储中。系统备份和设备转移服务可能复制这些记录与设置,其中包括薪资、职业历史、生活档案和专注数据。未完成的新手设置也可能包含薪资。是否备份、保存在哪里以及如何恢复,取决于你的设备、账号和系统设置;DoneAt 自有服务器不会收到副本。你可以在设备的备份设置中管理系统备份,具体机制见 Android 系统备份说明。

当前运行的计时、已安排提醒的登记信息和本地购买验证数据不进入这些备份。恢复后,DoneAt 会重新安排提醒,并向 Google Play 核对购买状态。仅恢复记录备份不会获得 Plus 权益。

DoneAt 不提供自动 Google Drive 同步,也不在 Android 与 iPhone 之间自动同步。你可以通过备份导出自行转移记录。

备份导出

在 iPhone、iPad 和 Android 上,只有你选择“导出”时才会创建可分享的备份。完整备份包含记录、同步设置、薪资与职业薪资历史、生活档案,以及专注任务和记录。你也可以选择不含生活档案的导出;该选项仍会包含薪资与职业薪资历史。之后可通过系统文件选择器或分享面板选择保存、打开或分享文件的位置。导入备份时,DoneAt 会读取你选择的文件,将其中的数据导入本地记录。

导出的是可直接读取的 JSON 文件,不是受密码保护的压缩包。请根据其中的信息选择合适的保存位置和接收人。保存或分享的文件是独立副本,在 DoneAt 中删除数据不会删除这些文件。

Plus 购买

在 iPhone 和 iPad 上,Plus 订阅和终身购买由 Apple 通过 App Store 处理。DoneAt 使用 StoreKit 验证购买状态、恢复权益,并在本地保存已验证的权益及适用的到期时间。DoneAt 不会收到你的银行卡信息,也不会将购买状态发送到 DoneAt 账号服务器。Apple 按其自身政策处理购买信息。

Android 的 Plus 订阅与终身购买开放后,将由 Google Play 处理。DoneAt 向 Google Play 查询购买状态以验证和恢复权益,核验购买签名,并在应用私有存储中保存购买验证数据。其中包含用于确认购买及重试未完成确认的商品标识和购买令牌,不含薪资或工作记录,也不进入系统备份。应用打开或回到前台、恢复购买、重试购买确认时,DoneAt 可能访问 Google Play。DoneAt 不会收到你的银行卡信息。Google 按其自身政策处理购买信息。

DoneAt 使用 Cloudflare 托管的 api.doneat.app 核验 Android 购买。启用服务端验证的版本会通过 HTTPS 发送 Play 购买令牌、商品标识和随机请求标识;Google Play 也可以通过 Cloud Pub/Sub 发送购买状态变更通知。服务向 Google 查询当前权益与精确到期时刻,并返回数字签名凭据,不接收薪资、排班、工作记录、专注计划或备份。

数据库保存购买令牌的哈希、商品、权益状态与到期时刻、核验时间、测试购买标记、替换令牌哈希及修订号,用于核验、恢复购买和防止已替换的旧购买重复生效。通知消息 ID 按 30 天窗口去重,在处理后续通知时清理过期记录。原始购买令牌与 Google 响应只在处理时使用,不存入数据库或应用日志。IP 限流也是临时处理;DoneAt 不在数据库保存 IP 地址或这些 IP 哈希。Cloudflare 和 Google 依各自政策处理网络流量。购买标识不用于广告或使用行为画像,手机上的签名凭据也不进入系统备份。

订阅到期不会删除已有记录,导出与删除数据也不需要有效订阅。

官网

doneat.app 是静态网站。它不会收集你的班次或薪资。打开根路径,或 /privacy、/download 这类短路径时,会按浏览器语言进入对应门厅,或打开简体中文 / 英文支持页。语言仍只出现在网址里,本站不设语言 Cookie。

为了托管这些页面,Vercel 可能依据其隐私政策处理 IP 地址、浏览器标识等常规连接信息。本项目不会保存这些信息,也不会用它们建立你的画像。

官网使用 Vercel 的无 Cookie 统计服务记录页面访问量和加载表现,并用少量合计计数了解哪些入口被用到。事件来自固定且公开的清单,例如 hall_view、download_view、download_from_web、web_timer_open 或 app_store_open,只按日加一。请求里只有事件名,没有用户标识、会话、语言、班次或薪资,不能用来认出或追踪某一个人。

完整的事件清单见本仓的 src/lib/analytics-events.ts。

网页计时的数据统计

off.rainif.com 上的网页计时同样使用 Vercel 的无 Cookie 统计服务记录页面访问量和加载性能,并使用少量聚合计数了解功能的整体使用情况。

产品事件来自另一份固定且公开的事件清单,例如 share_open 或 countdown_start,并仅按日汇总。事件不包含用户标识符、会话信息、班次或薪资,因此不能用于识别或追踪单个人。

完整的产品事件清单可在产品开源仓库中查看。托管与统计服务商可能依据各自的隐私政策处理常规连接信息。本项目不会另行保存这些信息,也不会用它们建立用户画像。

网页计时使用名为 i18nextLng 的 Cookie 保存语言代码,以便下次打开时仍是你选的语言。它会在首次访问时根据当前显示语言写入,切换语言时更新,有效期一年,可以在浏览器里清除。

官网和网页计时都不使用广告 Cookie 或跨站跟踪 Cookie。上面的统计服务也不依赖 Cookie。

分享倒计时

分享链接的网址只包含开始时间和结束时间,不含薪资。打开链接的人只能看到班次时间。倒计时分享图片同样不含薪资。备份导出则不同:它可能包含薪资及上文列出的其他个人数据。

如果你选择通过第三方社交服务分享,相关信息按该服务的隐私政策处理。

手机和电脑上的应用

iPhone、iPad、Android、Mac 和 Windows 上的应用不收集使用统计。

从 GitHub 安装的桌面版本会在启动时检查是否有新版本。该请求不包含账号、薪资或使用数据;只有在你确认更新后才会下载安装包。如果无法直接连接 GitHub,你可以选择通过第三方镜像重试。通过任一渠道下载的更新包都会在安装前验证签名。

从 Microsoft Store 安装的版本不会自行发起更新检查。更新由 Microsoft Store 提供。

提醒由操作系统在本机调度和显示。当你打开外部链接或选择第三方社交服务分享时,应用也会访问网络。

在 Android 上,完成班次并在之后再次打开应用时,DoneAt 可能请求 Google Play 展示评价提示,你可以自行决定是否参与。Google Play 处理你提交的评分和评价:公开评价显示在 Play 商店,封闭测试反馈则私下提供给开发者。应用不会收到你是否提交评价的结果。具体见 Google 应用内评价说明。

小组件、实时活动与设备保护

小组件和实时活动使用展示计时与进度所需的信息,在适用的场景也会显示专注信息,但不包含薪资。本地通知同样不含薪资。这些内容可能出现在主屏幕或锁屏上;你可以在应用及系统设置中管理相关显示和通知权限。

DoneAt 为保护收入或记录而请求身份验证时,由设备通过支持的生物识别方式(如面容 ID、触控 ID、Android 指纹或人脸识别),或设备 PIN、图案、密码完成。DoneAt 只接收验证结果,不会取得你的生物识别数据或设备密码。这项保护在每台设备上分别设置。

Android 界面效果

Android 应用使用开源的 Backdrop(AndroidLiquidGlass)和 Shapes 库绘制玻璃效果与形状。效果在本机完成,不会向项目作者发送应用内容或设备标识。项目链接和 Apache-2.0 许可证列于关于页面,也随应用附于“致谢”。

第三方服务

DoneAt 在托管页面、统计官网和网页计时、分发应用以及打开你选择的链接时,会用到:

  • Vercel —— 托管官网和网页计时;两处的访问量与性能统计
  • Upstash —— 存储官网和网页计时的按日合计事件计数
  • GitHub —— 源代码、版本信息,以及 GitHub 分发的桌面版本的更新检查
  • Apple —— 应用分发,以及通过 App Store 和 StoreKit 处理的 Plus 付款与购买验证,以及你选择在 iPhone 或 iPad 上打开的私人 iCloud 同步
  • Google —— Android 应用分发和更新、通过 Google Play 处理的 Plus 购买与验证、通过 Cloud Pub/Sub 传递的购买状态通知、可选的评分和评价,以及由 Google 提供的系统备份
  • Cloudflare —— 托管 Android 购买验证服务及购买状态数据库
  • Microsoft —— 你打开的 Microsoft Store 页面的分发与更新
  • 第三方下载镜像 —— 仅在你从 GitHub 分发的桌面版本里主动选择时使用
  • 你选择用来分享倒计时的第三方社交服务

删除你的数据

网页计时用户可以在浏览器里清除本站数据,包括本地存储和语言 Cookie。Mac 或 Windows 用户可以卸载应用并删除应用数据。

在 iPhone 和 iPad 上,卸载应用会删除这台设备上的本地数据。如果你打开过 iCloud 同步,私人 iCloud 副本仍可供其他设备使用。在 DoneAt 的“记录与数据”设置里选择“从 iCloud 删除”,会删除 iCloud 副本,并在登录同一 Apple 账户的设备下次同步时清除相关同步记录。仅移除这台设备上的记录,会保留可供恢复的 iCloud 副本。此前导出的备份文件,需要到你保存或分享它们的位置另行删除。

在 Android 上,你可以在“记录与数据”中移除记录。清除应用存储或卸载会移除本机应用数据;导出的文件需要另行删除。系统备份副本可能仍保存在设备或账号的备份服务中,并在重装或换机时恢复,请通过系统备份服务管理这些副本,DoneAt 无法代你删除。删除应用数据或卸载不会取消订阅;订阅需要在购买时使用的商店中管理。

如需咨询或申请删除服务端购买记录,请联系 [email protected]。删除本地记录或卸载应用,不会自动删除服务端购买记录,也不会取消订阅。

DoneAt 无法访问你的 Apple 账户,也无法代你删除其中的私人 iCloud 数据。DoneAt 同样无法通过服务器访问或删除你的本地数据。

隐私政策的变更

本政策更新时,页面顶部的最后更新日期会一并改。重大变更会写在发布说明里,历史版本可在开源仓库的提交记录中查看。

联系我们

关于本政策或信息处理方式的问题,请写到 [email protected]。产品问题和建议也可以通过 GitHub Issue 提交。

如果你发现本政策的说明与产品实际行为不一致,请写到这个邮箱或开一个 Issue。