前端埋点需求

基于当前 cash_centerwp_h5roovault 已实现埋点链路整理。本期为全新上线,不考虑旧版本兼容;目标是建立统一事件模型、统一字段、敏感信息治理和验收口径。

1. 目标

  1. 还原用户在借款、提现、还款、绑卡、KYC、登录、补件等核心路径中的行为漏斗。
  2. 支持按产品、渠道、用户、设备、页面、订单、支付方式、绑卡方式等维度分析转化和失败原因。
  3. 统一 H5 与 Android 原生埋点语义,避免同一行为多套命名。
  4. 禁止将卡号、CVV、手机号、BVN/NIN、姓名、地址、收入等敏感值拼进 event_name
  5. 埋点失败不能影响业务流程,但需要具备调试和抽样校验能力。

2. 当前实现约束

当前通道当前字段主要问题
cash_center/dc/buriedPointBatch公共上下文、事件名、页面名、事件自定义属性bvn/channel 时不上报;大量字段拼进 event_name;路由自动进出页被注释
wp_h5/dc/buriedPointBatch/v2公共上下文、事件名、页面名、事件自定义属性字段会被改成 <eventName>_<field>;与 cash_center 协议不完全一致
roovaultSensorsDataAPI / DataHubpage, eventName, SDK公共字段原生主要上报 page + eventName,自定义字段弱;业务值也存在拼接进事件名

3. 统一上报模型

所有埋点统一按事件名、页面名、事件类型、公共上下文和事件自定义属性定义。本期不并行上报旧事件,也不保留旧事件兼容字段。具体由神策 SDK、H5 SDK、Bridge 或现有 HTTP 封装决定如何序列化和发送。

3.1 事件类型

event_type含义触发时机
view页面或模块曝光页面进入、弹窗展示、模块进入视口
leave页面或模块离开路由离开、WebView 关闭、页面失活
click点击行为用户主动点击按钮、列表项、Tab、选择项、清空、协议、关闭按钮;提交按钮也属于点击
input输入行为文本或数字输入框聚焦、失焦及填写状态变化,不上报输入原文
result业务结果接口成功/失败、客户端校验成功/失败、页面状态结果、第三方回调结果
popup_view弹窗曝光弹窗展示
popup_click弹窗点击弹窗主按钮、关闭、取消
performance性能指标页面加载后、关键资源完成后

3.2 命名规则

事件名格式:

<scene>_<page_or_module>_<action>

示例:

推荐事件不推荐事件
bank_card_card_number_focusBankCard_CardNumber_5399****
bank_card_submit_clickBankCard_submit
withdraw_result_popup_clickservice_evaluation_pop_submit_click
kyc_bvn_confirm_clickBVNVerify_confirm_12345678901

规则:

  1. 全部小写,下划线分隔。
  2. event_name 只描述行为,不携带运行时值。
  3. 运行时值作为事件自定义属性传入,且必须脱敏或枚举化。
  4. 同一行为在 H5 和 Android 使用同一个事件名。
  5. 本期为全新上线,不考虑旧事件名兼容;所有研发、测试和数据验收均以新事件名为准。

3.3 最新代码页面埋点基线

以下结论以本次刷新后的分支为准:cash_center/dev 提交 2bf88f2wp_h5/dev 提交 2381724、Android roovault/origin/develop 提交 3ae2c97。本表用于区分“代码中已经出现的事件”和“本需求要求统一实现的事件”,不代表旧事件名继续保留。

代码模块当前页面/模块当前代码中的事件形态当前实现状态本期处理原则
cash_centerpayMethodenter_payMethodleave_payMethodpay_confirmpay_method_{repayType}页面中仍有调用,但 src/assets/js/report.js 的 HTTP、Native、SDK 上报逻辑已注释,实际不会形成统一数据迁移为还款方式页、支付方式选择、确认提交和结果事件,支付方式放入字段
cash_centerpayResultvirtualAccountenter_payResultleave_payResult、结果操作、enter_virtualAccountleave_virtualAccount仍是旧 reportApi 模型迁移为结果页、结果操作、虚拟账户页统一事件
cash_center绑卡流程BankCard_*bindCard_*BankCardPin_*BankCardCode_*BankCardProcessing_*BankCardSuccess/Fail_*事件名中混有卡号、CVV、手机号、错误文案等动态值,存在敏感信息风险统一为绑卡页、输入、校验、OTP、处理中、结果事件;业务值作为自定义属性传入,禁止拼事件名
cash_center绑银行账户BankCardAccount_*addBankAccountQueryResultaddBankAccountResultSteps旧事件名和步骤事件并存统一为 bank_account_* 事件,并使用 step_name/step_index/status
wp_h5withdraw-refactorwithdraw_page 下的金额、期限、优惠券、用途、合同、账户、提交、弹窗等事件已有 reportTrackinguseTracking、数据就绪等待和进入/离开去重保留页面覆盖范围,统一事件名、公共字段和 content 取值
wp_h5提现结果、绑账户、绑卡、人脸、PIN、合同、优惠券withdraw_result_page_*withdraw_bank_account_pagewithdraw_face_verify_pagewithdraw_pin_*withdraw_contract_page_view已有部分新模型事件,字段仍按事件名前缀展开改为统一字段结构;不再生成 eventName_fieldName 形式的散落字段
wp_h5还款及历史页面路由包含 repaymentIndexafterRepaymentloanDetailtermDetailearlyRepayrepaymentHistory当前 dev 路由存在,未见与统一模型完全一致的全链路事件按 5.1 的还款/支付事件补齐页面、选择、提交、结果和历史事件
roovault登录、启动、首页、个人中心、授信资料、KYC、人脸、绑账户DataRecordConstant 中的 *_view*_click,通过 SensorsDataAPI.trackView/trackClick 上报原生 SDK 已接入;公共字段和自定义业务字段没有统一封装统一封装为 track(eventName, properties),页面名和业务字段进入标准属性
roovaultMineFragment 个人中心account_page_viewaccount_loan_history_clickaccount_repayment_history_click仅覆盖个人中心曝光和两类历史入口,其他真实入口缺少事件;旧名称把个人中心误称为账户页页面统一改为 mine_page_view,历史入口改为 mine_*_click,并补齐全部真实入口及目标页面事件
roovaultBVN/NIN/人脸BVNVerify_*NINVerify_*BVNandNINVerify_*face_guide_*face_reg_*已有曝光和点击,但字段治理不足保留业务语义,删除动态身份证明值和输入值,改传脱敏状态/长度/结果

实施时必须以源码实际触发点为准:页面曝光只在页面真实展示且初始化数据就绪后上报;点击事件在动作确认前上报;接口结果事件在接口返回后上报;页面离开事件只上报一次并带 duration_ms

4. 公共字段需求

4.1 本期统一公共字段(开发执行版)

以下规则为本期唯一字段口径。本文只约定字段名称、业务含义、采集责任和取值规则,不约定事件在 SDK、Bridge、HTTP 或数据库中的序列化结构。具体结构由对应 SDK 和现有上报封装决定。

字段类型必填来源说明
event_namestring统一埋点封装事件字典中的稳定英文名;禁止拼接业务值、用户输入、错误文案
event_pagestring页面字典统一页面编码;取当前实际页面,不取中文标题、URL 或组件名
event_typestring统一埋点封装只能取 view/click/input/result/leave/popup_view/popup_click/performance;提交按钮属于 click,接口或系统回调属于 result
event_timenumber统一埋点封装客户端产生事件时的 Unix 毫秒时间戳
uidstring登录后必填登录态/App bridge登录用户 ID;未登录事件不传,不得用手机号替代
cust_idstring有值必传登录态/App bridge客户主数据 ID;没有稳定值时不传,不得用手机号替代
channelstringH5 配置、Native 入参或运行时上下文获客/投放渠道编码;没有渠道时固定传 organic
biz_codestringApp 配置/H5 构建配置业务线编码;必须与服务端业务线一致
countrystring产品配置ISO 3166-1 alpha-2 大写编码;本期固定为 NG
platformstring运行环境只能取 androidiosh5;App 内 H5 也传 h5
app_namestringNative 宿主配置/H5 运行时配置实际品牌或宿主 App 名称,如 rocketcashcashnaija;不得传 channel
app_version_codestringAndroid/App 内 H5 必填;普通浏览器不传Android 原生版本能力;H5 通过 bridge getCurrentAppVersion()取不到时阻断该运行形态的埋点初始化并记录错误,不填 unknown
app_version_namestringAndroid/App 内 H5 必填;普通浏览器不传Android 原生版本能力;H5 通过 bridge getCurrentAppVersionName()取不到时阻断该运行形态的埋点初始化并记录错误
h5_versionstringH5 必填;纯原生不传H5 构建变量 VUE_APP_VERSION直接取构建注入值;wp_h5cash_center 均必须注入,不得用 App 版本替代
device_idstringAndroid/App 内 H5 的 SDK 身份必须具备;普通浏览器不传Android/神策 SDK;H5 通过 bridge由 SDK/Bridge 管理并用于身份串联;业务代码不得手动生成、覆盖或重复作为自定义属性传入
session_idstring统一埋点上下文首个页面初始化时生成 UUID,并在本次会话内复用;App 重启或会话超时重新生成
trace_idstring关联接口事件时必填;其他事件不传接口请求上下文只传真实链路 ID;没有真实链路 ID 时不生成、不传

自定义字段由业务埋点封装作为事件属性传给 SDK 或 Bridge;不得因为不同端的传输结构不同而改名。字段统一使用 snake_case,空字符串、nullundefined 均视为未传。

4.1.1 三种运行形态的固定取值

运行形态platformapp_nameapp_version_code/nameh5_versiondevice_idis_app_webview
Android 原生android原生宿主配置原生版本能力不传原生稳定设备 IDfalse
App 内 H5h5Native bridge 下发的宿主 App 名称bridge getCurrentAppVersion*()H5 构建版本bridge/神策稳定设备 IDtrue
普通浏览器 H5h5H5 运行时配置不传H5 构建版本不传false

is_app_webview 作为自定义公共属性传递;H5 所有事件必传,Android 原生事件固定传 false。普通浏览器不得伪造 App 版本或设备 ID。

4.1.2 代码改造落点:版本字段

当前代码实现:

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_versionvue.config.js 已将 `process.env.VUE_APP_VERSIONpackage.json.version

开发必须实现:

  1. wp_h5h5_version 直接取 process.env.VUE_APP_VERSION
  2. cash_center 必须在 vue.config.js 中读取 package.json.version 并写入 process.env.VUE_APP_VERSION,埋点统一取 process.env.VUE_APP_VERSION
  3. App 内 H5 初始化埋点上下文时调用:
    • getCurrentAppVersion() -> app_version_code
    • getCurrentAppVersionName() -> app_version_name
  4. 普通浏览器 H5 没有 App bridge 时:
    • app_version_code/app_version_name 不传
    • h5_version 仍必须传
  5. Android 原生埋点直接从原生能力取:
    • AppUtils.getAppVersionCode() -> app_version_code
    • AppUtils.getAppVersionName() -> app_version_name

4.1.3 代码现状参考:设备信息

原生和 App 内 H5 上报时可以补充更多设备信息,但必须遵守最小必要原则;不得上传通讯录、WiFi 列表、GPS 明细、安装应用列表等高敏原始数据作为普通行为埋点字段。

以下内容仅用于说明现有代码能力,不改变 4.1 和 4.1.3 的本期字段契约:

能力当前实现
device_idwp_h5getDeviceId()cash_centergetDeviceId();Android 原生可用 DeviceIdRuntime.getDeviceId()
phone_modelAndroid H5JsInterface.getDeviceInfo() 当前只返回 deviceIdphoneModel
os_namewp_h5getOsName();Android 返回固定 Android
os_versionwp_h5getOsVersion();Android 返回 Build.VERSION.RELEASE
os_version_codewp_h5getOsVersionCode();Android 返回 Build.VERSION.SDK_INT
network_typewp_h5getNetwork();Android 返回 PhoneUtils.getNetworkState(...)
timezonewp_h5getDefaultTimezone();Android 返回 TimeZone.getDefault().getID()

4.1.3.1 设备字段(本期执行范围)

本期业务事件只验收 device_id。以下设备扩展信息不进入本期公共字段契约,不作为埋点完整率验收项;如神策 SDK 自动采集,按 SDK 默认属性保存,不得由 H5 自行拼装完整设备指纹。

字段类型来源是否必传说明
device_idstringApp bridge/SDK按 4.1 规则App 内 H5、Android 原生必传;普通浏览器不传
device_modelstringgetDeviceInfo().phoneModel / 原生 Build.MODEL本期不纳入事件契约不作为研发必接字段;如 SDK 自动采集,不得覆盖为业务字段
device_brandstring原生 Build.BRAND本期不纳入事件契约不要求 H5 bridge 本期新增返回
device_manufacturerstring原生 Build.MANUFACTURER本期不纳入事件契约不要求 H5 bridge 本期新增返回
os_nameos_versionos_version_codestringSDK/bridge/运行环境本期不纳入事件契约由 SDK 默认采集即可,不作为业务事件必传字段
network_typetimezonestringSDK/bridge/运行环境本期不纳入事件契约不作为自定义业务属性重复上报
user_agent_hashscreen_widthscreen_heightstring/numberH5 运行环境本期不纳入事件契约不上传完整 User-Agent,不作为本期验收项

4.2 自定义公共字段(按事件类型执行)

字段类型是否必传说明
scenestring非必传只能取 login/home/repayment/withdraw/bind_card/bind_account/kyc/complaint/operation
contentstringclickpopup_click 必传;其他事件不传被点击或操作对象的稳定编码,如 paystackretryloan_history;不得传按钮中文全文
source_pagestringviewleave、跨页点击必传;无来源的 App 首屏传 app_launch当前事件发生前的页面编码;取路由 from.name、Native 入参或入口映射;禁止传 unknown
target_pagestring产生页面、Native 或外链跳转的点击事件必传;无跳转不传点击动作实际要去的页面编码;外链固定传 external_url,跳 Native 传 Native 页面编码
duration_msnumberleave 必传;其他事件不传当前页面从 viewleave 的客户端停留毫秒数,必须为非负整数
loan_idstring已关联稳定贷款 ID 时必传;无贷款关联时不传贷款生命周期 ID;不得用订单 ID、申请 ID 或用户 ID 替代
payment_methodstring支付方式选择、还款提交、支付结果事件必传;其他事件不传只能取 flutterwave/paystack/interswitch/opay/bank_transfer/token/bank_account/card
statusstring状态页、处理中页、审核页、列表状态曝光必传;其他事件不传只能取 processing/verify/success/fail/active/expired
resultstringresult、接口返回、结果页事件必传;其他事件不传只能取 success/fail/pending/cancel/timeout
error_codestringresult=fail 或接口/校验失败时必传;成功事件不传错误码;没有错误码时固定传 client_validation_error
error_msgstringresult=fail 或接口/校验失败时必传;成功事件不传脱敏后的固定错误摘要;禁止手机号、卡号、证件号、原始响应或堆栈
is_app_webviewboolean所有 H5 事件必传;Android 原生固定传 falseApp 内 H5 为 true,普通浏览器 H5 为 false

loan_id 仅在事件明确关联某笔贷款时传入,例如还款、贷后详情和还款历史详情;没有稳定贷款 ID 时不传,不用订单 ID、申请 ID 或用户 ID 替代。

4.3 点击内容 content 的实现方式

如果要记录“用户点击了什么内容”,由业务埋点封装将 content 作为事件自定义属性传给 SDK 或 Bridge,不允许把点击内容拼到 event_name。本例只表达字段和值,不规定 SDK 或接口的序列化结构:event_name=withdraw_result_page_clickevent_page=withdraw_result_pageevent_type=clickscene=withdrawcontent=go_hometarget_page=home_page

取值规则:

点击对象content 取值说明
主按钮submit_button, confirm_button, continue_button不使用按钮文案,避免多语言或 UI 文案变更影响数据
关闭按钮close_button弹窗右上角关闭、页面关闭
返回按钮back_button导航返回
协议agreement, privacy_policy, contract可额外传 agreement_typecontract_type
列表项list_item具体项用 item_type/item_id/item_index
Tabtab具体 tab 用 tab_name
支付方式payment_method具体方式用 payment_method 字段
银行/账户项bank_item, account_item银行用 bank_code,账户只传类型或脱敏标识
弹窗按钮popup_primary_button, popup_secondary_button, popup_close_button配合 popup_typeaction_type
帮助入口help, customer_service帮助中心、客服入口

研发实现要求:

  1. 每个可点击控件在代码中显式传入稳定枚举值,例如 trackClick('withdraw_result_page_click', { content: 'go_home' });对象参数仅为代码调用示例,不是本文规定的传输结构。
  2. content 使用英文枚举,不使用 UI 文案,不使用接口返回文案。
  3. 同一控件在不同页面点击,content 可以相同,通过 event_page 区分。
  4. 同一页面多个同类控件,补充 content_index 或业务字段,如 item_index/banner_position/payment_method
  5. 禁止把手机号、卡号、账号、用户姓名、错误详情等动态内容放入 content

4.4 source_pagetarget_page 取值规则

source_pagetarget_page 用于分析页面流转、入口来源和跳转去向。按照 4.2 的事件类型规则执行:需要传的字段必须传真实页面编码或规定入口编码;没有适用场景的字段不传;禁止传空字符串、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_viewevent_page=bank_card_pageevent_type=viewsource_page=withdraw_page
  • 跳转点击:event_name=withdraw_result_page_clickevent_page=withdraw_result_pageevent_type=clickcontent=link_cardsource_page=withdraw_result_pagetarget_page=bank_card_page

取值优先级:

  1. SPA 路由跳转:source_page = from.nametarget_page = to.name
  2. 当前页按钮跳转:source_page = 当前 event_pagetarget_page = 按钮配置的目标页面
  3. Native 打开 H5:source_page = Native 传入的 sourcePage;没有传参时按入口类型取 native_home/native_account/push_notification/sms_link
  4. H5 关闭或返回 Native:首页用 target_page = home_page,个人中心用 target_page = mine_page,外部跳转用 target_page = external_url 或具体渠道名。
  5. 弹窗:弹窗曝光时 source_page = 弹窗所属页面;弹窗按钮点击时 source_page = 弹窗所属页面,只有发生页面、Native 或外链跳转时才传 target_page;仅关闭不传 target_page

4.5 SDK 自动采集字段(不属于自定义公共字段)

SDK 字段由神策 SDK 按平台自动生成,通常使用 $ 前缀。业务代码不得重复创建、改名、覆盖或把 SDK 字段当作业务字段使用。本节只说明采集责任,不规定 SDK 事件的底层序列化结构。

4.5.1 Android 原生

基于当前 sa-sdk-android 源码,Android SDK 默认可采集以下字段:

SDK 字段采集方式本期处理规则
distinct_id神策 SDK 身份系统由 SDK 管理;登录成功调用 login(uid),不得由业务事件属性重复传
$device_idSDK 设备标识由 SDK 管理;不得自行生成或覆盖
$os$os_versionSDK/Android 系统SDK 自动采集,不改名为 os_nameos_version
$manufacturer$modelAndroid Build 信息SDK 自动采集,不作为本期自定义字段必传
$app_versionAndroid 应用版本名SDK 自动采集;业务侧如需版本号分析,另按本文 app_version_code/app_version_name 取值
$screen_width$screen_heightAndroid 屏幕信息SDK 自动采集,不在业务事件中重复传
$timezone_offsetAndroid 默认时区偏移SDK 自动采集,不在业务事件中重复传
$network_type$wifiSDK 网络状态SDK 自动采集,不在业务事件中重复传
$lib_version神策 SDK 版本SDK 自动采集,不由业务代码传入

4.5.2 App 内 H5

App 内 H5 分为两部分:

  1. H5 业务事件的自定义字段,按 4.1 和 4.2 由 H5 埋点封装负责;SDK 不会替业务自动推断 scenecontentsource_pagetarget_page、订单、贷款和业务结果。
  2. 设备、身份和 SDK 元数据,优先由 App 原生 SDK 及当前 WebView Bridge 提供。神策 Bridge 可提供 distinct_id、登录状态以及原生 SDK 侧的预置属性;H5 不得重复生成 device_id 或覆盖 $device_id

App 内 H5 必须由 Bridge/原生提供并由业务上下文使用的运行时字段为:app_nameapp_version_codeapp_version_nameplatform=h5is_app_webview=truedevice_id 由 SDK/Bridge 作为身份字段管理,不由业务事件重复传入。H5 自己提供 h5_version;其余 SDK $ 字段由 SDK 管理。

4.5.3 普通浏览器 H5

普通浏览器 H5 不接入 Android 原生 SDK 字段,不伪造 app_version_codeapp_version_namedevice_id。H5 SDK 若自动产生浏览器、页面、屏幕或 SDK 元数据,保留 SDK 原字段;本期不把这些字段转换为自定义公共字段,也不以其作为业务埋点完整率验收项。普通浏览器 H5 只需按本文自定义字段规则提供 platform=h5app_nameh5_versionsession_id 及适用的业务字段。

4.5.4 字段归属判断

字段类型负责方研发是否手动传入
event_nameevent_pageevent_typeevent_time业务埋点封装
scenecontentsource_pagetarget_pageloan_idresult业务页面/业务接口上下文是,按事件适用条件传
app_namebiz_codechannelcountryplatform、版本字段App/H5 运行时配置与 Bridge是,由统一上下文注入
distinct_id$device_id$os$model$network_type$ 字段神策 SDK/原生能力否,禁止业务重复创建

4.6 各端公共字段总表

下表是本期研发和测试使用的总表。必传表示该端初始化并上报事件时必须具备;按事件表示仅在 4.2 规定的事件场景传;SDK 自动表示由神策 SDK 采集,业务代码不重复传;不传表示该端不生成、不补默认值。

字段字段归属Android 原生App 内 H5普通浏览器 H5采集/提供方
event_name业务自定义必传必传必传业务埋点封装
event_page业务自定义必传必传必传页面字典/业务埋点封装
event_type业务自定义必传必传必传业务埋点封装
event_time业务自定义必传必传必传各端埋点封装生成客户端毫秒时间
scene业务自定义必传必传必传页面/业务上下文
content业务自定义按事件按事件按事件点击控件显式传稳定枚举
source_page业务自定义按事件按事件按事件路由、Native 入参或入口映射
target_page业务自定义按事件按事件按事件跳转动作配置、Native 参数或 URL 映射
loan_id业务自定义有贷款关联时传有贷款关联时传有贷款关联时传业务接口响应/页面上下文
resultstatuserror_codeerror_msg业务自定义按事件按事件按事件接口结果/页面状态
payment_method业务自定义支付事件传支付事件传支付事件传支付方式选择或接口上下文
bind_method业务自定义绑卡/绑账户事件传绑卡/绑账户事件传绑卡/绑账户事件传业务流程上下文
duration_ms业务自定义leave 事件传leave 事件传leave 事件传页面进入和离开时间计算
app_name运行时公共字段必传必传必传Native 宿主配置或 H5 运行时配置
biz_code运行时公共字段必传必传必传App/H5 产品配置
channel运行时公共字段必传必传必传Native 入参、H5 配置;无渠道传 organic
country运行时公共字段必传必传必传产品配置,本期为 NG
platform运行时公共字段固定 android固定 h5固定 h5运行环境识别
app_version_code运行时公共字段必传Bridge 必传不传Android 版本能力或 H5 Bridge
app_version_name运行时公共字段必传Bridge 必传不传Android 版本能力或 H5 Bridge
h5_version运行时公共字段不传必传必传H5 构建变量 VUE_APP_VERSION
session_id业务会话字段必传必传必传各端统一埋点上下文生成并复用
trace_id链路字段关联接口时传关联接口时传关联接口时传接口请求链路上下文
is_app_webview运行时公共字段固定 false固定 true固定 false运行环境判断
distinct_idSDK 身份字段SDK 自动SDK/Bridge 复用H5 SDK 自动或匿名神策身份系统
$device_idSDK 身份字段SDK 自动SDK/Bridge 复用不传原生设备 ID神策 SDK/Native Bridge
$os$os_versionSDK 预置字段SDK 自动Native SDK 自动或 H5 SDK 默认H5 SDK 默认神策 SDK
$manufacturer$modelSDK 预置字段SDK 自动Native SDK 自动或 H5 SDK 默认H5 SDK 默认或不提供神策 SDK
$app_version$lib_versionSDK 预置字段SDK 自动SDK 自动H5 SDK 自动神策 SDK
$screen_width$screen_height$timezone_offsetSDK 预置字段SDK 自动Native SDK 自动或 H5 SDK 默认H5 SDK 默认或不提供神策 SDK
$network_type$wifiSDK 预置字段SDK 自动Native SDK 自动或 H5 SDK 默认H5 SDK 默认或不提供神策 SDK

执行边界:业务自定义字段必须由业务埋点封装按事件传入;SDK 字段只验证 SDK 是否正常采集,不要求业务代码再次传递;同名但带 $ 的 SDK 字段与不带 $ 的业务字段不是同一个字段,不得互相替代。

4.7 BNS/IMS 后端字段来源闭环

本节用于把事件字段和当前后端实现对应起来。前端不能从按钮文案、默认值或接口地址猜业务字段;凡是后端已返回的业务事实,以上一次成功接口响应为准;接口没有返回或当前页面没有业务关联时,字段按“省略”处理,不补空字符串、不补 unknown

4.7.1 BNS 字段来源

埋点字段BNS 接口/对象来源前端取值和标准化逻辑上报边界
loan_id/query/queryLoanList/query/queryLoanDetail/query/queryCustLoanInfo、还款计划查询;请求/业务对象字段为 loanId取当前页面所展示或提交的借据 loanId,统一转字符串;列表页只有在事件明确针对某一笔借据时传借款申请尚未生成借据、首页无具体借据、绑卡通用入口不传
product_idBNS 产品查询返回的 QuerySimpleProductResp/产品列表;申请请求使用 productFeeId本期将产品子项标识统一映射为事件字段 product_id=productFeeId;不得用产品名称代替产品列表选择、提现试算、借款提交相关事件传;没有产品响应时不传
loan_amountrepay_amount/apply/loanCalculate/apply/loanApplyLoanApplyReq.loanAmt,以及还款查询返回的应还/本次支付金额取用户最终确认或接口最终确认的数值,使用数字类型;页面展示金额和接口金额不一致时,结果事件以接口确认值为准金额相关事件传;页面浏览事件只有事件字典明确要求时传
selected_tenorterm_daysLoanApplyReq.loanTermloanSpan;还款计划返回的期数/期限字段selected_tenor 取用户最终选择的 loanTermterm_days 仅在接口明确返回天数时传,不由前端用日期自行推算产品选择、提现确认、借款提交相关事件传
loan_typepayment_methodLoanApplyReq.loanTypeaccountTypechannel;账户类型代码明确区分 bankAccountwalletloan_type 传后端贷款类型枚举;payment_method 传用户选择且实际提交的标准支付方式;渠道字段另按公共字段规则传借款提交、还款提交和支付方式选择事件传;不把 accountType 直接当作 payment_method,需按事件字典映射
resultstatuserror_codeBNS 外层 Response 结果、ApplyExclusionRuleResp、借据/还款计划状态结果事件先读取接口成功标识,再读取业务状态;失败只传稳定错误码或错误分类,禁止透传原始错误文案接口返回、页面状态变化和结果页事件传;成功事件不传失败字段
bank_codebank_name/query/queryBankList/query/queryBankAcctQueryBankAcctResp.bankCode/bankName银行选择事件取用户选中的标准银行编码和标准名称;已绑定账户展示取 BNS 返回值绑银行账户、虚拟账户和需要展示收款账户的事件传;不传账号原文
account_createdexpire_timeBNS 提现/收款账户查询或 /apply/generatePlutusWebOrder 返回的收款信息account_created 由接口是否返回有效账户判断;expire_time 只取接口明确返回的过期时间并统一为 ISO-8601 或约定时间格式虚拟账户页面和账户结果事件传;接口没有该字段时省略
bind_methodBNS /bank/routeRedirect/bank/queryBindCardStatus 以及账户流程上下文卡流程固定为 card,银行账户流程固定为 bank_account;不要根据页面标题猜绑卡/绑账户事件必传;普通贷款和还款事件不传

4.7.2 IMS 字段来源

埋点字段IMS 接口/对象来源前端取值和标准化逻辑上报边界
provider/user/v1/bindCardQuery 返回的 paymentChannel,以及路由返回的 RouteRedirectResp.bindCardType;IMS 内部按 PayChannelEnum 路由到 Paystack、Monnify 等实现优先取接口最终返回的 paymentChannel;路由阶段取 bindCardType 并映射为统一 provider 枚举;不得把前端猜测的渠道当最终值绑卡结果、OTP、处理中、结果页事件传;未完成路由且接口无渠道时省略
statusresult/user/v1/bindCardQuerystatus/user/v1/accountInfoResultstatusCardInfoQueryResp.statusIMS 渠道状态先映射为统一的 processing/success/failedPENDINGpending 等仅作为输入,不直接混入埋点枚举绑卡/绑账户接口结果和结果页传;前端按钮点击不伪造接口结果
bind_method/user/v1/routeRedirect/user/v1/routeAccountRedirect 的业务路径;RouteRedirectReq.isAccountscene卡路由统一传 card,账户路由统一传 bank_accountscene 只作为渠道流程上下文,不替代 bind_method绑卡和绑账户所有结果链路传
bank_codebank_name/user/v1/bankNameQueryCardInfoQueryResp.bankCode/bankName、账户绑定查询结果取 IMS 标准银行编码/名称;银行名称只使用接口返回或本地银行字典标准名称银行选择、卡结果、账户结果事件传;卡号和账号原文不传
card_typeBindCardQueryResp.cardTypeCardInfoQueryResp.cardType取接口返回的卡类型并映射为统一枚举;无返回值时省略卡信息展示和绑卡结果事件传
card_statusCardStatusQueryResp.isValid/detailInfoCardInfoQueryResp.status/isInvalidisValid=Y 映射为有效;detailInfo 仅映射为业务可读状态,不把原始内部说明直接上报卡状态页、绑卡跳过确认和结果页传
is_card_finishis_account_finishBindCardQueryResp.isCardFinish/isAccountFinish、BNS BindCardStatusResp 同名字段保持布尔语义,统一为 true/false;只有接口返回明确值时传绑卡/绑账户完成状态和总状态页传
error_codeerror_msgIMS 外层响应和渠道结果;IMS 内部会按渠道将失败状态归一error_code 传稳定业务错误码;error_msg 仅传脱敏后的固定分类,禁止传渠道原文、卡号、账号、证件号或堆栈失败结果事件必传 error_codeerror_msg 按敏感信息规则处理
referencetokentransfer_idIMS BindCardQueryResp.reference/tokenRouteRedirectResp.transferId这些是绑卡/跳转链路技术关联值,不纳入本期前端业务公共字段,不得转成 content 或事件名;如需排障由日志链路关联本期埋点不传;仅保留在接口日志和 trace_id 关联链路

4.7.3 前后端字段闭环规则

  1. 前端在发起 BNS/IMS 请求时保存本次页面上下文;接口成功返回后,用响应中的业务字段刷新事件上下文,再上报 resultstatusproviderloan_id 等结果字段。
  2. 前端提交参数和后端最终结果不一致时,点击事件记录“用户提交值”,结果事件记录“接口确认值”;两者不能覆盖。
  3. BNS 的 loanIdproductFeeId 和 IMS 的 referencetoken 属于不同标识体系。本期埋点只保留业务需要的 loan_idproduct_id,不把 IMS 技术关联值伪装成业务 ID。
  4. source_pagetarget_pagecontentduration_mssession_idevent_time 由前端埋点上下文生成,BNS/IMS 不负责补齐;trace_id 由请求链路生成,只有事件与接口有关联时传。
  5. 后端字段为空、接口失败或字段未在当前接口返回时,事件按字段适用性省略;不以空字符串、nullunknown 或上一笔业务数据补值。

4.7.4 首页状态字段闭环(home_page_view

home_page_view 不再使用含义不明确的 user_status。本期只上报以下三个事件特有状态字段,字段名称和枚举固定,便于按用户状态分层、计算转化漏斗和定位不可借原因。三个字段均在首页状态接口返回并完成加工后取值;接口失败或字段缺失时不补默认值、不把空值当作业务状态。

埋点字段业务含义允许值当前接口来源加工逻辑
borrow_eligibility_status当前是否具备发起借款的资格can_borrowcannot_borrowqueryloanapplyauthority.isCanloanApply;首页用户未达到已获额或存在在途借款时使用 BNS 状态结果判断isCanloanApply=true 映射为 can_borrowfalse 映射为 cannot_borrow。当 credit_status 不是 credited,或 loan_statusunder_review/repaying/overdue 时,业务上固定为 cannot_borrow,不等待前端按钮表现推断。接口未返回或请求失败时不默认为 cannot_borrow,应等待重试或不补发状态快照
credit_status当前授信/获额阶段not_appliedsubmittedunder_reviewcreditedrejectedBNS queryCustInfo 返回的 custInfo.creditStagecreditStage=0/1 映射为 not_applied10 映射为 submitted8 映射为 under_review9 映射为 credited7 映射为rejected
loan_status当前借款生命周期状态not_borrowedunder_reviewrepayingoverdueBNS queryCustInfo.blcQueryLoanStageResp.stagequeryCustLoanInfo.queryPreviousLoanResp.loanStatus、还款计划 isOverDue按“逾期 > 还款中 > 审批中 > 未借款”优先级加工:loanStatus=O 或有效还款计划 isOverDue=trueoverdueloanStatus=N/PloanStage=22repayingloanStatus=A/U 或 BNS loanStage=19/20under_review;无有效在途借款,或 loanStatus=F/C/IVnot_borrowed。未知状态不得猜测,进入状态映射监控

首页事件上报时序:先等待 BNS queryCustInfo;已获额用户再等待 BNS queryCustLoanInfoqueryloanapplyauthority 的成功结果;全部状态加工完成后上报一次 home_page_view。状态接口失败时不使用上一次缓存、空值或前端按钮是否可点击结果替代后端状态;可在重试成功后补发一次状态快照,重试仍失败则只记录埋点错误日志,不伪造三个状态字段。

当前不支持项及建议:

  1. BNS getLoanStage 当前返回 19/20/22,其中 19 是 BNS 在途提现申请、20 是 FCS 待放款/未激活借据、22 是存在在线借款;Android 当前只在部分分支把 20/22 覆盖到页面状态,19 没有完整进入页面状态。推荐前端埋点加工直接读取接口原始 loanStage,不要读取最终 UI 文案;长期由 BNS 直接返回归一化的 loanStatus
  2. queryloanapplyauthority 的当前本地后端实现未在本次代码范围内找到对应的 BNS 归一化字段,Android 已有 isCanloanApply 响应模型。推荐保留该接口作为可借资格唯一事实来源,并由 BNS 明确接口成功、失败和字段缺失语义;失败不可转成“不可借”。IMS 只负责绑卡/账户渠道,不提供上述三类首页状态,本期不得用 IMS 状态推断首页状态。

4.8 事件上报时的敏感信息处理

当前代码存在敏感值进入事件的路径:cash_center 旧代码曾将卡号、CVV、手机号、账号等拼入事件名,但当前 report.js 上报逻辑已注释;wp_h5 的旧 reportTracking 会透传调用方传入的属性;roovault 部分原生事件会把输入值拼接到事件名后再调用 SDK。因此本期统一封装必须在调用 SDK、H5 SDK、Bridge 或 HTTP 发送前执行以下处理,不能只依赖后端脱敏。

输入内容本期事件中允许保留处理逻辑
卡号card_number_filledcard_number_lengthcard_brand删除原始卡号;不得进入事件名、content、自定义属性、日志或 URL
CVV/有效期cvv_filledexpiry_filled删除原始值;不得记录长度、明文或拼接值
银行账号account_number_filledaccount_number_lengthbank_code删除原始账号;银行只传稳定银行编码
手机号phone_filledphone_length;5.6 明确例外的 contact_phone申请人手机号仍删除原文;仅 5.6 的通讯录联系人选择结果和授信资料提交事件,按事件表明确传联系人手机号明文;不得进入事件名、日志或 URL
BVN/NIN/证件号identity_typeidentity_filledverify_result删除证件号原文;不得进入事件名或错误信息
姓名、地址、联系人field_filledaddress_completedrelation_type;5.6 明确例外的 contact_namecontact_phone地址和申请人信息删除原文;仅 5.6 事件表明确的联系人姓名、手机号允许作为明文字段传入埋点;不得进入事件名、日志或 URL
收入/金额等敏感业务值income_bucket、规定的金额区间或业务金额字段仅按对应事件字典要求传;未经事件字典定义不得新增原值字段
接口错误信息error_code、固定 error_category删除原始响应、堆栈和带用户数据的 error_msg

统一封装执行顺序:先校验事件名和自定义属性白名单,再按本表处理敏感字段,最后才调用 SDK/Bridge/HTTP;除 5.6 事件表明确允许的 contact_namecontact_phone 外,命中禁止字段时开发环境报错并阻止该字段发送,生产环境静默丢弃该字段但不阻断业务流程。5.6 的联系人明文仅允许出现在规定事件属性中,不得复制到事件名、日志、缓存、URL 或其他事件。敏感字段处理结果纳入相关事件验收。

5. 场景埋点需求

本章各事件表的“事件特有必传字段”只列该事件新增的业务属性。第 4 章定义的公共字段由统一埋点上下文按事件类型自动注入,不在各事件中重复定义或重复列出,包括 event_nameevent_pageevent_typeevent_time、身份/版本字段,以及 scenecontentsource_pagetarget_pageduration_msloan_idpayment_methodbind_methodstatusresulterror_codeerror_msg。表中以 表示该事件除公共字段外没有额外必传属性。

5.1 还款/支付

覆盖端:

  • cash_center: payMethod, payResult, virtualAccount
  • wp_h5: repayment, earlyRepay, repaymentHistory, afterRepayment
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
还款方式页repayment_method_page_viewview页面进入repay_amount, available_methods金额取页面展示的应还金额;支付方式取接口返回的可用方式编码列表
还款方式页repayment_method_page_leaveleave页面离开已选择支付方式时由公共字段 payment_method记录;未选择时不传该公共字段
还款方式列表repayment_method_clickclick选择支付方式具体方式由公共字段 payment_method 记录
确认还款repayment_confirm_clickclick点击确认repay_amount取用户最终确认金额,使用数值,不传格式化文案
还款接口repayment_submit_resultresult还款提交接口返回repay_amount取接口确认的本次还款金额;结果、支付方式和错误字段按公共字段规则注入
支付结果页repayment_result_page_viewview结果页展示repay_amount取本次还款金额;结果和实际支付方式按公共字段规则注入
支付结果页repayment_result_action_clickclick点击完成/重试/查看详情点击对象和跳转目标分别由公共字段 contenttarget_page 记录
虚拟账户页virtual_account_page_viewview页面进入bank_code, account_created, expire_timebank_code取银行编码;account_created为是否已生成账户;expire_time取接口给出的过期时间
还款历史repayment_history_page_viewview页面进入loan_count, has_overdueloan_count取列表总贷款数;has_overdue取列表是否存在逾期记录
还款历史详情repayment_history_detail_viewview详情展示repay_status取页面展示的还款状态编码;贷款 ID 按公共字段规则注入

5.2 绑银行卡

覆盖端:

  • cash_center: bindCard, addCard, checkCode, checkPhone, checkBirth, checkPin, bindCardWaiting, bindCardResult
  • wp_h5: cardStatus, checkCardStatus
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
绑卡页bank_card_page_viewview页面进入页面来源和绑定方式按公共字段规则注入
卡号输入框bank_card_number_focusinput聚焦不上报卡号原文
卡号输入框bank_card_number_blurinput失焦card_number_filled, card_number_length, card_brand只传是否填写、长度和卡组织编码;不得传卡号原文
有效期输入框bank_card_expiry_focusinput聚焦不上报有效期原文
有效期输入框bank_card_expiry_blurinput失焦expiry_filled是否填写完整有效期,布尔值
CVV 输入框bank_card_cvv_focusinput聚焦不上报 CVV 原文
CVV 输入框bank_card_cvv_blurinput失焦cvv_filled是否填写 CVV,布尔值,不传长度和原文
协议勾选bank_card_agreement_clickclick勾选/取消checked取点击完成后的勾选状态
提交绑卡bank_card_submit_clickclick点击提交card_number_filled, expiry_filled, cvv_filled取提交瞬间三个字段的完成状态
前端校验失败bank_card_validate_failresult表单校验失败field_name取失败字段编码;错误码和脱敏错误摘要按公共字段规则注入
绑卡接口结果bank_card_submit_resultresult接口返回provider取接口最终返回的实际通道;结果和错误字段按公共字段规则注入
OTP 页bank_card_otp_page_viewviewOTP页展示provider, send_typeprovider取实际绑卡通道;send_type取短信/语音等发送方式
OTP 重发bank_card_otp_resend_clickclick点击重发provider, resend_countresend_count为本次绑卡流程已重发次数,首次重发为 1
OTP 提交bank_card_otp_submit_clickclick点击提交code_filled是否填写完整验证码,布尔值,不传验证码
处理中页bank_card_processing_viewview处理中展示provider取当前实际通道;处理状态按公共字段规则注入
结果页bank_card_result_page_viewview成功/失败页展示provider取最终实际通道;结果和错误码按公共字段规则注入
结果页操作bank_card_result_action_clickclick确认/重试/返回首页点击对象和跳转目标按公共字段规则注入

5.3 绑银行账户(H5)

覆盖端:

  • cash_center: addBankAccount, addBankAccountResultSteps, addBankAccountQueryResult, addBankAccountResult

页面编码由公共上下文注入,不放入事件特有属性。

页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
绑账户页bank_account_page_viewview页面进入verify_bvn_enabled取当前流程是否启用 BVN 校验;页面来源和绑定方式按公共字段规则注入
银行选择bank_account_bank_select_clickclick选择银行bank_code, bank_namebank_code取标准银行编码;bank_name仅传标准化名称,不传用户输入
账号输入框bank_account_number_focusinput聚焦不上报账号原文
账号输入框bank_account_number_blurinput失焦account_number_filled, account_number_length只传是否填写和长度,不传账号原文
BVN 校验勾选bank_account_verify_bvn_clickclick勾选/取消checked取点击完成后的勾选状态
提交账户bank_account_submit_clickclick点击提交bank_code, account_number_filled取当前银行编码和账号完成状态
前端校验失败bank_account_validate_failresult表单校验失败field_name取失败字段固定编码;错误码和脱敏错误摘要按公共字段规则注入
绑账户接口结果bank_account_submit_resultresult接口返回provider取接口最终返回的实际通道;结果和错误字段按公共字段规则注入
阶段处理中bank_account_step_viewviewProcessing/Verify/Success/Fail 阶段展示step_name, step_indexstep_name取固定阶段名;step_index从 1 开始;状态按公共字段规则注入
阶段离开bank_account_step_leaveleave阶段切换或页面离开step_name取离开的阶段;停留时长和离开前状态按公共字段规则注入
结果操作bank_account_result_action_clickclick确认/重试/返回点击对象和跳转目标按公共字段规则注入
BVN 银行账户验证页bvn_bank_account_page_viewviewBvnBankAccountActivity 页面展示is_first_bvn, has_prefilled_bank_accountis_first_bvn取 Activity 入参;has_prefilled_bank_account仅判断是否已有银行及账号,不传原文
BVN 银行账户验证结果bvn_bank_account_submit_resultresultfindBvnInfo 成功或失败回调verification_stage固定传 find_bvn;结果和错误字段按公共字段规则注入,成功和失败回调各上报一次

5.4 提现/提现结果

覆盖端:

  • wp_h5: withdraw, withdraw-refactor, withdrawStatus
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
提现页withdraw_page_viewview页面进入并拿到初始化数据product_id取 BNS 产品响应中的 productFeeId;贷款 ID 按公共字段规则注入
提现页withdraw_page_leaveleave页面离开/失活loan_amount, selected_tenor取离开前最终金额和期限;停留时长按公共字段规则注入
借款金额withdraw_amount_blurinput金额框失焦loan_amount, amount_valid金额取当前输入数值;amount_valid传前端校验结果,失败错误字段按公共规则注入
借款期限withdraw_loan_terms_clickclick选择期限term_index, term_days, product_idterm_index:传事件发生时的整数值;term_days:取事件触发时页面或接口的实际值;product_id:取事件触发时页面或接口的实际值
优惠券withdraw_coupon_clickclick点击优惠券入口coupon_available, coupon_selectedcoupon_available:取事件触发时页面或接口的实际值;coupon_selected:传 true/false,表示事件发生时的实际状态
借款用途withdraw_loan_purpose_clickclick点击/选择用途purpose_codepurpose_code:取稳定业务编码,不传展示文案
放款账户withdraw_disbursement_account_clickclick点击/切换账户account_type, has_bound_accountaccount_type:取稳定业务编码,不传展示文案;has_bound_account:传 true/false,表示事件发生时的实际状态
合同withdraw_contract_clickclick点击合同contract_typecontract_type:取稳定业务编码,不传展示文案
提交提现withdraw_submit_clickclick点击提交loan_amount, term_days, account_type, coupon_selected取提交瞬间的最终金额、期限、账户类型和优惠券状态
提现接口结果withdraw_submit_resultresult接口返回结果和错误字段按公共字段规则注入
提现结果页withdraw_result_page_viewview结果页展示disbursement_status取放款状态业务枚举;页面结果按公共字段规则注入
结果页操作withdraw_result_page_clickclick返回首页/查看合同/帮助/绑卡点击对象、当前结果和跳转目标按公共字段规则注入
结果页弹窗曝光withdraw_result_popup_viewpopup_view评价/提额/邀请/活动弹窗展示popup_typepopup_type:取稳定业务编码,不传展示文案
结果页弹窗点击withdraw_result_popup_clickpopup_click弹窗按钮/关闭popup_type, action_typepopup_type:取稳定业务编码,不传展示文案;action_type:取稳定业务编码,不传展示文案

5.5 KYC/BVN/NIN/人脸

覆盖端:

  • roovault: BVNVerify, NINVerify, BVNandNINVerify, face_guide, face_reg
  • wp_h5: faceVerification
  • cash_center: verifyOtp, thirdBankAuth 中的第三方身份/OTP 授权
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
BVN 页kyc_bvn_page_viewview页面展示页面来源按公共字段规则注入
BVN 输入kyc_bvn_input_focusinput聚焦不上报 BVN 原文
BVN 输入失焦kyc_bvn_input_blurinput失焦identity_filled, identity_lengthidentity_filled:传 true/false,长度与格式正则校验;identity_length:只传长度,不传原文
BVN 清空kyc_bvn_input_clear_clickclick点击清空点击对象按公共字段规则注入
拨号说明kyc_identity_dial_clickclick点击拨号说明identity_typebvnnin,不传拨号码
BVN 提交kyc_bvn_confirm_clickclick点击确认identity_filledtrue/false,表示 BVN 是否完整且通过前端格式校验
BVN 提交结果kyc_bvn_submit_resultresultBVN 校验接口回调verification_modedirectbank_account;结果和错误字段按公共字段规则注入,每次请求只上报一次
人脸引导页face_guide_page_viewview引导页展示页面来源按公共字段规则注入
人脸采集页face_capture_page_viewview采集页展示liveness_providerliveness_provider:取事件触发时页面或接口的实际值
活体校验结果face_liveness_resultresult活体 SDK 成功/失败回调liveness_provider, attempt_noprovider 取实际活体通道;attempt_no从 1 开始;结果和错误字段按公共字段规则注入
人脸上传结果face_upload_resultresult上传完成liveness_provider, upload_stageupload_stage固定为 face_image;耗时、结果和错误字段按公共字段规则注入
人脸识别结果face_verify_resultresultBNS 人脸识别接口返回liveness_provider取实际活体通道;结果和错误字段按公共字段规则注入

5.6 授信申请资料

覆盖端:

  • roovault: Work_info, Person_Info, Emergency_Contact, BankAccount
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
工作信息页apply_work_info_page_viewview页面展示页面来源按公共字段规则注入
工作信息选择项apply_work_info_field_clickclick点击就业状态、行业、职位、日期、用途等选择项field_name, selected_valuefield_name取稳定字段编码;selected_value只传字典编码或规定区间,不传展示文案和收入原值
工作信息输入项apply_work_info_field_inputinput文本或金额输入框失焦field_name, filled, value_bucketfilled传布尔值;value_bucket仅用于需求已定义的金额区间,无区间定义时不传
工作信息提交apply_work_info_submit_clickclick点击下一步completed_field_count, missing_field_count, unfilled_fieldsunfilled_fields传未填写字段稳定编码数组,按页面顺序排列;不得传中文标题、用户输入值或错误文案
个人信息页apply_person_info_page_viewview页面展示页面来源按公共字段规则注入
个人信息选择项apply_person_info_field_clickclick点击教育、婚姻、居住、语言、宗教等选择项field_name, selected_value只传稳定字段编码和字典编码,不传展示文案
个人信息输入项apply_person_info_field_inputinput地址等输入框失焦field_name, filled, address_completed只传填写状态;地址不得上传原文
个人信息提交apply_person_info_submit_clickclick点击下一步completed_field_count, missing_field_count传提交时已完成字段数和未完成字段数
紧急联系人页apply_emergency_contact_page_viewview页面展示页面来源按公共字段规则注入
联系人关系选择apply_emergency_contact_relation_clickclick选择关系contact_role, relation_typecontact_rolefamily/otherrelation_type取关系字典编码;
点击 Contactapply_emergency_contact_contact_clickclick点击联系人图标或联系人输入区域,准备打开系统通讯录contact_rolecontact_rolefamily/other;本事件不传联系人姓名、手机号或通讯录记录标识
通讯录联系人选择结果apply_emergency_contact_contact_select_resultresult从系统通讯录选择联系人并成功回填姓名、手机号contact_role, contact_name, contact_phonecontact_rolefamily/othercontact_name取通讯录返回并经页面现有姓名校验后的最终姓名;contact_phone取通讯录返回并经现有号码清洗、格式校验后的最终手机号,按本次需求传明文;仅在联系人选择成功且手机号校验通过后上报一次
联系人字段输入apply_emergency_contact_field_inputinput姓名或手机号输入框失焦contact_role, field_name, filled, value_length姓名只传填写状态;手机号可传长度,不传原文
联系人提交apply_emergency_contact_submit_clickclick点击完成completed_field_count, missing_field_count, family_contact_name, family_contact_phone, family_contact_phone_changed, other_contact_name, other_contact_phone, other_contact_phone_changed以上联系人属性取点击提交瞬间页面中的最终值;姓名、手机号按本次需求传明文,未填写传空字符串;*_contact_phone_changed 为布尔值:当前手机号与最近一次通讯录回填手机号不同传 true,相同传 false,从未通过通讯录选择时固定传 false;不得传通讯录记录标识
SIM 卡校验失败apply_emergency_contact_submit_sim_error_resultresult点击完成后,客户端未检测到 SIM 卡仅在 PhoneUtils.ishasSimCard 返回 false 时上报一次;公共字段 result 固定为 failerror_code 固定为 client_validation_errorerror_msg 固定为 sim_card_missing
申请资料结果apply_profile_submit_resultresult接口返回step_namestep_namework_info/person_info/emergency_contact;结果和错误字段按公共字段规则注入

注意:当前存在把收入、地址、联系人手机号、姓名拼到事件名的实现,必须改为稳定事件名和事件属性。5.6 仅按本表两个事件允许联系人姓名、手机号明文,其他事件仍按第 4.8 节处理。最后一步点击完成时,当前 Android 实现会先执行 SIM 卡存在性校验;未检测到 SIM 卡时只上报 apply_emergency_contact_submit_sim_error_result,不触发 apply_profile_submit_result,也不应将 no_sim 展示文案直接作为 error_msg

apply_work_info_submit_click.unfilled_fields 为未填写字段的多值枚举,按页面顺序输出,候选编码固定为:employment_statuscompany_industryjob_titlestart_work_timemonthly_incomesalary_datedesired_loan_amountloan_purpose。只包含提交时未填写或未通过前端必填校验的字段编码;全部已填写时固定传 none。具体序列化形式由统一埋点封装按 SDK 能力处理,本文不约定 JSON 结构。

5.7 启动/登录/权限

覆盖端:

  • roovault: startup, register, VerifyCode, PrivacyPolicy, PermissionsAuth
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
启动页startup_page_viewviewApp 启动页展示无事件特有属性;公共字段按第 4 章注入
启动页离开startup_page_leaveleave跳转下一页停留时长和目标页面按公共字段规则注入
注册登录页login_page_viewview页面展示页面来源按公共字段规则注入
手机号输入login_phone_blurinput失焦phone_filled, phone_lengthphone_filled:传 true/false,表示事件发生时的实际状态;phone_length:只传长度,不传原文
获取验证码login_get_otp_clickclick点击获取验证码无事件特有属性;点击对象按公共字段规则注入
语音验证码login_voice_otp_clickclick点击语音验证码无事件特有属性;点击对象按公共字段规则注入
OTP 页login_otp_page_viewviewOTP 页展示无事件特有属性;公共字段按第 4 章注入
OTP 提交结果login_otp_submit_resultresult登录接口返回结果和错误字段按公共字段规则注入
隐私协议页privacy_policy_page_viewview协议展示无事件特有属性;公共字段按第 4 章注入
同意隐私协议privacy_policy_agree_clickclick点击同意无事件特有属性;点击对象按公共字段规则注入
权限页permissions_auth_page_viewview权限页展示permission_listpermission_list:取事件触发时页面或接口的实际值
权限同意/拒绝permissions_auth_action_clickclick点击同意/拒绝permission_list取本次申请的权限编码列表;同意或拒绝由公共字段 content 记录
权限申请结果permissions_auth_resultresult系统权限回调完成permission_list, granted_count, denied_count, permanently_denied权限列表取实际请求项;计数取本次回调结果;permanently_denied表示是否存在“不再询问”的拒绝项;结果按公共字段规则注入

5.8 首页/个人中心/运营位

覆盖端:

  • roovault: MainActivity, MineFragment, banner/operator/message

个人中心范围以当前 Settings 页面实际展示的入口为准:覆盖 MineFragment 直接入口,以及 OptionsActivity 中的 Check for Updates、Terms & Conditions、Privacy Policy、Contact Us 和 Log Out。Settings 页面中的 Terms/Privacy 事件与 5.7 登录/权限流程中的隐私协议事件分开,分别用于设置页入口和协议同意流程;版本号展示不作为本期业务点击事件。

页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
首页home_page_viewview首页状态接口返回并完成加工后上报borrow_eligibility_status, credit_status, loan_status三个状态字段均按第 4.7.4 节从 BNS/可借资格接口真实返回值加工;不传 UI 文案,不使用缓存或按钮可点击状态替代接口结果
底部 Tabhome_tab_clickclick点击 tabtab_nametab_name:取稳定业务编码,不传展示文案
个人中心mine_page_viewviewMineFragment 展示loan_status取页面接口已返回的贷款状态;无值时不补默认值
个人资料入口mine_profile_clickclick点击已登录用户信息区域点击对象和目标页面按公共字段规则注入
个人资料页mine_profile_page_viewviewMineAppInfoActivity 展示profile_completion_statuscomplete/incomplete;页面无该状态时不传
优惠券入口mine_coupon_clickclick点击 My Coupons点击对象和目标页面按公共字段规则注入
优惠券页mine_coupon_page_viewview优惠券 H5/Native 页面展示available_coupon_count取接口返回的可用优惠券数量
银行卡入口mine_bank_card_clickclick点击 My Cards点击对象和目标页面按公共字段规则注入
银行卡页mine_bank_card_page_viewview银行卡列表展示bound_card_count取接口返回的已绑定卡数量
贷款历史入口mine_loan_history_clickclick点击 Loan History点击对象和目标页面按公共字段规则注入
贷款历史页mine_loan_history_page_viewview贷款历史页面展示loan_count取当前接口返回的贷款记录数量
FAQ 入口mine_faq_clickclick点击 FAQ点击对象和目标页面按公共字段规则注入
FAQ 页mine_faq_page_viewviewFAQ 页面展示页面来源按公共字段规则注入
设置入口mine_settings_clickclick点击 Settings点击对象和目标页面按公共字段规则注入
设置页mine_settings_page_viewviewOptionsActivity 展示页面来源按公共字段规则注入
Terms & Conditions 入口mine_terms_conditions_clickclick设置页点击 Terms & Conditions点击对象和目标页面按公共字段规则注入
Terms & Conditions 页mine_terms_conditions_page_viewviewTerms & Conditions 页面展示页面来源按公共字段规则注入
Privacy Policy 入口mine_privacy_policy_clickclick设置页点击 Privacy Policy点击对象和目标页面按公共字段规则注入;与 5.7 的隐私协议同意流程事件区分
Privacy Policy 页mine_privacy_policy_page_viewviewPrivacy Policy 页面展示页面来源按公共字段规则注入;与 5.7 的 privacy_policy_page_view 区分页面入口场景
检查更新mine_check_update_clickclick设置页点击 Check Update点击对象按公共字段规则注入
检查更新结果mine_check_update_resultresult版本检查接口返回has_new_version传是否存在新版本;结果和错误字段按公共字段规则注入
Contact Us 入口mine_contact_us_clickclick设置页点击 Contact Us点击对象和目标页面按公共字段规则注入;未登录或资料未完成时仍记录用户点击,后续跳转结果按业务流程处理
Contact Us 页mine_contact_us_page_viewview客服聊天/WebContainer 页面展示页面真实展示后上报;页面来源和目标页面按公共字段规则注入
退出登录mine_logout_clickclick设置页点击 Logout 并确认点击对象按公共字段规则注入
退出登录结果mine_logout_resultresult退出登录处理完成结果和错误字段按公共字段规则注入
投诉反馈入口mine_complaint_clickclick点击 Complaint Feedback点击对象和目标页面按公共字段规则注入
投诉反馈页mine_complaint_page_viewview投诉反馈 H5 展示页面来源按公共字段规则注入

5.9 补件/客诉/增信(忽略)

覆盖端:

  • wp_h5: uploadDocuments, complaint, increaseLimit, recredit
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
补件页upload_documents_page_viewview页面展示document_type, required_countdocument_type:取稳定业务编码,不传展示文案;required_count:传事件发生时的整数值
选择文件upload_documents_choose_file_clickclick点击选择文件document_type, file_typedocument_type:取稳定业务编码,不传展示文案;file_type:取稳定业务编码,不传展示文案
上传结果upload_documents_file_resultresult上传成功/失败document_typedocument_type取稳定业务编码;结果和错误字段按公共字段规则注入
提交补件upload_documents_submit_clickclick点击提交uploaded_count, required_count传已上传数量和要求数量
客诉页complaint_page_viewview页面展示页面来源按公共字段规则注入
客诉提交complaint_submit_clickclick点击提交complaint_type, has_attachmentcomplaint_type取稳定业务编码;has_attachment传布尔值
客诉结果complaint_submit_resultresult接口返回结果和错误字段按公共字段规则注入
增信页increase_limit_page_viewview页面展示material_required取当前流程是否要求补充材料
增信提交increase_limit_submit_clickclick点击提交material_count传本次提交的材料数量
增信结果increase_limit_submit_resultresult接口返回结果和错误字段按公共字段规则注入

5.10 浏览器/性能监控

覆盖端:

  • wp_h5: browser_info, web_performance_metrics
页面/模块事件名类型触发时机事件特有必传字段字段取值逻辑
浏览器信息browser_inforesult页面初始化后browser_name, browser_version, os, user_agent_hashbrowser_name:取事件触发时页面或接口的实际值;browser_version:取事件触发时页面或接口的实际值;os:取事件触发时页面或接口的实际值;user_agent_hash:取事件触发时页面或接口的实际值
页面性能web_performance_metricsperformance页面加载完成dns_ms, tcp_ms, request_ms, response_ms, dom_ready_ms, load_ms, resource_countdns_ms:传客户端计算的毫秒数;tcp_ms:传客户端计算的毫秒数;request_ms:传客户端计算的毫秒数;response_ms:传客户端计算的毫秒数;dom_ready_ms:传客户端计算的毫秒数;load_ms:传客户端计算的毫秒数;resource_count:传事件发生时的整数值
接口性能api_response_timeperformance关键接口完成api_nameapi_name取接口字典中的稳定编码;耗时、结果和错误码按公共字段规则注入

5.11 Android 原生场景事件名和必传字段匹配分析

分析基线:roovault origin/develop,提交 3ae2c97。仅检查未被注释且存在实际调用的 SensorsApiHelper.trackView/trackClickAnalyticsTracker.trackView/trackClickDataRecordConstant 中只声明但未调用的常量、注释代码和 H5 Bridge 转发事件不作为 Android 原生覆盖证据。

5.11.1 场景级覆盖结论

场景Android 当前实际调用证据事件名合理性必传字段合理性与完整性结论
5.1 还款/支付未发现还款方式、支付确认、还款结果、虚拟账户或还款历史的原生埋点调用当前事件名适用于 cash_center/wp_h5,但不能称为 Android 已有事件loan_id、金额、支付方式和结果字段在当前原生调用中没有来源Android 原生不纳入本场景覆盖;保留 H5/业务中心事件,不能用原生埋点验收
5.2 绑银行卡当前 roovault 未发现银行卡输入、OTP、绑卡处理或绑卡结果的原生调用;BvnBankAccountActivity 是银行账户流程,不是银行卡流程事件名与银行卡流程语义一致,但不是当前 Android 代码事件名卡号完成状态、卡组织、provider、结果等字段当前没有原生调用点移除 Android 覆盖声明;本场景仅按 cash_center/wp_h5 和实际绑卡模块验收
5.3 绑银行账户BvnBankAccountActivity 有页面展示/离开、银行选择、账号聚焦/失焦、BVN 勾选、性别选择、提交点击,以及 onFindBvnInfoSuccess/onFindBvnInfoError 回调通用控件使用 bank_account_*;Activity 独立页面使用 bvn_bank_account_page_view,避免继续沿用含义不清的旧 BankAccount_*银行编码、账号完成状态和页面入参可直接取得;BVN 查询结果可在 findBvnInfo 成功/失败回调取得;provider 和后续阶段状态仍需各自接口返回页面事件和 bvn_bank_account_submit_result 本期必须补齐;provider/阶段事件只在对应接口真实返回时上报
5.4 提现/提现结果未发现原生提现页面、金额、期限、提交或结果事件调用事件名适用于提现 H5,当前 Android 无对应页面事件loan_idproduct_id、金额、期限、账户类型和结果字段均无原生触发点Android 原生不纳入本场景覆盖;字段只对 H5/业务中心生效
5.5 KYC/BVN/NIN/人脸BVN、NIN、BVN+NIN 有页面、输入和确认调用;BaseFaceIdentifyActivity 有活体通道、上传成功/失败和识别结果回调用户提交统一使用 click,输入聚焦/失焦使用 input;新增 kyc_bvn_submit_resultface_liveness_result,保留服务端人脸结果 face_verify_resultBVN 填写状态、活体 provider 和回调结果可取得;证件原文、图片地址和原始错误禁止上报三类结果事件必须分别落在 BVN 接口、活体 SDK、BNS 人脸接口回调,不得用页面跳转推断成功
5.6 授信申请资料工作和个人信息页同时存在选择控件与输入控件;紧急联系人页明确有系统 Contact 点击入口、通讯录选择回调、字段输入和提交点击选择行为使用 *_field_click,输入失焦使用 *_field_input;Contact 入口独立为 apply_emergency_contact_contact_click;通讯录回填结果使用 apply_emergency_contact_contact_select_result字段编码、填写状态、通讯录回填后的姓名/手机号及最近一次回填值可取得;unfilled_fields 需要提交时按页面字段顺序实时计算开发需补完成数、缺失数和 unfilled_fields;Contact 点击只传 contact_role;通讯录选择结果和提交点击按 5.6 表传联系人姓名、手机号明文及手机号变更标识,禁止扩散到其他事件
5.7 启动/登录/权限启动、注册、OTP、隐私协议、权限页有调用;权限实际结果在 AcpListener.onGranted/onDenied 回调产生点击同意/拒绝为 permissions_auth_action_click;系统授权结果独立为 permissions_auth_result权限列表、授权/拒绝数量和永久拒绝状态可在回调计算;公共版本、渠道和结果字段不在事件特有属性中重复列出补登录接口结果和权限系统回调结果;不能把“点击同意”视为“已授权成功”
5.8 首页/个人中心/运营位MineFragment 有个人中心曝光和个人资料、优惠券、银行卡、贷款/还款历史、FAQ、设置、客服、信用报告、投诉反馈、银行转账等真实点击分支;当前仅少数分支已有埋点account_page_view 统一改为 mine_page_view;个人中心各入口使用 mine_*_click,目标页面使用 mine_*_page_view点击分支可确定入口和目标页;数量、状态类事件特有字段只在目标页接口已返回时传本期补齐个人中心全部真实入口和目标页面事件;旧 account_* 仅作代码迁移来源,不并行上报
5.9 补件/客诉/增信未发现 Android 原生补件、客诉、增信事件调用事件名适用于 H5,不能作为 Android 原生事件文件类型、投诉类型、材料数量和结果字段没有原生触发点Android 原生不纳入本场景覆盖
5.10 浏览器/性能监控仅定义为 wp_h5 场景,未发现 Android 原生对应调用事件名适用于浏览器/H5浏览器和 Web 性能字段不属于当前 Android 原生事件必传字段保持 H5 专属,不向 Android 公共事件扩展

5.11.2 Android 当前有调用场景的字段审查

Android 页面/事件组当前代码能确定的字段当前必传字段中不成立或缺失的字段本期落地要求
BvnBankAccountActivity / BankAccount页面进入/离开、当前是否勾选 BVN、银行对象、账号是否为空/长度、页面入参,以及 findBvnInfo 成功/失败回调旧事件只拼接银行名或账号;缺少独立页面事件和结构化结果事件新增 bvn_bank_account_page_view;通用控件复用 bank_account_*;在 onFindBvnInfoSuccess/onFindBvnInfoError 上报 bvn_bank_account_submit_result
BVNVerify / NINVerify / BVNandNINVerifyidentity_type、字段名称、聚焦/失焦/清除、切换目标、拨号类型、确认动作和接口回调当前确认事件把 inputVerficationCode 拼入事件名,且没有独立 BVN 结果事件确认点击只传填写状态;BVN 接口回调新增 kyc_bvn_submit_result,公共结果/错误字段由统一上下文注入
face_guide / face_reg引导页、识别页、活体通道、上传和识别成功/失败回调当前成功/失败散落在 AnalyticsTracker,上传耗时拼入事件名活体 SDK 回调上报 face_liveness_result;图片上传回调上报 face_upload_result;BNS 人脸接口回调上报 face_verify_result
Work_info页面展示/离开;月收入输入;就业、行业、职位、工作时间、发薪日、期望金额和用途选择;下一步点击当前字段事件混用 trackView/trackClick;提交时没有完成数、缺失数和未填写字段列表选择事件使用 apply_work_info_field_click,输入事件使用 apply_work_info_field_input;提交点击实时计算 completed_field_countmissing_field_countunfilled_fields
Person_Info页面展示/离开;教育、婚姻、子女、居住、语言、宗教等当前值;提交点击地址和详细地址被拼入事件名;完成数、缺失数、提交结果没有调用地址只传 address_completed;其余字段传枚举/区间;提交结果必须由接口回调触发
Emergency_Contact页面展示/离开;家庭/其他联系人关系、姓名/手机号输入、系统通讯录 Contact 点击和提交点击;提交前执行 PhoneUtils.ishasSimCard 校验当前动态事件名包含姓名、手机号和关系文本;系统 Contact 点击未单独上报;未检测到 SIM 卡时当前只有提示,没有结果事件新增 apply_emergency_contact_contact_click,只传 contact_role;关系选择与字段输入分开,提交只传完成数和缺失数;SIM 校验返回 false 时新增 apply_emergency_contact_submit_sim_error_result,公共结果/错误字段按第 4 章注入
startup / register / VerifyCode启动/注册/OTP 页面展示和离开;获取验证码、语音验证码展示/点击app_versionchannelotp_type 当前没有在调用参数中传入;手机号被拼入事件名;登录结果缺失版本和渠道由公共上下文注入;手机号只传填写状态/长度;OTP 事件传 otp_type;登录接口返回后新增 login_otp_submit_result
PrivacyPolicy / PermissionsAuth协议页面展示/离开、同意;权限页展示/离开、同意/拒绝;AcpListener 提供授权结果回调当前只记录用户点击,没有区分系统最终授权结果点击事件记录用户动作;onGranted/onDenied 上报 permissions_auth_result,传权限列表、授权/拒绝数量和永久拒绝状态
MainActivity / MineFragmentTab 分支和 MineFragment 全部可点击入口均可从 switch(v.getId()) 确定;目标页由 Intent/H5 URL 明确当前常量仍为 account_*,且只有贷款历史、还款历史已有点击埋点统一迁移到 mine_page_viewmine_*_clickmine_*_page_view;公共 content/source_page/target_page不在事件特有字段中重复定义
MainFragment / HomeMainPresenterqueryCustInfo 返回 custInfo.creditStagequeryCustLmtRespblcQueryLoanStageResp.stagequeryCustLoanInfo 返回 queryPreviousLoanResp.loanStatus 和还款计划;queryloanapplyauthority 返回 isCanloanApply当前首页没有结构化的三状态事件;Android 仅部分把 loanStage=20/22覆盖到页面状态,19未完整透传;可借资格接口失败时模型还可能返回空对象home_page_view 等待状态查询完成后,按 4.7.4 映射 borrow_eligibility_status/credit_status/loan_status;不能用 UI 展示状态或失败默认值替代后端结果

5.11.3 事件名和必传字段的统一判定标准

  1. 事件名必须描述当前调用的用户行为或页面状态,不能把手机号、证件号、账号、金额、选择值、验证码或耗时拼在事件名后。
  2. “必传字段”只有在该事件触发点能够从当前页面状态、真实接口响应或统一运行时上下文直接取得时才成立;仅靠后续接口才能取得的字段,必须放到结果事件,不得强加到点击事件。
  3. viewclickinputresult 必须按实际触发动作区分:按钮和选择项为 click,文本/数字输入状态为 input,接口、客户端校验或系统 SDK 回调结果为 result;不再使用混合类型或 submit 类型。
  4. 各事件表只定义事件特有属性。第 4 章公共字段由统一上下文按事件类型自动注入,禁止在事件特有属性中重复声明。
  5. Android 当前没有调用证据的 5.1、5.2、5.4、5.9、5.10 事件,不纳入 Android 原生完成率;5.3、5.5、5.6、5.7、5.8 按本节列出的当前覆盖与新增改造点分别验收。
  6. 当前 SensorsApiHelper/AnalyticsTracker 调用没有业务 properties;以上字段分析是结构化改造后的落地要求,不代表当前线上已经采集。结构化入口接通神策 SDK 后,才按本节验收字段完整性。

6. 全新上线要求

本期为全新上线,不考虑旧版本兼容,不要求新旧事件并行上报。

  1. 全部埋点按本需求的新事件名、新字段、新触发规则实现。
  2. 不新增 legacy_event_nameold_event_name 等兼容字段。
  3. 当前代码里已有的旧事件可作为实现参考,但不能作为验收口径。
  4. 数据验收只校验新事件是否到达、字段是否完整、值是否符合枚举。
  5. 上线前需要冻结一版埋点字典,研发、测试、数据看板均以该字典为准。

7. 技术改造要求

8. 验收标准

8.1 功能验收

标准
页面进入核心页面 100% 有 *_page_view
页面离开核心页面 100% 有 *_page_leave 或可靠替代
点击行为核心 CTA 100% 有 click 事件
结果行为所有提交类接口 100% 有 result
字段完整性公共字段完整率不低于 99%
敏感信息除 5.6 明确允许的 contact_namecontact_phone 外,event_name 和事件自定义属性中不出现明文敏感信息;5.6 明文字段仅出现在规定事件中
失败隔离埋点接口失败不影响业务
去重同一页面进入不重复上报,KeepAlive 场景需明确规则

8.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
BVN 漏斗kyc_bvn_page_view -> kyc_bvn_confirm_click -> kyc_bvn_submit_result
BVN 银行账户验证bvn_bank_account_page_view -> bank_account_submit_click -> bvn_bank_account_submit_result
活体/人脸漏斗face_capture_page_view -> face_liveness_result -> face_upload_result -> face_verify_result
授信资料提交apply_emergency_contact_submit_click -> apply_emergency_contact_submit_sim_error_result(未检测到 SIM 卡);通过 SIM 校验后再按实际接口结果进入 apply_profile_submit_result
登录漏斗login_page_view -> login_get_otp_click -> login_otp_submit_result
权限漏斗permissions_auth_page_view -> permissions_auth_action_click -> permissions_auth_result
个人中心mine_page_view -> mine_*_click -> mine_*_page_view,逐一核对当前有效入口

8.3 抽样验收

  1. 每个端至少抽 5 个真实用户会话。
  2. 每个核心场景至少覆盖成功、失败、取消/返回 3 类路径。
  3. 对比前端调试日志、大数据接收日志和分析报表,事件数差异不得超过 2%。

9. 优先级

P0

  1. 去除所有拼进 event_name 的敏感明文。
  2. 统一新增事件的公共字段。
  3. 为还款、绑卡、提现、KYC、登录补齐 page_view/click/result。
  4. 建立验收查询和开发调试能力。

P1

  1. cash_center 升级到 /dc/buriedPointBatch/v2
  2. H5 路由级 page_view/page_leave 统一。
  3. Android SensorsApiHelper 支持结构化字段。
  4. 补齐补件、客诉、增信、运营位字段。

P2

  1. 建立埋点字典和版本管理。
  2. 建立新事件的数据看板和口径说明。
  3. 性能和接口耗时统一埋点。

10. 交付物

  1. 埋点字典:事件名、页面、场景、字段、枚举、触发时机。
  2. 技术改造:H5 统一 SDK、Android 结构化事件、后端敏感字段校验。
  3. 验收用例:按场景覆盖成功/失败/取消路径。
  4. 数据看板:核心漏斗、失败原因、页面停留、渠道维度、版本维度。