UniClipboard
核心功能

隐私与数据收集

UniClipboard 会收集哪些诊断与使用情况数据、为什么收集、不会收集什么,以及如何关闭。

在 GitHub 上编辑

UniClipboard 的核心边界不变:剪贴板内容只在你已配对的设备之间同步,并且全程端到端加密。诊断数据和使用情况分析是另外两条辅助通道,只用于发现崩溃、定位同步问题、判断哪些平台和流程需要优先改进。

这两条通道在 设置 → 通用 → 隐私 中分别控制。默认开启;首次启动会展示提示,点击“关闭”会同时关闭诊断数据与使用情况分析。之后也可以分别开关,修改后不需要重启。

两个独立开关

开关控制范围默认值去向
发送诊断数据崩溃、错误、告警日志、性能追踪、前端错误诊断与采样 Replay。用于定位“为什么坏了”。开启Sentry(前端与后端分别使用独立项目,构建中配置了 DSN 时启用)
发送使用情况分析匿名产品事件,例如首次启动、配对漏斗、首次同步、同步成功 / 失败 / 暂缓。用于判断“哪些流程卡住了”。开启PostHog Cloud US ingestion endpoint(release 构建中配置了 project key 时启用)

关闭任一开关后,下一条对应事件就会被丢弃;不需要重启 daemon。关闭使用情况分析时,产品事件不会进入远端 sink,也不会在 release 构建中写入本地 analytics 日志。

我们为什么收集

  • 定位崩溃和异常。 诊断数据帮助我们知道哪个版本、平台或进程角色在报错。
  • 发现 setup 与配对漏点。 使用情况分析能看到用户是否卡在首次启动、设备命名、邀请码、口令确认或握手阶段;setup 完成 anchor 让我们能区分"开始 setup 但没走完"和"走完 setup 但没配对"两类流失。
  • 衡量解锁可靠性。 每次在已完成 setup 的设备上启动应用,我们会记录空间是否解锁成功,或失败属于哪一类(口令错、密钥物料损坏、找不到空间、内部错误)。口令本身永远不会上传。
  • 衡量同步可靠性。 同步事件区分成功、失败、已知离线导致的暂缓,以及失败发生在即时发送、本地策略还是最终投递阶段。
  • 决定优先级。 平台、版本、语言、时区、设备数量等聚合维度帮助我们把精力放在影响最大的路径上。

这些数据不用于广告画像,不出售给第三方,也不用于恢复、读取或分析你的剪贴板内容。

本地键盘状态读取

启用快捷面板的双击修饰键触发方式后,GUI 进程只会在该触发方式生效期间采样本机键盘状态。每次采样会立即归约为两个布尔值:所选修饰键是否按下、是否有其他按键按下。原始按键不会写入日志、持久化、建立索引、进入诊断数据,也不会发送到其他设备或服务。关闭该触发方式会停止采样线程。macOS 上这项能力需要单独授予辅助功能权限;原生 Wayland 会话会明确显示为不支持。

诊断数据包含什么

诊断数据覆盖应用出错时需要的最小上下文:

类别包含
应用与平台应用版本、发布渠道、OS 平台、前端 webview 平台、进程角色(GUI host / daemon / CLI / webview)。
设备诊断标识本机持久化的随机设备 ID,用来把同一台设备上的崩溃、日志和前端错误关联起来。
错误与日志panic、异常、错误事件、warn / error 日志、前端 info 以上日志。敏感字段会在发送前替换为 [REDACTED]
性能与面包屑采样性能 trace、导航 / 操作面包屑,用来还原错误前后的路径。
前端 Replay前端 Sentry Replay 采样,用于复现 UI 错误。关闭“发送诊断数据”后不会发送。
用户主动反馈只有你在反馈窗口提交时,才会发送你填写的反馈内容和可选邮箱。

使用情况分析包含什么

使用情况分析使用单独的匿名 ID,不从配对用的业务 DeviceId 派生,也不参与同步或信任关系。

每条产品事件会带这些共享字段:

字段含义
anonymous_user_id随机 UUIDv7,未加入空间时用于匿名留存统计。
analytics_device_id随机 UUIDv7,用于设备级切片;与业务设备 ID 独立。
space_person_id随机 UUIDv7,同一空间内的所有已配对设备共享,用于在留存指标里聚合为同一个匿名 person;未加入空间时为空。
session_id单次进程运行的随机 UUIDv7。
app_version / app_channel应用版本与发布渠道。
os / os_version / arch操作系统、系统版本、CPU 架构。
locale / timezone系统语言与时区。
install_source安装来源枚举;当前未能识别时为 unknown
is_first_run本次是否为首次运行。
active_device_count进程启动时读取的已配对设备数量。
space_id_hash空间 ID 的不可逆 SHA-256 哈希前 16 位;未加入空间时为空。

当前允许的产品事件范围:

事件族事件可能包含的事件字段
生命周期app_opened无事件特定字段;仅使用上表中的共享上下文字段。每次进程启动触发一次,用于计算 DAU / 留存。
首次激活app_first_opensetup_starteddevice_name_set引导入口、设备名长度区间。设备名原文不上传。
配对pairing_startedpairing_succeededpairing_failed配对方式、对端 OS、耗时、配对失败原因枚举。
首次同步first_clipboard_sync_attemptedfirst_clipboard_sync_succeededfirst_file_sync_succeeded同步方向、对端 OS、传输路径、耗时、负载大小区间。
同步可靠性sync_attemptedsync_succeededsync_failedsync_deferred同步方向、负载类型、负载大小区间、传输路径、对端 OS、同步耗时、失败原因 / 阶段、暂缓原因。
移动端同步mobile_device_registeredmobile_clipboard_syncedmobile_auth_failed同步方向、负载大小区间、移动端鉴权失败类型枚举。原始 Authorization 头、用户名、密码永不上传。
更新生命周期update_check_performedupdate_notification_shownupdate_dialog_openedupdate_dismissedupdate_action_invoked检查来源(启动 / 周期 / 手动 / 唤醒补检测)、结果(有更新 / 已是最新 / 失败)、失败原因枚举、通知投递状态枚举、对话框来源 / 关闭来源、动作类型与结果、安装类型(app / deb / rpm / appimage / unknown)、新版本号字符串。不上传 release notes 原文、下载 URL、字节计数、机器主机名 / 用户名。

新增产品事件或字段时,必须继续遵守本页的隐私边界,并更新公开文档。

不会收集什么

UniClipboard 不会把下面这些数据放进诊断数据或使用情况分析:

  • 剪贴板原文:文本、RTF、HTML、图片像素、文件二进制。
  • 文件名原文、文件路径原文、家目录路径。
  • 空间口令、MasterKey、KEK、私钥、token、credential。
  • 搜索关键词。
  • 用户名、hostname、邮箱地址;例外是你在反馈窗口主动填写的邮箱。
  • 原始 space_id 或配对用的业务 DeviceId
  • 精确负载大小;产品分析只使用大小区间。同步成功的耗时毫秒值可能会上传,用于可靠性分位数分析。

任何 HTTPS 服务提供方都会在网络层看到请求来源 IP。UniClipboard 不把 IP 地址作为事件字段写入诊断或使用情况分析,也不使用它做产品分析。

如何关闭

进入 设置 → 通用 → 隐私

  • 关闭 发送诊断数据:停止前端 / 后端 Sentry 的错误、日志、trace、Replay 与面包屑上报。
  • 关闭 发送使用情况分析:停止产品事件上报。

启动提示中的 关闭 会一次性关闭两个开关。关闭不会影响剪贴板同步、局域网模式、历史加密或本地搜索,也不会删除已经生成的本地匿名 ID;这样是为了避免误关后再打开时被统计成一次全新安装。

本页目录