资讯详情

QOwnNotes 匿名使用数据(Metrics)机制深度解析:收集了什么、存在哪里、如何关闭

📅 2026/10/13 1:42:28 | 华诺云谱 👁 阅读
QOwnNotes 匿名使用数据(Metrics)机制深度解析:收集了什么、存在哪里、如何关闭
桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载QOwnNotes 作为一款开源 Markdown 笔记与待办事项管理工具会在默认情况下收集一份匿名化的使用数据usage metrics用于指导项目演进。本文以官方 FAQ 文档metrics.md为核心骨架结合仓库源码metricsservice.cpp、main.cpp、networksettingswidget.cpp 等逐层拆解这套机制的目的、存储位置、匿名化手段、具体收集内容、代码可验证性以及关闭方式帮助你准确判断QOwnNotes 到底从你这里拿走了什么。一、为什么 QOwnNotes 需要收集使用数据QOwnNotes 本身主要由一个人在业余时间开发官方 FAQ 明确说明同时要为大量平台与发行版准备发布包其中不少还是发行版仓库中非常古老的版本维护这些发布渠道本身就是一个持续投入的工程。在这样的背景下使用数据几乎是唯一可信的信息来源用来回答三个关键问题QOwnNotes 到底跑在哪些平台、哪些发行版、哪些版本的系统上—— 决定哪些平台版本可以逐步退役、哪些必须继续支持哪些功能最受欢迎、哪些少有人用—— 决定下一阶段应该重点改进什么功能、哪些功能可以精简用户主要使用哪些语言—— 决定优先完善哪些语言的翻译。官方 FAQ 的原话是metrics 帮助开发者决定该退役哪些版本、哪些功能应该被改进、哪些功能几乎无人使用对用户语言的统计同样服务于对应翻译质量的提升。也就是说这套数据不是商业营销用途而是开源项目做版本策略和资源分配决策的依据。二、数据存储在哪里自托管 Matomo仅开发者可访问官方 FAQ 明确回答使用数据被发送并存储在一个自托管self-hosted的 Matomo 服务器上只有两名核心开发者有权访问这些数据没有任何数据被共享给第三方。这一点从源码中也可以得到印证metricsservice.cpp 中MetricsService的构造函数直接创建了一个指向自有域名https://p.qownnotes.org的PiwikTracker实例站点 ID 为5调试构建下为6也就是说数据只流向项目自己掌控的统计服务器而不是任何第三方统计平台。_piwikTracker new PiwikTracker(qApp, QUrl(QStringLiteral(https://p.qownnotes.org)), siteId);三、数据如何收集与匿名化FAQ 的核心承诺是数据在到达 Matomo 服务器后会被匿名化例如 IP 地址会被移除。整个流程可以概括为客户端QOwnNotes在特定时机向p.qownnotes.org的 Matomo 实例发送访问visit或事件event服务器接收后立即进行匿名化处理如剥离 IP匿名化后的聚合数据供开发者分析。官方 FAQ 同时做出两条非常明确的隐私承诺不收集任何个人信息绝不收集你在笔记中输入的文本、笔记的文件名等任何内容性数据。这一点在代码层也能看到端倪MetricsService通过setCustomDimension设置的自定义维度全部是版本号、系统 locale、发行版信息、CPU 架构等环境信息详见下一节源码中没有任何读取或上传笔记正文、笔记名的代码路径。四、到底收集了什么源码级拆解FAQ 描述收集内容包括屏幕分辨率、操作系统、QOwnNotes 版本等基础环境信息此外还会发送一些事件event例如在应用内执行了某些操作时。下面结合源码把到底发了什么拆开看。4.1 客户端发送的固定维度在 metricsservice.cpp 中MetricsService构造时会通过setCustomDimension为每次上报附带以下维度维度内容来源维度 1QOwnNotes 版本号VERSION编译期版本宏维度 2系统 localeQLocale::system().name()系统语言区域维度 3是否为调试构建debugQT_DEBUG宏维度 7操作系统产品名 CPU 架构如prettyProductName (x86_64)QSysInfo要求 Qt ≥ 5.4维度 9发布类型release如 AppImage、Snap、Flatpak 等发布渠道qApp-property(release)再加上 Matomo/Piwik 跟踪协议自带的浏览器用户代理信息包含操作系统、屏幕分辨率等环境数据就构成了 FAQ 中屏幕分辨率、操作系统、QOwnNotes 版本这些基础字段。4.2 应用启动时上报的事件在 main.cpp 中应用启动后会通过MetricsService依次发送一组事件全部以app/为前缀含义非常直白事件路径事件类别/动作内容app/start访问visit应用启动app/qt-version-buildapp / qt version build编译所用的 Qt 版本app/qt-version-runtimeapp / qt version runtime运行时加载的 Qt 版本app/themeapp / theme当前图标主题名app/releaseapp / release发布渠道类型app/portableapp / portable是否运行在便携模式yes/noapp/stylesapp / styles仅 Snap 版可用的 Qt 样式列表app/product-typeapp / product-type操作系统产品类型如fedora、ubuntuapp/platformapp / platform平台类别linux / mac / windows / otherapp/localeapp / locale系统 locale 及界面语言设置这些启动事件正是 FAQ 所说操作系统和 QOwnNotes 版本这类信息的具体实现全部用于回答用户在什么环境下运行 QOwnNotes。4.3 运行过程中上报的事件除了启动信息应用在运行中也会上报某些动作被执行了这类事件。以下是在仓库源码中可以检索到的真实示例mainwindow.cpp上报app/has-cloud-settings是否已配置云同步与app/editor-color-schema-count编辑器配色方案数量mainwindow.cpp应用退出时上报app/endmainwindow.cpp切换当前笔记时上报note/current-note/changedmainwindow.cpp用户触发某个菜单动作时上报action/objectNamewelcomedialog.cpp欢迎向导中的每一步下一步、返回、完成、设置笔记文件夹、打开云设置等都会上报welcome-dialog/...事件noteindexmanager.cpp加载笔记列表后上报note/list/loaded附带笔记数量scripting service大量脚本 API 被调用时上报scripting/方法名事件tododialog.cpp加载/保存待办事项时上报todo/...事件scriptrepositorydialog.cpp安装脚本仓库脚本时上报script-repository/install/identifier。可以看到事件上报的粒度是哪个功能被使用而不是笔记里写了什么。这些数据正是 FAQ 所说哪些功能最受欢迎、哪些少有人用的统计来源。4.4 心跳机制heartbeat除了 visit 与 eventMetricsService还实现了独立的心跳上报metricsservice.cpp首次心跳以一次普通访问事件app/heartbeat发送之后的心跳通过sendPing()发送用于维持会话计数心跳受独立的设置项appMetrics/disableAppHeartbeat控制与主跟踪开关相互独立。五、开源可验证在源码中检索 sendVisitIfEnabled 与 sendEventIfEnabledQOwnNotes 是自由开源软件FOSS官方 FAQ 特意指出任何时刻你都可以在源码中检索sendVisitIfEnabled和sendEventIfEnabled两个方法亲眼确认到底发送了什么。这两个方法是整个指标体系的总闸门其实现位于 metricsservice.cppvoid MetricsService::sendVisitIfEnabled(const QString path, const QString actionName) { SettingsService settings; if (!settings.value(QStringLiteral(appMetrics/disableTracking)).toBool()) { sendVisit(path, actionName); } } void MetricsService::sendEventIfEnabled(const QString path, const QString eventCategory, const QString eventAction, const QString eventName, int eventValue) { SettingsService settings; if (!settings.value(QStringLiteral(appMetrics/disableTracking)).toBool()) { _piwikTracker-sendEvent(path, eventCategory, eventAction, eventName, eventValue); } }方法名中的IfEnabled语义很明确只有当设置项appMetrics/disableTracking为假即未关闭跟踪时才会真正发送数据。因此全仓库范围内所有以sendVisitIfEnabled(...)/sendEventIfEnabled(...)形式出现的调用点就是完整、可审计的上报清单。对应的方法声明可见 metricsservice.h。六、如何关闭使用数据收集FAQ 给出了两条关闭途径首次启动时在欢迎窗口Welcome Dialog中直接关闭之后随时在应用的设置窗口中关闭。结合源码设置项位于网络设置页NetworkSettingsWidget对应 networksettingswidget.cppappMetricsCheckBox复选框对应设置键appMetrics/disableTracking勾选即禁用跟踪appHeartbeatCheckBox复选框对应设置键appMetrics/disableAppHeartbeat独立禁用心跳。在 networksettingswidget.cpp 中勾选禁用使用跟踪时还会弹出一个二次确认对话框提示匿名使用数据有助于决定 QOwnNotes 接下来改进哪些部分、修复哪些 bug请在实在无法接受时才关闭默认按钮为否即不关闭避免误操作。另外值得注意的一个细节networksettingswidget.cpp 中当你关闭跟踪时QOwnNotes 会发送最后一条settings/app-metrics-disabled访问记录——这是为了让统计端能确认关闭动作确实发生了之后便不再有任何数据上报。FAQ 还提到一个贴心设计如果用户过早关掉了欢迎窗口应用还会弹出第二个窗口专门解释 metrics 机制确保用户知情。七、为什么默认不关闭FAQ 解释了这一设计决策默认设置默认开启是关键如果默认关闭开发者将拿不到有统计意义的数据整个决策支撑就失去了意义对多数人无感知多数用户并不关心统计数据的去留给在乎的用户以选择权在意隐私、但又不希望替开发者做该改进什么决策的用户可以在应用启动时随手关闭。这属于默认开启、随时可关、源码可审计的经典开源软件遥测模式同时以自托管 Matomo、IP 匿名化、不收集笔记内容三大约束控制隐私边界。八、隐私边界小结问题答案数据存到哪里项目自托管的 Matomo 服务器p.qownnotes.org仅两名核心开发者可访问不与第三方共享是否匿名是服务器接收后即匿名化如移除 IP收集哪些环境信息屏幕分辨率、操作系统、发行版、CPU 架构、Qt 版本、QOwnNotes 版本、发布渠道、界面语言等收集哪些行为信息功能使用事件如应用启动/退出、打开对话框、切换笔记、加载笔记列表、脚本 API 调用、安装脚本等是否收集笔记内容否笔记正文、笔记文件名、密码等一概不收集如何验证检索源码中的sendVisitIfEnabled/sendEventIfEnabled调用点全量上报清单可审计如何关闭首次启动欢迎窗口或设置 → 网络设置页勾选禁用使用跟踪对应appMetrics/disableTracking如果你对隐私有较高要求可以直接关闭跟踪如果你愿意帮助这个单人维护的开源项目做得更好保留默认设置即可——无论选择哪种数据边界都在源码中明明白白摆在那里。赞分享桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载相关推荐QOwnNotes 匿名使用数据Metriken机制解析为何采集、采集什么、如何关闭与源码级验证QOwnNotes 匿名使用数据Metriken机制解析为何采集、采集什么、如何关闭与源码级验证 QOwnNotes 是一款开源纯文本笔记与待办事项管理软桌面应用Coroot 匿名使用统计机制详解收集了哪些数据、底层如何采集以及如何彻底关闭Coroot 匿名使用统计机制详解收集了哪些数据、底层如何采集以及如何彻底关闭 Coroot 默认开启匿名使用统计Anonymous usage stati可观测性指标监控链路追踪APMfg-data-profiling 分析与遥测机制解析匿名使用数据采集原理与关闭指南fg data profiling 分析与遥测机制解析匿名使用数据采集原理与关闭指南 本篇技术指南围绕 fg data profiling ydata pr数据分析数据可视化数据科学上一篇2D游戏开发与LibGDX教程下一篇Infer 对 Erlang if 表达式无真分支的静态检测NO_TRUE_BRANCH_IN_IF 告警全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑