前端埋点需求
基于当前
cash_center、wp_h5、roovault已实现埋点链路整理。本期为全新上线,不考虑旧版本兼容;目标是建立统一事件模型、统一字段、敏感信息治理和验收口径。
1. 目标
- 还原用户在借款、提现、还款、绑卡、KYC、登录、补件等核心路径中的行为漏斗。
- 支持按产品、渠道、用户、设备、页面、订单、支付方式、绑卡方式等维度分析转化和失败原因。
- 统一 H5 与 Android 原生埋点语义,避免同一行为多套命名。
- 禁止将卡号、CVV、手机号、BVN/NIN、姓名、地址、收入等敏感值拼进
event_name。 - 埋点失败不能影响业务流程,但需要具备调试和抽样校验能力。
2. 当前实现约束
| 端 | 当前通道 | 当前字段 | 主要问题 |
|---|---|---|---|
cash_center | /dc/buriedPointBatch | channel, uid, event_name, event_page, event_data | 缺 bvn/channel 时不上报;大量字段拼进 event_name;路由自动进出页被注释 |
wp_h5 | /dc/buriedPointBatch/v2 | uid, channel, event_page, event_name, event_data | 字段会被改成 <eventName>_<field>;与 cash_center 协议不完全一致 |
roovault | SensorsDataAPI / DataHub | page, eventName, SDK公共字段 | 原生主要上报 page + eventName,自定义字段弱;业务值也存在拼接进事件名 |
3. 统一上报模型
所有埋点统一按以下模型定义。本期不并行上报旧事件,也不保留旧事件兼容字段。
{
"event_name": "withdraw_page_view",
"event_page": "withdraw_page",
"event_type": "view",
"event_time": 1719820800000,
"event_data": {
"scene": "withdraw",
"content": "loan_amount",
"result": "success",
"error_code": "",
"error_msg": ""
}
}3.1 事件类型
| event_type | 含义 | 触发时机 |
|---|---|---|
view | 页面或模块曝光 | 页面进入、弹窗展示、模块进入视口 |
leave | 页面或模块离开 | 路由离开、WebView 关闭、页面失活 |
click | 点击行为 | 用户主动点击按钮、列表项、Tab、协议、关闭按钮 |
input | 输入行为 | 聚焦、失焦、清空、选择,不上报输入原文 |
submit | 提交行为 | 用户发起提现、还款、绑卡、KYC、补件等 |
result | 业务结果 | 接口成功/失败、页面状态结果、第三方回调结果 |
popup_view | 弹窗曝光 | 弹窗展示 |
popup_click | 弹窗点击 | 弹窗主按钮、关闭、取消 |
error | 前端异常或接口异常 | 异常捕获、接口失败 |
performance | 性能指标 | 页面加载后、关键资源完成后 |
3.2 命名规则
事件名格式:
<scene>_<page_or_module>_<action>示例:
| 推荐事件 | 不推荐事件 |
|---|---|
bank_card_card_number_focus | BankCard_CardNumber_5399**** |
bank_card_submit_click | BankCard_submit |
withdraw_result_popup_click | service_evaluation_pop_submit_click |
kyc_bvn_confirm_click | BVNVerify_confirm_12345678901 |
规则:
- 全部小写,下划线分隔。
event_name只描述行为,不携带运行时值。- 运行时值进入
event_data,且必须脱敏或枚举化。 - 同一行为在 H5 和 Android 使用同一个事件名。
- 本期为全新上线,不考虑旧事件名兼容;所有研发、测试和数据验收均以新事件名为准。
4. 公共字段需求
4.1 外层字段
| 字段 | 类型 | 必填 | 来源 | 说明 |
|---|---|---|---|---|
event_name | string | 是 | 调用方 | 统一事件名 |
event_page | string | 是 | 调用方 | 页面或模块名 |
event_type | string | 是 | 调用方 | view/click/submit/result/... |
event_time | number | 是 | 前端 | 毫秒时间戳 |
uid | string | 否 | 登录态/App bridge | 未登录可为空 |
cust_id | string | 否 | 登录态/App bridge | 有则传 |
channel | string | 是 | productSource/channel/bizCode | 产品或业务渠道 |
biz_code | string | 是 | App/H5配置 | 与服务端业务线一致 |
country | string | 是 | 配置 | 当前主要为 NG |
platform | string | 是 | 前端 | h5/android/ios |
app_name | string | 是 | App bridge/构建配置/运行时配置 | 实际运行的品牌或宿主 App 名称,如 rocketcash/cashnaija |
app_version_code | string | 否 | App bridge:getCurrentAppVersion() | App 内 H5、Android 原生必传;普通浏览器 H5 可为空 |
app_version_name | string | 否 | App bridge:getCurrentAppVersionName() | App 内 H5、Android 原生必传;普通浏览器 H5 可为空 |
h5_version | string | 是 | 构建变量:process.env.VUE_APP_VERSION | H5 发布版本;App 原生页面可为空 |
device_id | string | 否 | App bridge/SDK | 禁止自行生成不稳定 ID |
session_id | string | 是 | 前端 | 一次访问会话 |
trace_id | string | 否 | 链路上下文 | 与业务接口串联 |
4.1.1 版本字段当前实现与取值要求
当前代码实现:
| 项 | wp_h5 当前实现 | cash_center 当前实现 | Android 当前实现 |
|---|---|---|---|
app_version_code | 已有 bridge 方法 getCurrentAppVersion(),在 App.vue 中用于 rocketcash 请求头 X-APP-VERSION;但当前埋点没有统一带上 | 当前 native.js/report.js 未取 App 版本 | H5JsInterface.getCurrentAppVersion() 返回 AppUtils.getAppVersionCode() |
app_version_name | 已有 bridge 方法 getCurrentAppVersionName();当前埋点没有统一带上 | 当前未取 | H5JsInterface.getCurrentAppVersionName() 返回 AppUtils.getAppVersionName() |
h5_version | vue.config.js 已将 `process.env.VUE_APP_VERSION | package.json.version |
需求取值:
wp_h5的h5_version直接取process.env.VUE_APP_VERSION。cash_center需要补齐构建注入,建议在vue.config.js中读取package.json.version并写入process.env.VUE_APP_VERSION,然后埋点取process.env.VUE_APP_VERSION。- App 内 H5 初始化埋点上下文时调用:
getCurrentAppVersion()->app_version_codegetCurrentAppVersionName()->app_version_name
- 普通浏览器 H5 没有 App bridge 时:
app_version_code/app_version_name传空字符串或不传h5_version仍必须传
- Android 原生埋点直接从原生能力取:
AppUtils.getAppVersionCode()->app_version_codeAppUtils.getAppVersionName()->app_version_name
4.1.2 设备信息字段要求
原生和 App 内 H5 上报时可以补充更多设备信息,但必须遵守最小必要原则;不得上传通讯录、WiFi 列表、GPS 明细、安装应用列表等高敏原始数据作为普通行为埋点字段。
当前代码实现:
| 能力 | 当前实现 |
|---|---|
device_id | wp_h5 有 getDeviceId();cash_center 有 getDeviceId();Android 原生可用 DeviceIdRuntime.getDeviceId() |
phone_model | Android H5JsInterface.getDeviceInfo() 当前只返回 deviceId 和 phoneModel |
os_name | wp_h5 有 getOsName();Android 返回固定 Android |
os_version | wp_h5 有 getOsVersion();Android 返回 Build.VERSION.RELEASE |
os_version_code | wp_h5 有 getOsVersionCode();Android 返回 Build.VERSION.SDK_INT |
network_type | wp_h5 有 getNetwork();Android 返回 PhoneUtils.getNetworkState(...) |
timezone | wp_h5 有 getDefaultTimezone();Android 返回 TimeZone.getDefault().getID() |
建议新增/统一上报字段:
| 字段 | 类型 | 来源 | 是否必传 | 说明 |
|---|---|---|---|---|
device_id | string | App bridge/SDK | 否 | App 内 H5、Android 原生尽量传;普通浏览器不自行生成 |
device_model | string | getDeviceInfo().phoneModel / 原生 Build.MODEL | 否 | 机型,如 SM-A125F |
device_brand | string | 建议原生补充 Build.BRAND | 否 | 当前 bridge 未返回,建议补 |
device_manufacturer | string | 建议原生补充 Build.MANUFACTURER | 否 | 当前 bridge 未返回,建议补 |
os_name | string | getOsName() | 是 | Android/iOS/Web |
os_version | string | getOsVersion() | 否 | 系统版本 |
os_version_code | string | getOsVersionCode() | 否 | Android SDK_INT |
network_type | string | getNetwork() | 否 | wifi/4g/5g/none/unknown 等枚举 |
timezone | string | getDefaultTimezone() | 否 | 如 Asia/Shanghai |
user_agent_hash | string | Web UA hash | 否 | 普通 H5 可传 hash,不传完整 UA |
screen_width | number | H5 window.screen.width / 原生 | 否 | 屏幕宽 |
screen_height | number | H5 window.screen.height / 原生 | 否 | 屏幕高 |
4.2 event_data 公共字段
| 字段 | 类型 | 是否必传 | 说明 |
|---|---|---|---|
scene | string | 是 | 业务场景,如 repayment/withdraw/bind_card/kyc |
content | string | 条件必传 | 用户点击或曝光的具体内容标识;点击、弹窗点击、列表项点击类事件必传 |
source_page | string | 条件必传 | 用户进入当前页面或触发当前跳转前所在的页面;页面进入、跨页跳转、Native 打开 H5 时必传 |
target_page | string | 条件必传 | 当前点击或跳转行为将要到达的目标页面;点击会产生跳转、打开外链或跳 Native 页面时必传 |
duration_ms | number | 条件必传 | 停留时长;页面离开、模块离开类事件必传 |
order_id | string | 条件必传 | 借款/还款/支付订单 ID;事件已经产生或明确关联某一笔业务订单时必传 |
loan_id | string | 条件必传 | 贷款 ID;事件已经明确关联某一笔贷款时必传 |
payment_method | string | 条件必传 | 支付方式枚举;选择支付方式、提交还款、支付结果类事件必传 |
bind_method | string | 条件必传 | 绑卡/绑账户方式枚举;绑卡、绑账户流程事件必传 |
status | string | 条件必传 | 页面或业务状态;状态页、处理中页、审核页、列表状态曝光类事件必传 |
result | string | 条件必传 | success/fail/pending/cancel/timeout;接口结果、业务结果、结果页事件必传 |
error_code | string | 条件必传 | 错误码;失败、异常、接口错误事件必传 |
error_msg | string | 条件必传 | 错误摘要,禁止包含敏感明文;失败、异常、接口错误事件必传 |
network_type | string | 否 | 网络状态;如外层公共字段已上报,可不在 event_data 重复上报 |
is_app_webview | boolean | 否 | 是否 App 内 WebView;如外层公共字段已上报,可不在 event_data 重复上报 |
order_id 和 loan_id 的取值规则:
- 两者需要保留为公共字段,但不是全局必传字段。
order_id用于标识一次借款、提现、还款、支付、绑卡验证等可形成订单或交易单的业务动作。页面还没创建订单时不传,例如提现页刚进入、金额输入、期限选择。loan_id用于标识一笔贷款生命周期。只有当前事件能明确归属到某笔贷款时上报,例如还款方式页、还款提交、还款结果、还款历史详情、贷后详情。- 如果同一个事件同时有关联贷款和交易订单,需要同时上报
loan_id和order_id,例如某笔贷款下发起还款并生成支付订单。 - 不允许为了凑字段传空字符串、
unknown或前端临时随机 ID;拿不到稳定业务 ID 时不传该字段。
4.3 点击内容 content 的实现方式
如果要记录“用户点击了什么内容”,统一通过 event_data.content 实现,不允许把点击内容拼到 event_name。
示例:
{
"event_name": "withdraw_result_page_click",
"event_page": "withdraw_result_page",
"event_type": "click",
"event_data": {
"scene": "withdraw",
"content": "go_home",
"target_page": "home_page"
}
}取值规则:
| 点击对象 | content 取值 | 说明 |
|---|---|---|
| 主按钮 | submit_button, confirm_button, continue_button | 不使用按钮文案,避免多语言或 UI 文案变更影响数据 |
| 关闭按钮 | close_button | 弹窗右上角关闭、页面关闭 |
| 返回按钮 | back_button | 导航返回 |
| 协议 | agreement, privacy_policy, contract | 可额外传 agreement_type 或 contract_type |
| 列表项 | list_item | 具体项用 item_type/item_id/item_index |
| Tab | tab | 具体 tab 用 tab_name |
| 支付方式 | payment_method | 具体方式用 payment_method 字段 |
| 银行/账户项 | bank_item, account_item | 银行用 bank_code,账户只传类型或脱敏标识 |
| 弹窗按钮 | popup_primary_button, popup_secondary_button, popup_close_button | 配合 popup_type、action_type |
| 帮助入口 | help, customer_service | 帮助中心、客服入口 |
研发实现要求:
- 每个可点击控件在代码中显式传入稳定枚举值,例如
trackClick('withdraw_result_page_click', { content: 'go_home' })。 content使用英文枚举,不使用 UI 文案,不使用接口返回文案。- 同一控件在不同页面点击,
content可以相同,通过event_page区分。 - 同一页面多个同类控件,补充
content_index或业务字段,如item_index/banner_position/payment_method。 - 禁止把手机号、卡号、账号、用户姓名、错误详情等动态内容放入
content。
4.4 source_page 与 target_page 取值规则
source_page 和 target_page 用于分析页面流转、入口来源和跳转去向。两者只在能明确来源或去向时上报;不能确定时传空字符串或不传,不允许随意填 unknown。
| 字段 | 取值来源 | 取值示例 | 需要上报的情况 |
|---|---|---|---|
source_page | 路由 from.name、打开 H5 的 query 参数、App Native 传参、当前业务上下文 | home_page, withdraw_page, repayment_result_page, push_notification, sms_link | 页面进入、弹窗曝光、跨页面跳转、从 App 原生进入 H5、从短信/Push/运营位进入 |
target_page | 路由 to.name、点击动作配置、Native 跳转方法参数、H5 跳转 URL 映射 | home_page, bank_card_page, contract_page, customer_service_page, google_play | 点击会产生跳转、关闭后返回指定页面、打开外部链接、跳到 Native 页面 |
页面进入事件示例:
{
"event_name": "bank_card_page_view",
"event_page": "bank_card_page",
"event_type": "view",
"event_data": {
"source_page": "withdraw_page"
}
}跳转点击事件示例:
{
"event_name": "withdraw_result_page_click",
"event_page": "withdraw_result_page",
"event_type": "click",
"event_data": {
"content": "link_card",
"source_page": "withdraw_result_page",
"target_page": "bank_card_page"
}
}取值优先级:
- SPA 路由跳转:
source_page = from.name,target_page = to.name。 - 当前页按钮跳转:
source_page = 当前 event_page,target_page = 按钮配置的目标页面。 - Native 打开 H5:
source_page = Native 传入的 sourcePage;没有传参时按入口类型取native_home/native_account/push_notification/sms_link。 - H5 关闭或返回 Native:首页用
target_page = home_page,账户页用target_page = account_page,外部跳转用target_page = external_url或具体渠道名。 - 弹窗:弹窗曝光时
source_page = 弹窗所属页面;弹窗按钮点击如会跳转,则补target_page,仅关闭则不传或传当前页。
5. 敏感信息规则
5.1 禁止上报
以下字段禁止出现在 event_name、日志、URL query、event_data 明文中:
| 类型 | 示例 |
|---|---|
| 银行卡号 | cardNum, CardNumber |
| CVV | cvv, CVV |
| 卡有效期 | expiry |
| 银行账号 | accountNo, AccountNumber |
| 手机号 | phone, PhoneNumber |
| BVN/NIN | bvn, nin 原文 |
| 姓名/地址 | name, address 原文 |
| 收入 | monthlyIncome 原文 |
5.2 允许的替代字段
| 原始含义 | 替代字段 |
|---|---|
| 是否输入卡号 | card_number_filled: true/false |
| 卡号长度 | card_number_length |
| 卡类型 | card_brand |
| CVV 是否输入 | cvv_filled: true/false |
| 手机号是否输入 | phone_filled: true/false |
| BVN/NIN 校验方式 | identity_type: bvn/nin/bvn_nin |
| 地址是否完整 | address_completed: true/false |
| 收入区间 | income_bucket |
6. 场景埋点需求
6.1 还款/支付
覆盖端:
cash_center:payMethod,payResult,virtualAccountwp_h5:repayment,earlyRepay,repaymentHistory,afterRepayment
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 还款方式页 | repayment_method_page_view | view | 页面进入 | scene, order_id, loan_id, repay_amount, available_methods |
| 还款方式页 | repayment_method_page_leave | leave | 页面离开 | duration_ms, selected_method |
| 还款方式列表 | repayment_method_click | click | 选择支付方式 | payment_method, content |
| 确认还款 | repayment_confirm_click | click | 点击确认 | payment_method, repay_amount, order_id |
| 还款接口 | repayment_submit_result | result | 还款提交接口返回 | result, error_code, error_msg, payment_method, order_id |
| 支付结果页 | repayment_result_page_view | view | 结果页展示 | result, payment_method, order_id, repay_amount |
| 支付结果页 | repayment_result_action_click | click | 点击完成/重试/查看详情 | content, result |
| 虚拟账户页 | virtual_account_page_view | view | 页面进入 | bank_code, account_created, expire_time |
| 还款历史 | repayment_history_page_view | view | 页面进入 | loan_count, has_overdue |
| 还款历史详情 | repayment_history_detail_view | view | 详情展示 | loan_id, repay_status |
6.2 绑银行卡
覆盖端:
cash_center:bindCard,addCard,checkCode,checkPhone,checkBirth,checkPin,bindCardWaiting,bindCardResultwp_h5:cardStatus,checkCardStatusroovault: 原生绑卡、绑卡弹窗、银行卡状态页
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 绑卡页 | bank_card_page_view | view | 页面进入 | scene, source_page, bind_method |
| 卡号输入框 | bank_card_number_focus | input | 聚焦 | content |
| 卡号输入框 | bank_card_number_blur | input | 失焦 | card_number_filled, card_number_length, card_brand |
| 有效期输入框 | bank_card_expiry_focus | input | 聚焦 | content |
| 有效期输入框 | bank_card_expiry_blur | input | 失焦 | expiry_filled |
| CVV 输入框 | bank_card_cvv_focus | input | 聚焦 | content |
| CVV 输入框 | bank_card_cvv_blur | input | 失焦 | cvv_filled |
| 协议勾选 | bank_card_agreement_click | click | 勾选/取消 | checked |
| 提交绑卡 | bank_card_submit_click | click | 点击提交 | card_number_filled, expiry_filled, cvv_filled |
| 前端校验失败 | bank_card_validate_fail | result | 表单校验失败 | field_name, error_code, error_msg |
| 绑卡接口结果 | bank_card_submit_result | result | 接口返回 | result, error_code, error_msg, provider |
| OTP 页 | bank_card_otp_page_view | view | OTP页展示 | provider, send_type |
| OTP 重发 | bank_card_otp_resend_click | click | 点击重发 | provider, resend_count |
| OTP 提交 | bank_card_otp_submit_click | click | 点击提交 | code_filled |
| 处理中页 | bank_card_processing_view | view | 处理中展示 | provider, order_id |
| 结果页 | bank_card_result_page_view | view | 成功/失败页展示 | result, provider, error_code |
| 结果页操作 | bank_card_result_action_click | click | 确认/重试/返回首页 | content, result |
6.3 绑银行账户
覆盖端:
cash_center:addBankAccount,addBankAccountResultSteps,addBankAccountQueryResult,addBankAccountResultroovault:BankAccount
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 绑账户页 | bank_account_page_view | view | 页面进入 | source_page, verify_bvn_enabled |
| 银行选择 | bank_account_bank_select_click | click | 选择银行 | bank_code, bank_name |
| 账号输入框 | bank_account_number_focus | input | 聚焦 | content |
| 账号输入框 | bank_account_number_blur | input | 失焦 | account_number_filled, account_number_length |
| BVN 校验勾选 | bank_account_verify_bvn_click | click | 勾选/取消 | checked |
| 提交账户 | bank_account_submit_click | click | 点击提交 | bank_code, account_number_filled |
| 前端校验失败 | bank_account_validate_fail | result | 表单校验失败 | field_name, error_code, error_msg |
| 绑账户接口结果 | bank_account_submit_result | result | 接口返回 | result, provider, error_code, error_msg |
| 阶段处理中 | bank_account_step_view | view | Processing/Verify/Success/Fail 阶段展示 | step_name, step_index, status |
| 阶段离开 | bank_account_step_leave | leave | 阶段切换或页面离开 | step_name, duration_ms, status |
| 结果操作 | bank_account_result_action_click | click | 确认/重试/返回 | content, result |
6.4 提现/提现结果
覆盖端:
wp_h5:withdraw,withdraw-refactor,withdrawStatus
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 提现页 | withdraw_page_view | view | 页面进入并拿到初始化数据 | loan_id, product_id, style_version, ab_group |
| 提现页 | withdraw_page_leave | leave | 页面离开/失活 | duration_ms, loan_amount, selected_tenor |
| 借款金额 | withdraw_amount_focus | input | 金额框聚焦 | min_amount, max_amount |
| 借款金额 | withdraw_amount_blur | input | 金额框失焦 | loan_amount, amount_valid, error_code |
| 借款期限 | withdraw_loan_terms_click | click | 选择期限 | term_index, term_days, product_id |
| 优惠券 | withdraw_coupon_click | click | 点击优惠券入口 | coupon_available, coupon_selected |
| 借款用途 | withdraw_loan_purpose_click | click | 点击/选择用途 | purpose_code |
| 保险/保护服务 | withdraw_credit_protection_service_click | click | 勾选/取消 | checked, fee_amount |
| 放款账户 | withdraw_disbursement_account_click | click | 点击/切换账户 | account_type, has_bound_account |
| 合同 | withdraw_contract_click | click | 点击合同 | contract_type |
| 提交提现 | withdraw_submit_click | submit | 点击提交 | loan_amount, term_days, account_type, coupon_selected |
| 提现接口结果 | withdraw_submit_result | result | 接口返回 | result, error_code, error_msg, order_id |
| PIN 弹窗 | withdraw_pin_popup_view | popup_view | PIN 弹窗展示 | source_page |
| PIN 提交 | withdraw_pin_submit_click | popup_click | PIN 确认 | pin_filled |
| 提现结果页 | withdraw_result_page_view | view | 结果页展示 | result, order_id, disbursement_status |
| 结果页操作 | withdraw_result_page_click | click | 返回首页/查看合同/帮助/绑卡 | content, result |
| 结果页弹窗曝光 | withdraw_result_popup_view | popup_view | 评价/提额/邀请/活动弹窗展示 | popup_type |
| 结果页弹窗点击 | withdraw_result_popup_click | popup_click | 弹窗按钮/关闭 | popup_type, action_type |
6.5 KYC/BVN/NIN/人脸
覆盖端:
roovault:BVNVerify,NINVerify,BVNandNINVerify,face_guide,face_regwp_h5:faceVerificationcash_center:verifyOtp,thirdBankAuth中的第三方身份/OTP 授权
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| BVN 页 | kyc_bvn_page_view | view | 页面展示 | identity_type=bvn |
| BVN 输入 | kyc_bvn_input_focus | input | 聚焦 | content |
| BVN 输入失焦 | kyc_bvn_input_blur | input | 失焦 | identity_filled, identity_length |
| BVN 清空 | kyc_bvn_input_clear_click | click | 点击清空 | content |
| 使用 NIN | kyc_bvn_use_nin_click | click | 切换到 NIN | source_identity_type |
| 拨号说明 | kyc_identity_dial_click | click | 点击拨号说明 | identity_type, dial_code |
| BVN 提交 | kyc_bvn_confirm_click | submit | 点击确认 | identity_filled |
| NIN 页 | kyc_nin_page_view | view | 页面展示 | identity_type=nin |
| NIN 提交 | kyc_nin_confirm_click | submit | 点击确认 | identity_filled |
| BVN+NIN 页 | kyc_bvn_nin_page_view | view | 页面展示 | identity_type=bvn_nin |
| 类型切换 | kyc_identity_type_click | click | BVN/NIN 类型切换 | identity_type |
| KYC 接口结果 | kyc_identity_submit_result | result | 接口返回 | identity_type, result, error_code, error_msg |
| 人脸引导页 | face_guide_page_view | view | 引导页展示 | source_page |
| 人脸采集页 | face_capture_page_view | view | 采集页展示 | liveness_provider |
| 人脸上传耗时 | face_upload_result | result | 上传完成 | result, duration_ms, error_code |
| 人脸识别结果 | face_verify_result | result | 识别返回 | result, error_code, error_msg |
6.6 授信申请资料
覆盖端:
roovault:Work_info,Person_Info,Emergency_Contact,BankAccount
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 工作信息页 | apply_work_info_page_view | view | 页面展示 | source_page |
| 工作信息项 | apply_work_info_field_click | click/input | 选择或输入字段 | field_name, filled |
| 工作信息提交 | apply_work_info_submit_click | submit | 点击下一步 | completed_field_count, missing_field_count |
| 个人信息页 | apply_person_info_page_view | view | 页面展示 | source_page |
| 个人信息项 | apply_person_info_field_click | click/input | 选择或输入字段 | field_name, filled |
| 个人信息提交 | apply_person_info_submit_click | submit | 点击下一步 | completed_field_count, missing_field_count |
| 紧急联系人页 | apply_emergency_contact_page_view | view | 页面展示 | source_page |
| 联系人字段 | apply_emergency_contact_field_blur | input | 字段失焦 | field_name, filled, relation_type |
| 联系人提交 | apply_emergency_contact_submit_click | submit | 点击完成 | completed_field_count, missing_field_count |
| 申请资料结果 | apply_profile_submit_result | result | 接口返回 | step_name, result, error_code, error_msg |
注意:当前存在把收入、地址、联系人手机号、姓名拼到事件名的实现,必须改为 field_name + filled + bucket/length。
6.7 启动/登录/权限
覆盖端:
roovault:startup,register,VerifyCode,PrivacyPolicy,PermissionsAuth
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 启动页 | startup_page_view | view | App 启动页展示 | app_version, channel |
| 启动页离开 | startup_page_leave | leave | 跳转下一页 | duration_ms, next_page |
| 注册登录页 | login_page_view | view | 页面展示 | source_page |
| 手机号输入 | login_phone_blur | input | 失焦 | phone_filled, phone_length |
| 获取验证码 | login_get_otp_click | click | 点击获取验证码 | otp_type |
| 语音验证码 | login_voice_otp_click | click | 点击语音验证码 | otp_type=voice |
| OTP 页 | login_otp_page_view | view | OTP 页展示 | otp_type |
| OTP 提交结果 | login_otp_submit_result | result | 登录接口返回 | result, error_code, error_msg |
| 隐私协议页 | privacy_policy_page_view | view | 协议展示 | version |
| 同意隐私协议 | privacy_policy_agree_click | click | 点击同意 | version |
| 权限页 | permissions_auth_page_view | view | 权限页展示 | permission_list |
| 权限同意/拒绝 | permissions_auth_action_click | click | 点击同意/拒绝 | action, permission_name |
6.8 首页/账户/运营位
覆盖端:
roovault:MainActivity,MineFragment, banner/operator/message
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 首页 | home_page_view | view | 首页展示 | user_status, loan_status |
| 底部 Tab | home_tab_click | click | 点击 tab | tab_name |
| 账户页 | account_page_view | view | 账户页展示 | loan_status |
| 贷款历史 | account_loan_history_click | click | 点击贷款历史 | content |
| 还款历史 | account_repayment_history_click | click | 点击还款历史 | content |
| 运营 banner 曝光 | operation_banner_view | view | banner 曝光 | banner_id, banner_position, action_type |
| 运营 banner 点击 | operation_banner_click | click | banner 点击 | banner_id, banner_position, action_type, target_page |
| 消息页 | message_page_view | view | 消息页展示 | message_type |
| 消息点击 | message_item_click | click | 点击消息 | message_type, message_id |
6.9 补件/客诉/增信
覆盖端:
wp_h5:uploadDocuments,complaint,increaseLimit,recredit
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 补件页 | upload_documents_page_view | view | 页面展示 | document_type, required_count |
| 选择文件 | upload_documents_choose_file_click | click | 点击选择文件 | document_type, file_type |
| 上传结果 | upload_documents_file_result | result | 上传成功/失败 | document_type, result, error_code, error_msg |
| 提交补件 | upload_documents_submit_click | submit | 点击提交 | uploaded_count, required_count |
| 客诉页 | complaint_page_view | view | 页面展示 | source_page |
| 客诉提交 | complaint_submit_click | submit | 点击提交 | complaint_type, has_attachment |
| 客诉结果 | complaint_submit_result | result | 接口返回 | result, error_code, error_msg |
| 增信页 | increase_limit_page_view | view | 页面展示 | source_page, material_required |
| 增信提交 | increase_limit_submit_click | submit | 点击提交 | material_count |
| 增信结果 | increase_limit_submit_result | result | 接口返回 | result, error_code, error_msg |
6.10 浏览器/性能监控
覆盖端:
wp_h5:browser_info,web_performance_metrics
| 页面/模块 | 事件名 | 类型 | 触发时机 | 必传字段 |
|---|---|---|---|---|
| 浏览器信息 | browser_info | result | 页面初始化后 | browser_name, browser_version, os, user_agent_hash |
| 页面性能 | web_performance_metrics | performance | 页面加载完成 | dns_ms, tcp_ms, request_ms, response_ms, dom_ready_ms, load_ms, resource_count |
| 接口性能 | api_response_time | performance | 关键接口完成 | api_name, duration_ms, result, error_code |
7. 全新上线要求
本期为全新上线,不考虑旧版本兼容,不要求新旧事件并行上报。
- 全部埋点按本需求的新事件名、新字段、新触发规则实现。
- 不新增
legacy_event_name、old_event_name等兼容字段。 - 当前代码里已有的旧事件可作为实现参考,但不能作为验收口径。
- 数据验收只校验新事件是否到达、字段是否完整、值是否符合枚举。
- 上线前需要冻结一版埋点字典,研发、测试、数据看板均以该字典为准。
8. 技术改造要求
8.1 H5
cash_center新增统一track(event)方法,替代散落的旧reportApi调用。wp_h5保留reportTracking,但不再强制把业务字段改名成<eventName>_<field>,新增标准字段透传能力。- 路由层统一处理
page_view/page_leave,页面只补充业务字段。 sendBeacon或 App bridge 可用时,页面离开事件优先用可靠上报。- 开发环境允许控制台打印,同时提供 mock 上报面板。
8.2 Android
SensorsApiHelper增加支持Map<String, Object> eventData的重载。- H5 Bridge 的
logClickEvent/logViewEvent/startPage/endPage支持透传event_data。 - 原生自动采集保留,但关键业务节点必须手动埋点。
- SDK 网络开关状态需要有可观测日志,避免事件缓存不上报。
8.3 后端/大数据
/dc/buriedPointBatch/v2作为统一 H5 上报接口。- 服务端对敏感字段做拦截校验:命中卡号、CVV、手机号、BVN/NIN 明文则拒收或脱敏。
- 提供埋点验收查询能力:按
uid/session_id/event_name查询最近事件。 - 数据字典维护事件名、页面名、字段名、枚举值、负责人、上线版本。
9. 验收标准
9.1 功能验收
| 项 | 标准 |
|---|---|
| 页面进入 | 核心页面 100% 有 *_page_view |
| 页面离开 | 核心页面 100% 有 *_page_leave 或可靠替代 |
| 点击行为 | 核心 CTA 100% 有 click/submit |
| 结果行为 | 所有提交类接口 100% 有 result |
| 字段完整性 | 公共字段完整率不低于 99% |
| 敏感信息 | event_name 和 event_data 不出现明文敏感信息 |
| 失败隔离 | 埋点接口失败不影响业务 |
| 去重 | 同一页面进入不重复上报,KeepAlive 场景需明确规则 |
9.2 数据验收
| 场景 | 核对方式 |
|---|---|
| 还款漏斗 | repayment_method_page_view -> repayment_confirm_click -> repayment_submit_result -> repayment_result_page_view |
| 绑卡漏斗 | bank_card_page_view -> bank_card_submit_click -> bank_card_submit_result -> bank_card_result_page_view |
| 提现漏斗 | withdraw_page_view -> withdraw_submit_click -> withdraw_submit_result -> withdraw_result_page_view |
| KYC 漏斗 | kyc_*_page_view -> kyc_*_confirm_click -> kyc_identity_submit_result |
| 登录漏斗 | login_page_view -> login_get_otp_click -> login_otp_submit_result |
9.3 抽样验收
- 每个端至少抽 5 个真实用户会话。
- 每个核心场景至少覆盖成功、失败、取消/返回 3 类路径。
- 对比前端调试日志、大数据接收日志和分析报表,事件数差异不得超过 2%。
10. 优先级
P0
- 去除所有拼进
event_name的敏感明文。 - 统一新增事件的公共字段。
- 为还款、绑卡、提现、KYC、登录补齐 page_view/click/result。
- 建立验收查询和开发调试能力。
P1
cash_center升级到/dc/buriedPointBatch/v2。- H5 路由级 page_view/page_leave 统一。
- Android
SensorsApiHelper支持结构化字段。 - 补齐补件、客诉、增信、运营位字段。
P2
- 建立埋点字典和版本管理。
- 建立新事件的数据看板和口径说明。
- 性能和接口耗时统一埋点。
11. 交付物
- 埋点字典:事件名、页面、场景、字段、枚举、触发时机。
- 技术改造:H5 统一 SDK、Android 结构化事件、后端敏感字段校验。
- 验收用例:按场景覆盖成功/失败/取消路径。
- 数据看板:核心漏斗、失败原因、页面停留、渠道维度、版本维度。