提交自定义 Ping¶
可以使用 JavaScript 提交自定义 Ping
TelemetryController.submitExternalPing(type, payload, options)
type
- 一个string
,表示 Ping 的类型,限制为/^[a-z0-9][a-z0-9-]+[a-z0-9]$/i
。payload
- Ping 的实际有效负载数据,必须是 JSON 样式的对象。options
- 可选,包含其他选项的对象addClientId
- 是否将客户端 ID 和配置文件组 ID 添加到 Ping 中,默认为false
addEnvironment
- 是否将环境数据添加到 Ping 中,默认为false
overrideEnvironment
- 一个 JSON 样式的对象,覆盖环境数据
TelemetryController
将使用传递的有效负载和指定的选项组装一个 Ping。该 Ping 将在本地存档,以供 Shield 使用并在 about:telemetry
中检查。如果首选项允许上传遥测 Ping,则 Ping 将在下一次机会上传(这受限于节流、故障重试等)。
重要
Firefox 中的每个新的或更改的数据收集都需要来自数据管理员的 数据收集审查。
提交约束¶
在关闭时提交 Ping 时,不应在遥测关闭后提交。Ping 应至迟在以下时间提交:
在 观察者通知
"profile-before-change"
中在 AsyncShutdown 阶段
sendTelemetry
中
还有其他约束可能导致 Ping 提交被丢弃
无效的 Ping 类型字符串。
无效的有效负载类型:例如,字符串而不是对象。
有效负载过大:我们目前仅丢弃 >1MB 的 Ping,但建议目标大小为 <=10KB。
工具¶
用于设计新 Ping 的有用工具包括
gzipServer - 一个可以在本地运行并接收和保存遥测 Ping 的 Python 脚本。使 Firefox 发送到它可以轻松地检查传出的 Ping。
about:telemetry
- 允许检查本地存档中提交的 Ping,包括所有自定义 Ping。
设计自定义 Ping¶
通常,创建新的自定义 Ping 意味着您不会自动从现有的工具中受益。需要进一步的工作才能使数据显示在 re:dash 或其他分析工具中。
除了 数据收集审查 之外,指导新 Ping 设计的问题还有
- 提交间隔 & 触发器
哪些事件会触发 Ping 提交?
Ping 以什么间隔提交?
是否存在节流机制?
所需的延迟是多少?(提交“至少每天”仍然会导致某些延迟尾部)
Ping 是基于时钟计划提交的吗?还是基于“自会话开始以来的时间”、“自上次 Ping 以来的时间”等?(即,提交量是否会出现尖峰?)
- 大小和数量
提交的有效负载的大小是多少?
包括管道中元数据的完整 Ping 大小是多少?
目标人群是谁?
总体估计数量是多少?
- 数据集
它是选择退出吗?
它是否需要选择退出?
它是否需要在单独的 Ping 中?(为什么数据不能存在于探测器中?)
- 隐私
是否存在泄露 PII 的风险?
如何降低该风险?
- 数据内容
提交的数据是否回答了提出的产品问题?
数据的形状是否允许有效地回答问题?
数据是否仅限于回答问题所需的内容?
数据是否使用通用格式?(即,我们能否重用工具或分析专业知识)