帮助中心 > 技术文档 > 客户端SDK > Web Js SDK > SDK接入

Web JS SDK 接入流程主要分为两个步骤(两个文档)

1、SDK配置:将对应的SDK集成到您的产品项目中,然后进行初始化代码处理;
2、SDK接入:将需要埋点的数据,按照SDK包装不同的方法进行数据上送,其中功能主要包含两大类:全埋点(自动采集数据上送)、自定义埋点(手动设置业务数据上送)。


1. 参数

属性 类型 默认值 版本 说明
serverUrl string 必填,数据接收地址
autoTrackConfig object 全埋点,配置项
showLog boolean false 是否在浏览器控制台打印上报的数据
sendType ajax image beacon ajax 数据上报方式,详情见下文6.1.
batchSend boolean object false 是否批量发送数据,详情见下文6.2.
dataSendTimeout number 3000 数据发送超时时间:设定时间内未完成发送将强制取消请求,单位毫秒
siteLinkerConfig object 4.0.0起支持 多域名打通,详情见插件集成2.2.
abTestingPluginConfig object 4.0.0起支持 ab测试,详情见插件集成2.3.
stayAutoTrackConfig object 视区停留事件(H_WebStay),详情见全埋点6
maxStringLength number 1024 3.1.8起支持 上报数据单个字段长度,默认 1024 字符,上限5120
isSinglePage boolean false 4.0.0起废弃 单页面的配置项,若页面中有锚点设计,需要将该配置删除,否则触发锚点会多触发 H_pageview 事件,详情见全埋点7
appJsBridge boolean false 在嵌入 App 中的 H5 页面中,数据上报的选择如下:
前提条件:H5 页面接入 Web JS SDK,App 接入 Android SDK 或 iOS SDK。
false:表示使用 H5 端上报数据,即数据由 H5 页面直接发送。
true:表示使用 App 端上报数据,即 H5 页面数据通过 App 进行发送。
presetProperties object 是否采集最近一次相关的数据,默认全部开启,详情见下文7.5.
sourceChannel array 4.0.0起支持 自定义渠道来源属性,详情见下文7.6.
performanceErrorConfig object 性能监控配置项
plugins array 4.0.0起支持 插件系统,v4版本开始支持用户自定义插件,具体插件开发规范参考插件系统
globalCallback function null 上报数据后会触发

2. 用户关联

2.1. 介绍

在使用常用功能之前,建议你先了解用户识别规则:
关联标记用户时,用户ID取值有两种:一种是设备ID(随机算法生成)、一种是登录ID(由用户自主设置的ID,如手机号、id、邮箱)。
SDK默认使设备ID,并持久化存储在本地;用户未登录之前,会以设备ID作为用户的唯一标识。
注意:设备 ID 在本地缓存清理时会改变。

2.2. 基本API

2.2.1. 用户登录关联

用户注册成功或登录成功时,您需要调用 SDK 的setUserUId方法,一般为用户在您业务系统中的唯一身份标识(如手机号、id),多次调用 setUserUId 将会覆盖先前的值,代码示例:

//  此数据对应上报数据里的 accountId
hina.setUserUId('您平台用户的唯一标识');

为了准确记录登录用户的行为信息,建议在以下时机各调用一次用户登录方法setUserUId

  • 用户在注册成功时
  • 用户登录成功时
  • 已登录用户每次打开网站时

2.2.2. 获取设备唯一ID

在初始化SDK完成后执行才能使用,代码示例:

hina.getDeviceUId()

2.2.3. 自定义设备唯一ID

默认情况下,SDK 会生成设备唯一ID 并可以保证该ID的唯一性,如需替换,代码示例:

// 初始化时配置
hina.setDeviceUId('自定义ID')

3. 用户属性

用户属性,可以理解为用户的“标签”或“特征”,它描述了用户的某些固有信息或状态,这些信息通常不会频繁变动,例如性别、手机号、年龄。

3.1. 设置用户属性

设置用户属性的值,如果值存在则覆盖,如城市,代码示例:

hina.userSet({ city: 'Shanghai' });

3.2. 固定初始值的属性

设置用户仅在首次有效的属性。这些属性在用户生命周期内只会被设置一次,即使后续再次设置,也不会覆盖原有的值,如用户首次注册时间,代码示例:

hina.userSetOnce({
  first_register_time: new Date().toISOString()
});

3.3. 数值类型的属性

对数值类型的用户属性做递增或递减,如购买数量、账户余额、访问次数等,代码示例:

// 购买数量,表示递增2(若前值为4,执行后的值为6)
hina.userAdd({ 'purchase_count': 2 })

// 账户余额,表示递减100(若前值为300,执行后的值为200)
hina.userAdd({ 'account_balance': -100 })

// 用户访问次数,表示递增1次(若前值为10,执行后的值为11)
hina.userAdd('visit_count')

3.4. 集合类型的属性

4.0.0及以上版本支持,为数组类型的用户属性添加值,如收藏ID集合,代码示例:

// 增加2个值
hina.userAppend({ 'favorite': ['id1','id2'] })

// 增加1个值
hina.userAppend({ 'favorite': 'id1' })

3.5. 属性取消

重置某些用户属性的值,代码示例:

// 参数为字符串
hina.userUnset('name') // 字符串类型的值重置为:''
hina.userUnset('age') // 数值类型的值重置为:0
hina.userUnset('is_login') // 布尔类型的值重置为:''

// 也可以把上面的参数整合为一个数组,效果一致
hina.userUnset(['name','age','is_login'])

4. 发送事件

在 SDK 初始化完成之后,您就可以进行数据埋点,收集用户的的行为信息。

4.1. 自定义埋点

准备工作:在嗨数云平台创建元事件,如事件名:novel_read_btn_click,属性名:novel_id、novel_chapter。
使用track()方法进行直接埋点,埋点事件支持添加自定义属性。

// 不含自定义属性,比如:点击“开始阅读”按钮;
hina.track("novel_read_btn_click");

// 添加自定义属性,如:点击“开始阅读”按钮,添加属性:小说id、小说的章节
hina.track( 'novel_read_btn_click ', // 事件名称
  { novel_id: "1234567890", novel_chapter : 3 }  // 事件属性
);

5. 事件属性

在进行埋点事件追踪时,您可以根据需求对埋点事件进行属性的定义。 SDK 中提供了公共属性用于给每个埋点事件添加属性。

5.1. 设置事件公共属性

对于所有事件都需要添加的属性,可在初始化 SDK 后,调用 registerCommonProperties将属性注册为公共事件属性,如设置用户等级为公共事件属性,代码示例:

hina.registerCommonProperties({
    role: '黄金会员'
})

当设置动态公共属性的时候,需要使用函数类型作为属性值,函数返回值只能是stringboolnumberdatearray类型,代码示例:

hina.registerCommonProperties({
  afterTwoHour: function(){
    return new Date().addHours(2)
  }
})

5.2. 获取预置属性

获取预置属性,如:页面地址,页面标题,前向地址,SDK 类型及版本,屏幕宽高,最近一次的相关属性等,代码示例:

hina.quick('isReady',function(){
  const presetProperties = hina.getPresetProperties();
})

6. 上报数据方式

SDK上报数据的方式分为实时发送和批量发送:

  • 实时发送:事件触发之后会立即上报一条最新数据到海纳分析平台,常见的数据发送有image、ajax、beacon发送。
  • 批量发送: 触发事件后会先保存起来再批量定时发送到海纳分析平台。

6.1. 实时发送数据

常见的实时发送数据方式有 img 发送、ajax 发送和 beacon 发送:

  • ajax 发送:默认,采用 post 形式发送数据,数据较为安全,且发送数据的大小基本不受限制。
  • img 发送:使用 img 发送数据,对于跨域的兼容比较好,发送的形式就是创建一个 img 元素,src 带上所有要发送的数据。
  • beacon发送:beacon是浏览器的最新发送策略,采用post形式发送数据,可以避免页面关闭时数据发送丢失的问题,但不兼容老版本浏览器。
    代码示例:
hina.init({
  // img发送
  sendType: 'image'// ajax发送
  sendType: 'ajax'// beacon发送
  sendType: 'beacon'// 其他属性...
})

6.2. 批量发送数据

触发事件之后会将数据写入localStorage中,如果浏览器不支持 localStorage存储,请使用实时发送数据的方式。
数据发送请求必须成功后,才会删除数据,否则会一直请求直到存储最大条数。代码示例:

hina.init({
  // 关闭批量发送
  batchSend: false,
  // 开启批量发送
  batchSend: true,
  // 开启批量发送
  batchSend:{
    dataSendTimeout: 6000, // 单次请求超时多少毫秒则自动取消,以防请求无响应,默认6000毫秒
    sendInterval: 6000, // 间隔多少毫秒发一次数据,默认6000毫秒
    storageLimit: 200, // 存储 localStorage 条数最大值,默认200条
  },
  // 其他属性...
})

注意:

  1. 批量发送功能和回调函数功能不可以同时使用,比如track加了callback,使用批量发送后callback不会执行。
  2. 批量发送默认使用 ajax 的方式发送数据,如果不支持跨域ajax发送数据,会使用img且实时发送数据。
  3. 如果localStorage 里已经存了超过 200 条数据,会导致批量发送功能失效,localStorage 中只保存这 200 条数据,新产生的数据使用 img 且实时发送数据的方式。当进入同域名的新页面时,会自动检查缓存中是否有数据,如果有会继续发送缓存的数据。
  4. useAppBridge和batch_send只能选择一个,开启了打通App就不能再用批量发送。

7. 渠道追踪和广告

准备工作:手动开启Web浏览页面事件(H_pageview),配置{pageviewAutoTrack:’singlePage’}。
渠道追踪是记录用户访问您网站的来源,帮助分析用户通过哪些途径(如搜索引擎、社交媒体、电子邮件等)进入,从而优化营销效果。

7.1. 首次渠道属性

新用户首次访问网站时,SDK会收集该用户的渠道来源属性,并为这些属性设置以’H_first_’为前缀的名称。每位用户的此类数据仅采集一次,相关文档
举例:您在百度推广电商网站时,新用户通过搜索关键字进入网站,SDK内部自动采集以下数据,源码示例:

hina.userSetOnce({
  "H_first_referrer": "https://www.baidu.com?...", // 首次前向地址
  "H_first_referrer_host": "www.baidu.com",        // 首次前向域名
  "H_first_traffic_source_type": "付费广告流量",     // 首次流量来源类型
  "H_first_search_keyword": "拍照手机",             // 首次搜索引擎关键词
});

7.2. 广告系列参数(utm_开头)

UTM参数 (全称Urchin Traffic Monitor,流量监控器)是一组附加在 URL 后的标签,用于追踪流量来源,SDK默认采集以下5个UTM参数:

渠道信息 字段 说明
广告来源 utm_source 流量来源的网站,例如搜索引擎(如百度、谷歌)、社交媒体(如微信、微博)、直接输入网址等
广告媒介 utm_medium 营销渠道,例如付费广告、邮件推广、自然流量等
广告字词 utm_term 关键词
广告内容 utm_content 用于区分不同的广告或链接
广告名称 utm_campaign 特定的营销活动名称,例如“618大促”、“双11大促”等

举例:您经营一个电商网站,在百度投放手机广告,设置广告链接为:https://www.myshop.com/phone?utm_source=baidu&utm_medium=cpc&utm_term=手机&utm_content=image&utm_campaign=双11大促,那么UTM信息如下:

广告来源 广告媒介 广告字词 广告内容 广告名称
百度 cpc,即按点击付费广告 手机 image,即图片类型的广告 双11大促

7.3. 首次广告系列参数(H_utm_开头)

接着上述案例。若新用户通过百度访问手机广告的链接,SDK采集以下数据(属性详情),属性名以H_utm_为前缀,打印日志:

{
  "properties": {      
    "H_utm_source": "baidu",     // 首次广告来源
    "H_utm_medium": "cpc",       // 首次广告媒介
    "H_utm_term": "手机",         // 首次广告字词
    "H_utm_content": "image",    // 首次广告内容
    "H_utm_campaign": "双11大促", // 首次广告名称

    "H_latest_utm_source": "baidu",    // 最近一次广告来源
    "H_latest_utm_medium": "cpc",      // 最近一次广告媒介
    "H_latest_utm_term": "手机",        // 最近一次广告字词
    "H_latest_utm_content": "image",    // 最近一次广告内容
    "H_latest_utm_campaign": "双11大促", // 最近一次广告名称
    // 其他属性...
  },
  // 其他属性...
}

7.4. 最近一次广告系列参数(H_latest_utm_开头)

接着上述案例。后来,您又在微博投放空调广告,设置广告链接为:https://www.myshop.com/air?utm_source=weibo&utm_medium=banner&utm_term=空调&utm_content=video&utm_campaign=618大促,当老用户通过微博访问您的网站时,SDK采集以下数据,属性名以H_latest_为前缀,打印日志:

{
  "properties": {      
    "H_utm_source": "baidu",     // 首次广告来源
    "H_utm_medium": "cpc",       // 首次广告媒介
    "H_utm_term": "手机",         // 首次广告字词
    "H_utm_content": "image",    // 首次广告内容
    "H_utm_campaign": "双11大促", // 首次广告名称

    "H_latest_utm_source": "weibo",   // 最近一次广告来源
    "H_latest_utm_medium": "banner",  // 最近一次广告媒介
    "H_latest_utm_term": "空调",       // 最近一次广告字词
    "H_latest_utm_content": "video",   // 最近一次广告内容
    "H_latest_utm_campaign": "618大促", // 最近一次广告名称
    // 其他属性...
  },
  // 其他属性...
}

7.5. 最近一次相关的属性

您可以设置是否采集最近一次相关的属性(如utm、前向地址等),SDK会把数据存储在浏览器的 Cookie 中(用于你的其他网址共享数据),Cookie名称为hinasdk_crossdata,如果对 Cookie 存储大小有要求,可选择性的开启下列属性:

属性 类型 默认值 说明
latest_utm boolean true 是否采集最近一次URL中以utm开头的数据,若开启,则上报:H_latest_utm_source
H_latest_utm_medium
H_latest_utm_term
H_latest_utm_content
H_latest_utm_campaign
latest_traffic_source_type boolean true 是否采集最近一次流量来源类型,属性名:H_latest_traffic_source_type,详细说明
latest_search_keyword boolean true 是否采集最近一次搜索引擎关键字,属性名:H_latest_search_keyword
latest_referrer boolean true 是否采集最近一次前向地址,属性名:H_latest_referrer

配置项如下:

hina.init({
  presetProperties: {
    latest_utm: true,
    latest_traffic_source_type:true,
    latest_search_keyword:true,
    latest_referrer:true,
  }
  // 其他属性...
})

接着上述案例,打印cookie数据:

{
  "props": {
    "H_utm_source": "baidu",     // 首次广告来源
    "H_utm_medium": "cpc",       // 首次广告媒介
    "H_utm_term": "手机",         // 首次广告字词
    "H_utm_content": "image",    // 首次广告内容
    "H_utm_campaign": "双11大促", // 首次广告名称

    "H_latest_utm_source": "weibo",              // 最近一次广告来源
    "H_latest_utm_medium": "banner",             // 最近一次广告媒介
    "H_latest_utm_term": "空调",                  // 最近一次广告字词
    "H_latest_utm_content": "video",             // 最近一次广告内容
    "H_latest_utm_campaign": "618大促",           // 最近一次广告名称
    "H_latest_traffic_source_type": "付费广告流量", // 最近一次流量来源类型
    "H_latest_search_keyword": "新款空调",         // 最近一次搜索引擎关键字
    "H_latest_referrer": "https://weibo.com",     // 最近一次前向地址
    // 其他属性...
    },
    // 其他属性...
}

7.6. 自定义渠道属性(非UTM参数)

如果您想采集URL中的其他数据(不包括utm_source、utm_medium、utm_term、utm_content、utm_campaign),例如采集URL中的字段bd_vid和abc,广告地址为:https://www.myshop.com/phone?utm_source=baidu&utm_medium=cpc&utm_term=手机&utm_content=image&utm_campaign=双11大促&bd_vid=1234567890&abc=888,代码示例:

hina.init({
  sourceChannel:['bd_vid','abc']
  // 其他属性...
})

SDK会提取URL中的bd_vidabc字段信息,并将这些信息上报,打印日志:

{
  "properties": {
    "bd_vid": "1234567890",
    "abc": "888",
    // 其他属性...
  },
  // 其他属性...
}
作者:邓昊  创建时间:2023-02-21 10:02
最后编辑:张永健  更新时间:2024-12-03 14:41