# 接入

要使用产品体验分析,需先接入数据采集模块。

# 小程序项目

# 自动接入

在控制台新建项目时,勾选自动接入模式,开发平台将自动为相应小程序接入并启用数据采集。对于已存在的项目,可以进入项目,在“设置->采集配置->采集模式”选择自动采集模式。

注意:

  • 基础库版本 > 2.32.2,当用户退出小程序至后台超过 30 分钟,再回到小程序 (且场景值不为1089) 后,系统会自动结束上次采集,重新开启新的采集。在管理端将看到两条不同的回放。

# SDK 接入模式

# 安装与使用

  1. 安装:在小程序代码根目录下执行 npm install @wxobs/miniprogram-sdk
  2. 构建:在微信开发者工具中,点击左上角菜单栏中“工具” -> “构建npm”
  3. 使用:在 app.js 文件中引入 setup 函数,并在 onLaunch 中执行即可启动采集。

示例代码:

import wxobs from '@wxobs/miniprogram-sdk';

App({
  onLaunch: function () {
    wxobs.setup({
      maskMode: 'all-mask'
    })
  },
});

# API

# setup

配置并启动数据采集。 参数:

{
  maskMode?: 'all-mask' | 'no-mask' // 可选,默认值 'all-mask','all-mask'表示采集时默认遮罩所有元素,'no-mask'表示不遮罩。使用 'no-mask' 模式时,请注意遵守《个人隐私保护法》等法规,在用户同意的情况下采集隐私数据。
  isWhitelistMaskMode?: boolean // [已弃用] 可选,默认值 true。true 表示以白名单模式遮罩小程序中的元素,false表以黑名单模式遮罩小程序中的元素。不可和 maskMode 同时使用。
  attrs?: Record<string, string> // 对回放添加属性,在管理端可通过属性筛选回访
  captureDataAttrs?: boolean // 可选,默认为 true。采集 webview 中的元素时,是否采集以 data-* 为开头的属性
  shouldCapturePage?: (page: string, query: Record<string, string>) => boolean // 可选。用于控制是否采集某页面的回调,page 和 query 是该页面的属性,默认为全部采集。
}

返回:

Promise<{
  sessionId?: string // 该回放 Id,正常启动采集时不为空
  errMsg?: string // 启动异常时的错误消息
}>

# teardown

停止采集
参数:无
返回:

Promise<void>

# setAttrs

注意:下面的任何api都必须在setup返回的promise resolve之后再执行

# setAttrs

已废弃

# param
attrs: Record<string, string> // 属性的键值对

向当前回放添加键值对属性,回放端可通过该属性筛选回放。 0.3.0版本后废弃,推荐使用event, identify, 替代

# example
setAttrs({
  gender: 'male',
  age: '18',
})

# event

# param
function event(
  eventName: string, // 事件名
  eventProperties: Record<string, string| number>, // 事件属性
): boolean

触发一个自定义事件,管理端可以通过这个动作,找到对应回放、分析转化等...
eventName的长度需要小于50个字符,eventProperties的属性需要少于10个,每个属性的key需要少于50个字符,value需要少于255字符,若value为数字请自己保证不要超过js长度限制,请不要传入浮点数,否则可能出现不符合预期的行为。 函数的返回值为是否通过校验,若不通过则会返回false,反之true

# example

假设用户在你的小程序上发生了一次购买动作,可以通过如下代码触发一次自定义事件(购买)的上报

event(
  'buy_goods',
  {
    good_id: 'abcdefg123',
    order_id: 'xxxxxxx',
    price: 1024
  }
)

# identify

# param
function identify(
  uid: string,
  props: Record<string, string | number>,
): boolean

设定当前用户的id,属性,管理端可以通过这个用户的id、属性,找到对应回放、并依据人的维度进行转化分析等...
uid的长度需要小于80个字符,props的属性需要少于10个,每个属性的key需要少于50个字符,value需要少于255字符,若value为数字请自己保证不要超过js长度限制,请不要传入浮点数,否则可能出现不符合预期的行为。 函数的返回值为是否通过校验,若不通过则会返回false,反之true

在一次回放中,identify如被多次调用,只会取第一次调用的结果,如需更改props,可通过调用updateUserProperties实现。uid不可更改。当然我们也建议对于同一个用户不要更改uid,否则会导致同一用户的数据无法连贯

# example

假设有用户的openid

identify(
  openid,
  {
    vip_level:1
    age: 18,
    name: 'klaus'
  }
)

# updateUserProperties

# param
function updateUserProperties(
  props: Record<string, string | number>,
): boolean

更新用户的props...
props的属性需要少于10个,每个属性的key需要少于50个字符,value需要少于255字符,若value为数字请自己保证不要超过js长度限制,请不要传入浮点数,否则可能出现不符合预期的行为。 函数的返回值为是否通过校验,若不通过则会返回false,反之true

一条回放中,props会以最后一次的为准。如需要记录一个用户的属性变化,可以通过自定义属性触发

# example
updateUserProperties(
  {
    vip_level:2
  }
)

# 隐私

# 屏蔽

为保护用户隐私,采集模块屏蔽了以下数据:

  • 所有 input 事件
  • open-data
  • 小程序插件内容

此外,我们也向开发者提供自定义屏蔽元素的方法: 在元素上添加类"wxobs-exclude", 该元素将将不会被采集。例如:

<view class="wxobs-exclude">
	...
</view>

# 遮罩

采集模块提供了对图片、视频、文本内容的遮罩功能。对需要遮罩的图片和视频,采集模块会将原图片或视频替换成骨架图上报,文本则替换成星号。

开发者可根据需要,在 setup 时配置 isWhitelistMaskMode 来选择白名单遮罩模式或黑名单遮罩模式。

在白名单模式下,SDK 会默认遮罩所有的元素,开发者可以在元素上添加类 "wxobs-unmask" 来解除该元素及其子元素的遮罩。 如

<view class="wxobs-unmask">
	...
</view>

在黑名单模式下,所有元素默认不遮罩。开发者可以针对敏感元素,在元素上添加类 "wxobs-mask" 来遮罩该元素及其子元素。 如

<view class="wxobs-mask">
	...
</view>

# Web 项目

新建 Web 项目后,进入项目,选择“设置->采集配置”,即可看到接入代码,将接入代码写入到要接入 web 项目的 index.html 文件中即可。

以下是接入代码样例(注:样例代码不能直接使用,如需接入,请使用“设置->采集配置”中的接入代码)

<script>
(function () {
  'use strict';
  const SCRIPT_URL = 'https://dldir1.qq.com/WechatWebDev/devPlatform/px.min.js';
  const param = {
      maskMode: 'all-mask', // 隐私策略, all-mask 或 no-mask, 详见:https://www.npmjs.com/package/@wxobs/miniprogram-sdk#%E6%96%87%E6%A1%A3
      recordCanvas: false, // 若要采集canvas, 设为true
      projectId: xxxxx, // 项目 ID,需替换为体验分析项目 ID
      attrs: {}, // 对回放添加自定义属性,在管理端可通过属性筛选回放 (对象中 key 和 value 类型必须为 string)
  };
  const scriptEle = document.createElement('script');
  scriptEle.type = 'text/javascript';
  scriptEle.async = true;
  scriptEle.onload = function () {
      window.__startPX(param); // 启动采集,返回 Promise<{ sessionId: string }>
  };
  scriptEle.src = SCRIPT_URL;
  document.getElementsByTagName('script')[0].parentNode.appendChild(scriptEle);

})();
</script>

停止采集:

window.___wxobs___.teardown()

设置自定义属性

window.___wxobs___.setAttrs({
    a: 1,
    b: 2
})

# 联合采集

如果要在小程序中采集 web-view 中的内容,需使用联合采集功能。 使用方式:

  1. 创建小程序项目 A 和 web 项目 B
  2. 在小程序内 h5 中,启动 web 端采集 (B 项目)
  3. 在小程序(基础库版本>=2.29.1)中,使用 sdk(>=0.1.4) 方式采集(A 项目),调用 setup 函数时, 函数将返回一个类型为 string 的 uuid
  4. 在使用 web-view 组件时,将步骤 3 中的 uuid 作为 url query 填入到 src 中,例如:
<web-view src="https://www.qq.com?wxobsId={{id}}"></web-view>
  1. 在管理端的小程序项目(项目 A)中,进入【设置-联合录制】配置子项目,将子项目配置为 B 项目