遥测¶
对于启用了“发送匿名使用数据”的客户端,Focus 会向 Mozilla 的遥测服务发送“核心” Ping 和“事件” Ping。可以在应用设置中禁用发送遥测数据。默认情况下,“Focus for Android” 的版本启用了遥测数据(“选择退出”),而“Klar for Android” 的版本默认禁用了遥测数据。
核心 Ping¶
Focus for Android 在应用转到后台时会创建并尝试发送“核心” Ping。此核心 Ping 使用与 Firefox for Android 相同的格式,并在 firefox-source-docs.mozilla.org 上有记录。
事件 Ping¶
除了核心 Ping 之外,还会生成用于 UI 遥测的事件 Ping,并在应用转到后台时立即发送。
设置¶
作为事件 Ping 的一部分,会发送用户设置的最新状态(默认值以**粗体**显示)
| 设置 | 键 | 值 (*) |
|---|---|---|
| 默认搜索引擎 | pref_search_engine | 捆绑引擎名称/custom(**) |
| 拦截广告跟踪器 | pref_privacy_block_ads | true/false |
| 拦截分析跟踪器 | pref_privacy_block_analytics | true/false |
| 拦截社交跟踪器 | pref_privacy_block_social | true/false |
| 拦截内容跟踪器 | pref_privacy_block_other | true/false |
| 拦截网页字体 | pref_performance_block_webfonts | true/false |
| 拦截图像 | pref_performance_block_images | true/false |
| 语言环境覆盖 | pref_locale | 空字符串/locale-code(***) |
| 默认浏览器 | pref_default_browser | true/false |
| 隐身模式 | pref_secure | true/false |
| 自动填充(默认) | pref_autocomplete_preinstalled | true/false |
| 自动填充(自定义) | pref_autocomplete_custom | true/false |
| 在 Firefox Focus 主屏幕上显示提示 | pref_key_tips | true/false |
(*) 所有值均以 String 格式发送。
(**) 如果默认值是捆绑引擎之一,则为引擎名称。否则,仅为 custom。
(***) 空字符串值表示已选择“系统默认”语言环境。
事件¶
事件 Ping 包含事件列表(请参阅 readthedocs.io 上的事件格式),用于以下操作
会话¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 开始会话(应用位于前台) | 操作 | 前台 | 应用 | |
| 停止会话(应用位于后台) | 操作 | 后台 | 应用 |
浏览¶
| 事件 | 类别 | 方法 | 对象 | 值 | extras。 |
|---|---|---|---|---|---|
| 输入 URL | 操作 | type_url | 搜索栏 | ||
| 输入搜索内容 | 操作 | type_query | 搜索栏 | ||
| 点击搜索提示(“搜索…”) | 操作 | select_query | 搜索栏 | ||
| 来自第三方应用的链接 | 操作 | intent_url | 应用 | ||
| 来自应用的文本选择操作 | 操作 | text_selection_intent | 应用 | ||
| 长按图像/链接 | 操作 | long_press | 浏览器 | ||
| “下拉刷新” | 操作 | swipe | 浏览器 | reload | |
| 显示自动填充弹出窗口 | 操作 | show | autofill | ||
| 执行自动填充 | 操作 | click | autofill | ||
| 根据提示启用搜索建议 | 操作 | click | search_suggestion_prompt | true/false |
自定义标签¶
| 事件 | 类别 | 方法 | 对象 | 值 | extra |
|---|---|---|---|---|---|
| 打开自定义标签 | 操作 | intent_custom_tab | 应用 | 选项* |
|
| 点击“关闭”按钮 | 操作 | click | custom_tab_close_bu | 标签* |
|
| 点击“操作”按钮 | 操作 | click | custom_tab_action_bu | ||
| 选择自定义菜单项 | 操作 | open | 菜单 | custom_tab |
(*) options 是第三方应用请求的已启用自定义标签选项的 JSON 映射,例如 [hasToolbarColor, hasCloseButton]
(*) tabs 是一个 JSON 映射,包含当前选定标签的位置和打开标签的总数
{
"selected": "2" // Currently selected tab (Zero-based numbering; -1 if no tab is selected)
"total": "5" // Total number of open tabs
}
清除会话¶
| 事件 | 类别 | 方法 | 对象 | 值 | extras |
|---|---|---|---|---|---|
| 点击浮动操作按钮 | 操作 | click | erase_button | 标签* |
|
| 点击后退按钮:主屏幕 | 操作 | click | back_button | erase_home | 标签* |
| 点击后退按钮:上一个应用 | 操作 | click | back_button | erase_app | 标签* |
| 点击通知 | 操作 | click | notification | erase | 标签* |
| 点击通知“清除并打开” | 操作 | click | notification_action | erase_open | 标签* |
| 点击主屏幕快捷方式 | 操作 | click | shortcut | erase | 标签* |
| 在标签栏中清除历史记录 | 操作 | click | tabs_tray | erase | 标签* |
| 用户从“最近使用的应用”中移除应用 | 操作 | click | recent_apps | erase | 标签* |
(*) tabs 是一个 JSON 映射,包含当前选定标签的位置和打开标签的总数
{
"selected": "2" // Currently selected tab (Zero-based numbering; -1 if no tab is selected)
"total": "5" // Total number of open tabs
}
通知¶
| 事件 | 类别 | 方法 | 对象 | 值 | extras |
|---|---|---|---|---|---|
| 点击通知(清除) | 操作 | click | notification | erase | |
| 点击“打开”操作 | 操作 | click | notification_action | open | |
| 点击“清除并打开”操作 | 操作 | click | notification_action | erase_open | 标签* |
(*) tabs 是一个 JSON 映射,包含当前选定标签的位置和打开标签的总数
{
"selected": "2" // Currently selected tab (Zero-based numbering; -1 if no tab is selected)
"total": "5" // Total number of open tabs
}
页面加载时间直方图¶
| 事件 | 类别 | 方法 | 对象 | extras |
|---|---|---|---|---|
| 前台会话页面加载时间的直方图 | histogram | 前台 | 浏览器 | histogram* |
(*) 此事件附加了 200 个 extras,每个 extras 都是一个 100 毫秒的存储桶,键为存储桶中的最小值,值为存储桶中相应的事件数。超过 20,000 的任何内容都放在最后一个存储桶中。例如
{”0":"2"}
{“100”:"3"}
...
{"19900", "4"}
URI 计数¶
| 事件 | 类别 | 方法 | 对象 | extra |
|---|---|---|---|---|
| 会话恢复后,访问的总非唯一 http(s) URI 计数,包括页面重新加载,但不包括后台页面请求以及嵌入页面或隐私浏览中的 URI。 | 操作 | open | 浏览器 | {"total_uri_count": num } |
| 会话恢复后,访问的唯一域的计数。顶级域下的子域在第一级之后进行聚合(即 test.example.com 和 other.example.com 仅计算一次)。这不包括后台页面请求以及嵌入页面或隐私浏览中的域。 | 操作 | open | 浏览器 | {"unique_domains_count": num } |
下载¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 点击“下载” | 操作 | click | download_dialog | download |
| 点击“取消” | 操作 | click | download_dialog | cancel |
从图标打开 Focus¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 从图标启动 Focus | 操作 | click | app_icon | open |
| 从图标恢复 Focus | 操作 | click | app_icon | resume |
添加到主屏幕¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 在对话框中点击“添加到主屏幕” | 操作 | click | add_to_homescreen_dialog | add_to_homescreen |
| 在对话框中点击“取消” | 操作 | click | add_to_homescreen_dialog | cancel |
| 从主屏幕快捷方式打开 Focus | 操作 | click | homescreen_shortcut | open |
设置¶
| 事件 | 类别 | 方法 | 对象 | 值 | extras |
|---|---|---|---|---|---|
| 设置已更改 | 操作 | change | setting | { "to": <value> } |
|
| 添加自动填充域 | 操作 | save | autocomplete_domain | { "source": <value> } |
|
| 移除自动填充域 | 操作 | remove | autocomplete_domain | { "total": 5 } |
|
| 重新排序自动填充域 | 操作 | reorder | autocomplete_domain | options* |
|
| 打开例外设置 | 操作 | open | allowlist | ||
| 移除例外域 | 操作 | remove | allowlist | { "total": 5 } |
|
| 移除所有例外域 | 操作 | remove_all | allowlist | ||
| 点击默认搜索引擎 | 操作 | open | search_engine_setting | ||
| 更改默认搜索引擎 | 操作 | save | search_engine_setting | {"source": src* } |
|
| 选择“移除”引擎屏幕 | 操作 | remove | search_engine_setting | ||
| 删除搜索引擎 | remove | remove | remove_search_engines | {"selected": num* } |
|
| 恢复捆绑引擎 | 操作 | restore | search_engine_setting | ||
| 选择“添加其他引擎” | 操作 | show | custom_search_engine | ||
| 保存自定义搜索引擎 | 操作 | save | custom_search_engine | {"success": bool* } |
|
| 点击“添加搜索引擎”ℹ️ | 操作 | click | search_engine_learn_more | ||
| 使用默认浏览器打开提示 | 操作 | show | make_default_browser_open_with | ||
| 设置默认浏览器提示 | 操作 | show | make_default_browser_settings |
(*) options 包含
{
"from": 5
"to": 2
}
(*) src 可以是 bundled 或 custom
(*) num 选择要删除的引擎数
(*) bool 如果成功保存,则为 true,如果验证错误,则为 false
首次运行¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 显示首次运行页面 | 操作 | show | firstrun | page* |
| 按下跳过按钮 | 操作 | click | firstrun | skip |
| 按下完成按钮 | 操作 | click | firstrun | finish |
(*) 页面编号从 0 开始。最初,当显示首次运行教程时,会触发第一个页面 (0) 的事件。
多任务/标签¶
| 事件 | 类别 | 方法 | 对象 | 值 | extras |
|---|---|---|---|---|---|
| 上下文菜单:在新标签页中打开链接 | 操作 | open | browser_contextmenu | tab | 标签* |
| 打开标签栏 | 操作 | show | tabs_tray | ||
| 关闭标签栏(后退/点击外部) | 操作 | hide | tabs_tray | ||
| 切换到标签栏中的标签 | 操作 | click | tabs_tray | tab | 标签* |
| 在标签栏中清除历史记录 | 操作 | click | tabs_tray | erase | 标签* |
(*) tabs 是一个 JSON 映射,包含当前选定标签的位置和打开标签的总数
{
"selected": "2" // Currently selected tab (Zero-based numbering; -1 if no tab is selected)
"total": "5" // Total number of open tabs
}
主屏幕提示¶
| 事件 | 类别 | 方法 | 对象 | 值 |
|---|---|---|---|---|
| 显示在新标签页中打开提示 | 操作 | show | tip | open_in_new_tab_tip |
| 显示添加到主屏幕提示 | 操作 | show | tip | add_to_homescreen_tip |
| 显示禁用跟踪保护提示 | 操作 | show | tip | disable_tracking_protection_tip |
| 显示禁用主屏幕提示提示 | 操作 | show | tip | disable_tips_tip |
| 显示设置默认浏览器提示 | 操作 | show | tip | default_browser_tip |
| 显示自动填充 URL 提示 | 操作 | show | tip | add_autocomplete_url_tip |
| 点击在新标签页中打开提示 | 操作 | click | tip | open_in_new_tab_tip |
| 点击添加到主屏幕提示 | 操作 | click | tip | add_to_homescreen_tip |
| 点击禁用提示提示 | 操作 | click | tip | disable_tips_tip |
| 点击设置默认浏览器提示 | 操作 | click | tip | default_browser_tip |
| 点击自动填充 URL 提示 | 操作 | click | tip | add_autocomplete_url_tip |
| 启用/禁用主屏幕提示 | 操作 | click | tip | add_to_homescreen_tip |
| 显示调查提示 | 操作 | show | tip | survey_tip |
| 点击调查提示 | 操作 | click | tip | survey_tip |
| 显示调查(es)提示 | 操作 | show | tip | survey_tip_es |
| 点击调查(es)提示 | 操作 | click | tip | survey_tip_es |
| 显示调查(fr)提示 | 操作 | show | tip | survey_tip_fr |
| 点击调查(fr)提示 | 操作 | click | tip | survey_tip_fr |
SSL 错误¶
| 事件 | 类别 | 方法 | 对象 | extras |
|---|---|---|---|---|
| 页面 SSL 错误 | error | page | 浏览器 | error* |
| 资源 SSL 错误 | error | resource | 浏览器 | error* |
(*)error 是一个 JSON 映射,包含主要 SSL 错误
{
"error_code": "SSL_DATE_INVALID" // Primary SSL Error
}
| 可能的错误代码 |
|---|
| SSL_DATE_INVALID |
| SSL_EXPIRED |
| SSL_IDMISMATCH |
| SSL_NOTYETVALID |
| SSL_UNTRUSTED |
| SSL_INVALID |
| 未定义的 SSL 错误 |
限制¶
一个事件 Ping 将包含最多但不超过 500 个事件。
每个类型(核心/事件)最多存储 40 个 Ping 在磁盘上,以便稍后上传。
每天发送的 Ping 不超过 100 个。
实现说明¶
每当主活动的 onStop() 回调被触发时,就会生成(并存储在磁盘上)事件 Ping。这发生在应用程序的主屏幕不再可见时(应用程序处于后台或另一个屏幕显示在应用程序之上)。
每当我们存储 Ping 时,我们也会安排上传。我们为此使用 Android 的 JobScheduler API。这允许系统在方便的时候并且满足某些条件时运行后台任务。我们指定的唯一条件是我们需要一个活动的网络连接。在大多数情况下,此作业在应用程序进入后台后立即执行。
每当上传失败时,我们都会安排重试。第一次重试将在 30 秒后发生(如果此时没有活动的网络连接,则稍后发生)。对于后续重试,使用指数退避策略:[30 秒] * 2 ^ (num_failures - 1)
每当应用程序进入前台并再次发送到后台时,可能会发生较早的上传重试(先前计划的作业被重置,我们重新开始)。