遥测¶
对于启用了“发送匿名使用数据”的客户端,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)
每当应用程序进入前台并再次发送到后台时,可能会发生较早的上传重试(先前计划的作业被重置,我们重新开始)。