无埋点采集逻辑和高级配置

访问数据

每次用户打开小程序的时候,发送一条访问事件的消息,对应的数据指标是打开次数。发送数据包含但不限于以下信息:进入页面、进入时间、场景值、来源小程序或 App、设备信息、微信应用信息、应用版本号。触发时机:onAppShow
每次用户关闭小程序的时候,关闭动作包括退出小程序回到微信、退出微信,会发送一条应用关闭消息,会根据这个消息来计算应用访问时长。发送数据包含但不限于以下信息:退出页面、退出时间。触发时机:onAppHide

页面数据

每次用户访问一个新的页面,发送一条页面浏览事件的消息,对应的数据意义是页面分析。发送数据包含但不限于以下信息:页面信息、打开时间、页面来源、页面标题、页面级变量。触发时机:onPageShow
每次当用户点击转发按钮时,会弹出转发框,这时会发送一条要转发事件的消息。这是一个自定义事件,数据包含以下信息:事件时间、所在页面、转发动作来源、转发页面标题和转发页面路径。注意这个事件不代表用户真正转发了消息到聊天里面,而是用户触发了转发动作。如果要跟踪成功转发消息事件,建议在 onShareAppMessage 的 success callback 里面发送一个自定义事件。触发时机:onShareAppMessage

行为数据

对于用户在页面发生的行为,如果这个行为有绑定事件比如 bindtap,并且在您的小程序里面进行处理,那么 GrowingIO 的小程序 SDK 会自动采集这些事件,发送一条行为事件的消息。目前,我们支持的事件有 tap、longpress、confirm 和 change 事件。

tap

tap 事件是手指触摸后马上离开时触发的事件。当 wxml 中的 view 绑定了 bindtap 事件以后,在事件处理函数执行的时候,SDK 会自动采集 tap 事件,发送数据包含但不限于以下信息:点击事件时间、事件发生所在页面、点击控件相关信息。

longpress

longpress 事件是手指触摸后,超过350ms再离开时触发的事件。当 wxml 的 view 绑定了 bindlongpress 事件以后,在事件处理函数执行的时候,SDK 会自动采集 longpress 事件,发送数据包含但不限于以下信息:点击事件时间、事件发生所在页面、点击控件相关信息。

change

change 事件是针对 checkbox、radio、picker-view 这些控件,当选择项发生改变时触发的事件。当 wxml 的 view 绑定了 bindchange 事件以后,在事件处理函数执行的时候,SDK 会自动采集 change 事件,发送数据包含但不限于以下信息:选择事件的发生时间、事件发生所在页面。

submit

当点击 form表单中 form-type 为 submit 的 button button 组件时,会将表单组件中的 value 值进行提交,SDK 会自动采集 submit 事件,发送数据包含但不限于以下信息:提交事件的发生时间、事件发生所在页面。

采集标记

1、采集标记

有时我们表单页面中可能需要获取用户选择框、单/多选框的值进行上报以准确分析用户行为。此时,我们可以通过数值采集标记 data-growing-track 来获取值。例:
<checkbox-group bindchange='checkboxChange' data-growing-track>
<label class='checkbox'>
<checkbox value='GrowingIO' checked='true' /> GrowingIO
</label>
<label class='checkbox'>
<checkbox value='CDP' checked='false' /> GrowingIO CDP
</label>
</checkbox-group>
免责声明警告:
请勿尝试在密码框上标记 data-growing-track 采集数据,会明文暴露用户填写的密码信息。GrowingIO不承担由此直接或间接产生的数据风险和法律风险。
提示
3.8.0版本开始,SDK会自动忽略带有 autoplay 属性且值为 true 组件的 change 事件(例如swiper、video)。如果您期望采集它,请添加 data-growing-track 标记。

2、补充数据标记

1)data-title

有时SDK自动采集的节点数据并不能完全满足上报分析需要。此时,我们可以通过额外信息的标记 data-title 来补充SDK采集的内容。例:
<button data-title="额外的上报信息">节点</button>

2)data-index

有时我们页面中可能存在类似列表类的Dom结构相似或一致使得SDK上报数据出现无法区分的情况。此时,我们可以通过索引标记 data-index 来准确描述节点信息。例:
<view>
<button data-index="1">节点1</button>
<button data-index="2">节点2</button>
<button data-index="3">节点3</button>
</view>

3)data-src

有时页面中有需要跳转的链接(尤其是navigator组件)时,为了上报完整的用户目标去向。此时,我们可以通过链接标记 data-src 来上报点击链接的目标去向。例:
<navigator
url="/pages/h5/h5?from=navigate"
data-src="/pages/h5/h5?from=navigate"
bindtap="onNavigatorTap"
>
<view > ... </view>
</navigator>
<view data-src="/pages/h5/h5?from=navigate" bindtap="onLinkTap">
模拟一个链接
</view>
注意: 在有上述3种额外采集标记的节点上,必须绑定一个点击事件,SDK才能实现点击的额外数据采集。如果没有,需要您手动绑定一个空的点击事件。

4)设置页面标题

默认情况下SDK会自动采集页面title,但当SDK可能无法识别或您使用了自定义标题时,可以通过在页面的onLoad生命周期中调用setNavigationBarTitle方法来设置原生页面标题并同时指定SDK上报事件时的title值。参考文档
示例:
Page({
onLoad: {
wx.setNavigationBarTitle({
title: 'NewTitle'
});
}
});
注:阿里(支付宝/淘宝)小程序是setNavigationBar 参考文档
注意:
1)指定title仅支持 String 格式。该功能适配SDK版本>=3.8.10支持。
2)想要设置页面标题并同时生效于SDK时,该方法必须在onLoad中调用;如果您业务中无法调整位置,则在不影响原逻辑的情况下无法生效于SDK。
3)部分框架可能会建议该方法调用时机为onReady(例如uni-app)或其他生命周期中,我们实际测试中在onLoad调用并无影响,因此您可放心在onLoad中使用。
4)在3.8.0-rc.9版本开始,我们提供了gioPageTitle字段供基础使用,但我们发现它无法覆盖大多数场景(例如需要动态修改时),因此我们废弃了它,高版本SDK仍会为您保持基础的向下兼容,请尽快修改为setNavigationBarTitle方式。
提示: SDK中事件title取值优先级为 setNavigationBarTitle > data.gioPageTitle(仅保持向下兼容,不保证能取到) > 页面config.json配置 > 全局app.json中tabBar配置

3、忽略采集标记

有时我们会根据业务中不同的需要使用一些自己开发的组件或第三方组件,可能会触发SDK的 chng 事件,但我们并不期望它发生。
此时,我们可以通过忽略采集标记 data-growing-ignore 来让SDK忽略对该组件的数据采集。
注意标记在事件绑定的节点上,没事件绑定的节点默认不会采集。例:
<view data-growing-ignore bindtap="onLinkTap">要忽略的节点</view>

半自动埋点浏览事件

用户标记一个元素并提供埋点事件,SDK 负责监控指定元素,当此元素出现在屏幕可视区域中时发送用户配置的埋点事件。因此您同样需要参考埋点事件在平台上进行事件类型和变量的预定义。

曝光逻辑

always:只要从屏幕不可见区域到可见区域即可计为一次曝光并上报。(默认值)
once:从屏幕不可见区域到可见区域曝光只上报一次。

支持范围

微信小程序、阿里(支付宝)小程序(基础库>=2.7.0)、百度小程序、字节跳动小程序、QQ小程序。
快应用不支持。

使用方法一:

1、在需要标记的元素上添加 growing_collect_imp 样式名。
2、在节点上添加 data-gio-imp-track 和 data-gio-track-xxxx进行设置参数。
示例
<view
class="growing_collect_imp"
data-gio-imp-track="imp_user_var"
data-gio-track-name="Mike"
data-gio-track-age="16"
data-gio-track-sex="boy"
>
监听的元素,必须有内容或额外样式来让节点有实际大小
</view>

使用方法二:

1、在需要标记的元素上添加 growing_collect_imp 样式名。
2、在节点上添加data-gio-imp-trackdata-gio-imp-attrs 属性。
data-gio-imp-attrs 允许接受一个Object或者JSON.stringify后的Object字符串,SDK会自动尝试进行格式化
示例
Page({
data: {
impAttrs: { name: 'Mike', age: '16', sex: 'boy' }
// 或者
impAttrs: JSON.stringify({ name: 'Mike', age: '16', sex: 'boy' })
}
})
<view
class="growing_collect_imp"
data-gio-imp-track="imp_user_var"
data-gio-imp-attrs="{{ impAttrs }}"
>
监听的元素,必须有内容或额外样式来让节点有实际大小
</view>
以上两种使用方法对应产生的 cstm 事件相当于: ↓↓↓
gio(
'track',
'imp_user_var',
{ name: 'Mike', age: '16', sex: 'boy' }
);

单次曝光

如果您的曝光事件只需要统计一次或触发过于频繁导致曝光事件量过大,可以在节点上添加data-gio-imp-type="once"并设置唯一的节点id,来使得曝光逻辑变为单次上报。
<view
class="growing_collect_imp"
id="imp_1"
data-gio-imp-type="once"
data-gio-imp-track="imp_picture_var"
...
>
监听的元素,必须有内容或额外样式来让节点有实际大小
</view>

手动更新半自动埋点监听

当您需要添加半自动埋点的节点是动态渲染时(例如根据接口数据渲染不同的内容),SDK 可能会因为无法感知节点渲染时机而失去对标记节点的监听。此时,您需要调用 updateImpression 手动更新 SDK 的监听来保证您的动态渲染节点能够被监听到。
示例
const { gio } = global;
Page({
data: {
impData: [],
},
onShow() {
// 这里通过一个Promise来模拟调用接口
const getData = new Promise((resolve) => {
setTimeout(() => {
resolve({ name: 'Lily', age: 18 });
}, 3000);
});
getData.then((result) => {
this.setData({ impData: result }, () => {
// 在setData回调中调用 updateImpression 即可
gio('updateImpression');
});
});
},
});
注意: 1)被标记的节点必须有实际的大小,一个没有内容和样式的节点标记可能不会触发事件。
2)请勿在同一页面中大量标记半自动埋点浏览事件(如商品列表),可能会严重影响页面性能导致卡顿。
3)data-gio-imp-type配置项SDK版本>=3.8.4支持。
4)updateImpression 方法SDK版本>=3.8.11支持。

其他

Object参数限制

SDK文档中指定参数值为 Object类型 时,请注意以下限制:(非指定类型值均会被替换为空字符串,长度超限均会被截断)
key: String,length <=50
value: String | number 时 length <=1000