“核心” Ping(已弃用)

此移动设备专用 Ping 旨在以简洁的格式提供最关键的数据,以便能够频繁上传。

由于此 Ping 用于衡量留存率,因此应在每次浏览器打开时发送。

提交将根据 Edge 服务器规范进行

/submit/telemetry/docId/docType/appName/appVersion/appUpdateChannel/appBuildID
  • docId 是用于去重的 UUID

  • docType 为“核心”

  • appName 为“Fennec”

  • appVersion 是应用程序的版本(例如“46.0a1”)

  • appUpdateChannel 为“发布版”、“测试版”等。

  • appBuildID 是构建编号

注意:以下计数(例如搜索和使用时间)是“自上次 Ping 以来”,而不是整个应用程序生命周期的总数。

结构

{
  "v": 10, // ping format version
  "clientId": <string>, // client id, e.g.
                        // "c641eacf-c30c-4171-b403-f077724e848a"
  "seq": <positive integer>, // running ping counter, e.g. 3
  "locale": <string>, // application locale, e.g. "en-US"
  "os": <string>, // OS name.
  "osversion": <string>, // OS version.
  "device": <string>, // Build.MANUFACTURER + " - " + Build.MODEL
                      // where manufacturer is truncated to 12 characters
                      // & model is truncated to 19 characters
  "arch": <string>, // e.g. "arm", "x86"
  "profileDate": <pos integer>, // Profile creation date in days since
                                // UNIX epoch.
  "defaultSearch": <string>, // Identifier of the default search engine,
                             // e.g. "yahoo".
  "displayVersion": <string>, // Version displayed to user, e.g. 57.0b3 (optional)
  "distributionId": <string>, // Distribution identifier (optional)
  "campaignId": <string>, // Adjust's campaign identifier (optional)
  "created": <string>, // date the ping was created
                       // in local time, "yyyy-mm-dd"
  "tz": <integer>, // timezone offset (in minutes) of the
                   // device when the ping was created
  "sessions": <integer>, // number of sessions since last upload
  "durations": <integer>, // combined duration, in seconds, of all
                          // sessions since last upload
  "searches": <object>, // Optional, object of search use counts in the
                        // format: { "engine.source": <pos integer> }
                        // e.g.: { "yahoo.suggestion": 3, "other.listitem": 1 }
  "experiments": [<string>, /* … */], // Optional, array of identifiers
                                // for the active experiments
  "accessibilityServices": [<string>, /* … */], // Optional, array of identifiers for
                                                // enabled accessibility services that
                                                // interact with our android products.
  "flashUsage": <integer>, // number of times flash plugin is played since last upload
  "defaultBrowser": <boolean> // true if the user has set Firefox as default browser
  "bug_1501329_affected": <boolean>  // true if Firefox previously used canary clientId
                                     // when submitting telemetry
  "fennec": <object> // Fennec only.
                     // Block of a variety of fields of different types.
                     // Used to understand the usage of Fennec features in the release population
                     // to understand when Fenix is ready to support Fennec users.
  {
    "new_tab": {
      "top_sites_clicked": <int>, // Number of times a Top Site was opened from the Awesome Screen.
                                  // Resets after each sent core ping.
      "pocket_stories_clicked": <int>, // Number of time a Pocket Recommended website was opened
                                       // from the Awesome Screen.
                                       // Resets after each sent core ping.
    }
    "settings_advanced": {
      "restore_tabs": <boolean>, // State of the "Settings/Advanced/Restore Tabs" setting
      "show_images": <string>, // State of the "Settings/Advanced/Show images" setting
                               // Value will be be "user-specified" for any non-default values
      "show_web_fonts": <boolean>,  // State of the "Settings/Advanced/Show web fonts" setting
    },
    "settings_general": {
      "full_screen_browsing": <boolean>, // Current state of the
                                         // "Settings/General/Full-screen browsing" setting.
      "tab_queue": <boolean>, // State of the "Settings/General/Tab queue" setting.
      "tab_queue_usage_count": <int>, // Number of tabs opened through Tab Queue.
                                      // Resets after each sent core ping.
      "compact_tabs": <boolean>, // State of the "Settings/General/Compact tabs" setting.
      "homepage": {
        "custom_homepage": <boolean>, // "true" if not "about:home".
        "custom_homepage_use_for_newtab": <boolean>, // If the "Settings/General/Home/Also use for new tabs"
                                                     // setting is enabled.
        "topsites_enabled": <boolean>, // If the "Settings/General/Home/Top Sites"
                                       // setting is set to "Show".
        "pocket_enabled": <boolean>, // If the "Settings/General/Home/Top Sites/Recommended by Pocket"
                                     // setting is enabled.
        "recent_bookmarks_enabled": <boolean>, // If the "Settings/General/Home/Top Sites/
                                               //          Additional Content/Recent Bookmarks"
                                               // setting is enabled.
        "visited_enabled": <boolean>, // If the "Settings/General/Home/Top Sites/Additional Content/Visited"
                                      // setting is enabled.
        bookmarks_enabled": <boolean>, // If the "Settings/General/Home/Bookmarks" setting is set to "Show".
        "history_enabled": <boolean>, // If the "Settings/General/Home/History" setting is set to "Show".
      }
    },
    "settings_privacy": {
      "do_not_track": <boolean>, // If the "Settings/Privacy/Do not track" is enabled.
      "master_password": <boolean>, // If the "Settings/Privacy/Use master password" is enabled.
      "master_password_usage_count": <int>, // Number of times the user has entered their master password.
                                            // Resets after each sent core ping.
    },
    "settings_notifications": {
      "product_feature_tips": <boolean>, // If the "Settings/Notifications/Product and feature tips"
                                         // setting is enabled.
    },
    "addons": {
      "active": [addon_id_1, addon_id_2, …, ], // From all installed addons, which ones are active.
      "disabled": [addon_id_1, addon_id_2, …], // From all installed addons, which ones are disabled.
    },
    "page_options": {
      "save_as_pdf": <int>, // Number of times the user has used "Page/Save to PDF".
                            // Resets after each sent core ping.
      "print": <int>, // Number of times the user has used the "Page/Print".
                      // Resets after each sent core ping.
      "total_added_search_engines": <int>, // The absolute number of user added search engines,
                                           // not just those added during this session.
      "total_sites_pinned_to_topsites": <int>, // The absolute number of times the user has used
                                               // the "Pin Site" functionality.
                                               // Not just those added during this session.
      "view_source": <int>, // Number of times the user has used the "Page/View Page Source".
                            // Resets after each sent core ping.
      "bookmark_with_star": <int>, // The number of times the user has used the "Menu / <Star>".
                                   // Resets after each sent core ping.
      "current_pwas_count": <int>, // On Android >=25 - a positive number of PWAs currently on
                                   // homescreen, installed from this app.
                                   // On Android <25 - a default of "-1".
    },
    "sync": {
      "only_over_wifi": <boolean>, // "true" if the "Settings/Sync/Sync only over Wi-Fi"
                                   // setting is enabled.
                                   // null if the user is not signed into Sync.
    }
  }
}

字段详情

设备

device 字段填充了硬件制造商指定的信息。因此,它可能过长,并使用过多的有限用户数据。为了避免这种情况,我们限制了字段的长度。我们更有可能发生制造商内部模型的冲突(例如“Galaxy S5”与“Galaxy Note”),而不是缩短的制造商名称的冲突,因此我们为模型提供了比制造商更多的字符。

分发 ID

distributionId 包含给定分发版本的 preferences.json 中指定的分发 ID。有关分发的更多信息,请参见 此处

它是可选的。

活动 ID

campaignId 包含活动标识符,例如“3ly8t0”。它由 Adjust 生成,它只能用于识别活动,但不能定位到特定用户。

它是可选的,因为并非每个人一开始都有活动。

默认搜索

在 Android 上,此字段可能为 null。要获取引擎,我们依赖于 SearchEngineManager#getDefaultEngine,它会在多个位置进行搜索以查找搜索引擎标识符

  • 共享首选项

  • 分发版(如果存在)

  • 本地化的默认引擎

如果无法检索标识符,则此字段为 null。如果检索到标识符,我们将尝试从搜索插件(按顺序)创建搜索引擎实例

  • 在分发版中

  • 来自与浏览器一起提供的本地化插件

  • 安装在配置文件目录中的第三方插件

如果插件无法创建搜索引擎实例,则此字段也为 null

当将自定义搜索引擎设置为默认搜索引擎时,此字段也可能为 null

会话 & 时长

在 Android 上,会话是指 Firefox 处于前台焦点的时间。sessions 跟踪自上次上传以来的会话数,而 durations 是所有这些会话的累积时长(以秒为单位)。请注意,显示对话框(包括 Firefox 对话框)将使 Firefox 失去焦点并结束当前会话。

当 Firefox 完全隐藏时记录会话的实现是可取的(例如,为了避免上述对话框问题),但是,实现起来更复杂,因此我们选择不这样做,至少在初始实现中是这样。

配置文件日期

在 Android 上,此值在配置文件创建时创建并检索,或者对于旧版配置文件,从包安装时间获取(注意:这与配置文件创建时间并不完全相同,但我们为了简化实现而妥协了)。

此外,在 Android 上,如果发生以下所有事件,则此字段可能为 null

  1. times.json 文件不存在

  2. 无法将包安装日期持久保存到磁盘

我们不只是返回包安装时间(即使无法将日期持久保存到磁盘)的原因是确保值在我们开始发送它后不会更改:我们只想发送一致的值。

搜索

这描述了搜索引擎的使用情况(计数)。格式为 { “<引擎标识符>.<来源>”” : 计数 } 这是可选的,因为用户可能从未使用过搜索功能。启用扩展遥测(预发布版本)与否没有区别。

可能的值

{
   "yahoo.listitem":2,
   "duckduckgo.listitem":1,
   "google.suggestion":1
}

<引擎标识符>:搜索引擎的标识符。标识符的收集方式与桌面相同。我们仅在以下情况下记录搜索引擎名称:

  • 内置或建议的搜索引擎带有 ID(包括各种分发场景中的合作伙伴搜索引擎)。如果它不是内置引擎,我们将显示“null”或“其他”。

  • 如果用户启用了“健康报告”和核心 Ping。

<来源>:它来自 UI 遥测中的某个“方法”。可能的值

  • actionbar:用户在 URL 地址栏中键入内容并按 Enter 使用默认搜索引擎

  • listitem:用户从屏幕底部辅助搜索引擎列表中选择搜索引擎

  • suggestion:用户点击搜索建议,或者在禁用建议的情况下,点击对应主引擎的行

辅助功能服务

这描述了用户设备上当前启用了哪些辅助功能服务,以及这些服务可能与我们的产品交互。这是可选的,因为用户通常没有启用任何辅助功能服务。如果存在,则值为辅助功能服务 ID 列表。

fennec.new_tab.top_sites_clicked

top_sites_clicked 字段包含自上次发送核心 Ping 以来从新标签页打开热门网站的次数。此计数器在发送核心 Ping 后重置。

Fennec.new_tab.pocket_stories_clicked

pocket_stories_clicked 包含自上次发送核心 Ping 以来从新标签页打开 Pocket 故事的次数。此计数器在发送核心 Ping 后重置。

Fennec.settings_advanced.restore_tabs

restore_tabs 字段包含“设置/高级/恢复标签”设置的状态。对于“始终恢复”,它为 true;对于“退出 Firefox 后不恢复”,它为 false。该值在发送核心 Ping 时确定。

Fennec.settings_advanced.show_images

show_images 字段包含“设置/高级/显示图像”设置的状态。如果设置是“始终”,则为字符串值“default”,否则为“user~specified”。该值在发送核心 Ping 时确定。

Fennec.settings_advanced.show_web_fonts

show_web_fonts 字段是布尔值,包含“设置/高级/显示网页字体”设置的当前状态。该值在发送核心 Ping 时确定。

Fennec.settings_general.full_screen_browsing

full_screen_browsing 字段是布尔值,包含“设置/常规/全屏浏览”设置的当前状态。该值在发送核心 Ping 时确定。

Fennec.settings_general.tab_queue

tab_queue 字段是布尔值,包含“设置/常规/标签队列”设置的当前状态。该值在发送核心 Ping 时确定。

Fennec.settings_general.tab_queue_usage_count

tab_queue_usage_count 是一个计数器,通过标签队列打开的标签数会递增。它包含自上次发送核心 Ping 以来打开的已排队标签的总数。此计数器在发送核心 Ping 后重置。

Fennec.settings_general.compact_tabs

compact_tabs 字段是布尔值,包含“设置/常规/紧凑标签”设置的当前状态。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.custom_homepage

如果主页未设置为默认的 about:home,则将 custom_homepage 字段设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.custom_homepage_use_for_newtab

如果“设置/常规/主页/也用于新标签页”设置已启用,则将 custom_homepage_use_for_newtab 字段设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.topsites_enabled

如果“设置/常规/主页/热门网站”设置设置为“显示”,则 topsites_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.pocket_enabled

如果“设置/常规/主页/热门网站/Pocket 推荐”设置已启用,则 pocket_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.recent_bookmarks_enabled

如果启用了“设置/常规/主页/热门网站/其他内容/最近书签”设置,则 recent_bookmarks_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.visited_enabled

如果启用了“设置/常规/主页/热门网站/其他内容/已访问”设置,则 visited_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.bookmarks_enabled

如果“设置/常规/主页/书签”设置为“显示”,则 bookmarks_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_general.homepage.history_enabled

如果“设置/常规/主页/历史记录”设置为“显示”,则 history_enabled 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_privacy.do_not_track

如果启用了“设置/隐私/请勿跟踪”,则 do_not_track 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_privacy.master_password

如果启用了“设置/隐私/使用主密码”,则 master_password 设置为 true。该值在发送核心 Ping 时确定。

Fennec.settings_privacy.master_password_usage_count

master_password_usage_count 字段包含用户自上次发送核心 Ping 以来输入主密码的次数。此计数器在发送核心 Ping 后重置。

Fennec.settings_notifications.product_feature_tips

如果启用了“设置/通知/产品和功能提示”设置,则 product_feature_tips 设置为 true。该值在发送核心 Ping 时确定。

fennec.page_options.save_as_pdf

save_as_pdf 字段包含用户自上次发送核心 Ping 以来使用“页面/保存为 PDF”功能的次数。此计数器在发送核心 Ping 后重置。

fennec.page_options.print

print 字段包含用户自上次发送核心 Ping 以来使用“页面/打印”功能的次数。此计数器在发送核心 Ping 后重置。

fennec.page_options.total_added_search_engines

total_added_search_engines 是一个绝对值,包含用户手动添加的搜索引擎数量。该值在发送核心 Ping 时确定,并且永远不会重置为零。

fennec.page_options.total_sites_pinned_to_topsites

total_sites_pinned_to_topsites 是一个绝对值,包含用户已固定到热门网站的网站数量。该值在发送核心 Ping 时确定,并且永远不会重置为零。

fennec.page_options.view_source

view_source 字段包含用户自上次发送核心 Ping 以来使用“页面/查看页面源代码”功能的次数。此计数器在发送核心 Ping 后重置。

Fennec.page_options.bookmark_with_star

bookmark_with_star 字段包含用户自上次发送核心 Ping 以来使用“菜单 / <星号>”功能的次数。此计数器在发送核心 Ping 后重置。

Fennec.page_options.current_pwas_count

current_pwas_count 字段包含此应用程序当前安装的 PWA 数量。由于仅在 Android >= 25 上提供用于查询此内容的 Android API,因此对于较低版本的 Android,此键的值将为“-1”。该值在发送核心 Ping 时确定。

Fennec.sync.only_over_wifi

如果启用了“设置/同步/仅通过 Wi-Fi 同步”设置,则 only_over_wifi 设置为 true。该值在发送核心 Ping 时确定。如果用户未登录同步,则此值设置为 null。该值在发送核心 Ping 时确定。

其他参数

HTTP“日期”标头

此标头用于跟踪核心 Ping 的提交日期,格式由 rfc 2616 sec 14.18 等指定(例如,“Tue, 01 Feb 2011 14:00:00 GMT”)。

版本历史

  • v10:添加了 bug_1501329_affected

  • v9

    • 2017 年 4 月:将 arch 更改为包含设备架构,而不是我们构建的架构,以及 accessibilityServices

    • 2017 年 12 月:添加了 defaultBrowser 以了解用户是否已将 Firefox 设置为默认浏览器(2017 年 12 月)

    • 2018 年 5 月:添加了(可选)displayVersion 以轻松区分 Firefox 测试版

  • v8:添加了 flashUsage

  • v7:添加了 sessionCountsessionDuration 以及 campaignId

  • v6:添加了 searches

  • v5:添加了 createdtz

  • v4:当 times.json 不可用时,profileDate 将返回软件包安装时间

  • v3:添加了 defaultSearch

  • v2:添加了 distributionId

  • v1:初始版本 - 发布在 Fennec 45 中。

注释

  • distributionId (v2) 实际上在 profileDate (v4) 之后发布,但已提升到 46,而 profileDate 发布在 47 上。代码中的版本号已更新为递增 (bug 1264492),并且版本历史记录文档也相应地重新排列。

Android 实现注释

在 Android 上,上传器很有可能为给定客户端提供完整数据,但并非 100% 概率。这是一个有意识的决定,是为了使代码更简单。我们可以丢失数据的案例

  • 重置字段测量值(包括递增序列号)和存储要上传的 Ping 不是原子的。Android 可以在这些不同的操作之间终止我们的进程以释放内存压力,因此我们可能会丢失一个 Ping 的数据。该序列号将在服务器上丢失。

  • 如果我们超过磁盘上尚未上传的 Ping 的某个数量,我们将删除旧的 Ping 以节省存储空间。对于这些 Ping,我们将丢失其数据,并且其序列号将在服务器上丢失。

注意:我们绝不希望在不丢失序列号的情况下丢失数据,因此我们能够确定何时发生数据丢失。