1、接入准备
1-1、SDK
- 在接入文档SDK的位置可以下载相应的SDK,版本过低的话有数的测试小助手可能会打会
- 被打回.png
1-2、引用SDK初始化
// app.js
const sr = require('./ad/ad-sdk/sr-sdk-wxapp').init({
//腾讯有数:您在腾讯有数的token,以 bi 开头,【数据接入】-【接入工具】-【密钥管理】处获取token
token: '测试token'
//微信小程序appID,以 wx 开头
appid: '微信小程序appID',
/**
* 如果使用了小程序插件,需要设置为 true
*/
usePlugin: false,
/**
* 开启打印调试信息, 默认 false
*/
debug: true,
/**
* 建议开启-开启自动代理 Page, 默认 false
* sdk 负责上报页面的 browse 、leave、share 等事件
* 可以使用 sr.page 代替 Page(sr.page(options))
* 元素事件跟踪,需要配合 autoTrack: true
*/
proxyPage: true,
/**
* 建议开启-开启组件自动代理, 默认 false
* sdk 负责上报页面的 browse 、leave、share 等事件
*/
proxyComponent: true,
// 建议开启-是否开启页面分享链路自动跟踪
openSdkShareDepth: true,
// 建议开启-元素事件跟踪,自动上报元素事件,入tap、change、longpress、confirm
autoTrack: false,
//建议开启-自动化获取openId,授权过的小程序可自动化获取openId
openAutoTrackOpenId: true,
})
App({
sr,
onShow(options) {
this.setAdUserInfo()
},
async setAdUserInfo(){
var userId = getStorage('userId')? getStorage('userId') :"给一个默认userId"
var oepnId = getStorage('openId')? getStorage("openId") : await doGetOpenIdRequest()
if(!oepnId){
oepnId = '给一个默认openId'
}
sr.setUser({
open_id:oepnId+"",
app_id: wx.getAccountInfoSync().miniProgram.appId,
user_id: userId+""
})
sr.setChan({
chan_wxapp_scene: wx.getLaunchOptionsSync().scene,
chan_id: wx.getLaunchOptionsSync().referrerInfo.appId,
})
},
})
1-3、关于openId
- 在登录页获取到openId和userId,再进行一个有数基础信息的设置
Ad.setCommonProperty();
。Ad是引入的一个方法类,见2-1
2、使用
2-1、有数公共方法类ad-util.js
//广告管理类
//import sr from '../app.js'
const app = getApp()
const {
getStorage,
}= require("../utils/wxutil")
function Ad() {
}
/**
* 卡券领取
*/
Ad.getCoupon = function(option){
console.log("获取优惠券")
let body = {
coupon:option
}
app.sr.track('get_coupon',body)
}
/**
* 卡券触发
* @param {*} option
*/
Ad.exposeCoupon = function(opstion){
let body = {
coupon:opstion
}
console.log("body", body);
app.sr.track('trigger_coupon',body)
}
/**
* 优惠券核销
* @param {*} opstion
*/
Ad.consumeCoupon = function(opstion){
let body = {
action_type : opstion.action_type,
coupon:{
coupon_id:opstion.coupon_id+"",
coupon_name:opstion.coupon_name
}
}
app.sr.track('consume_coupon',body)
}
/**
* 页面分享
*/
Ad.pageShare = function(opstion){
let body = {
from_type:opstion.from_type,
share_title:opstion.share_title
}
app.sr.track('page_share_app_message', body)
}
/**
* 搜索事件
* @param {*} key
*/
Ad.search = function(key){
Ad.setCommonProperty()
app.sr.track('search', {
"keyword": key,
})
}
/**
* 设置基础信息
* @param {} param
*/
Ad.setCommonProperty = function () {
var userId = getStorage('userId')? getStorage('userId') :"默认userId"
var openId = getStorage('openId');
if(!openId ){
openId = '默认openId'
}
app.sr.setUser({
open_id: openId,
app_id: wx.getAccountInfoSync().miniProgram.appId,
user_id: userId+"",
})
app.sr.setChan({
chan_wxapp_scene: wx.getLaunchOptionsSync().scene,
chan_id: wx.getLaunchOptionsSync().referrerInfo.appId,
})
}
/**
* 客服咨询
* @param {}} option
*/
Ad.startConsult = function(){
Ad.setCommonProperty()
app.sr.track('start_consult',{
"action_type": "consult_online",
})
}
/**
*
* 商品浏览
* @param {*} option (以满足十条)
*/
Ad.browseGoodsDetailPage = function(option){
option = {
sku:{
sku_id: option.sku_id+"",
sku_name:option.sku_name+"",
},
spu:{
spu_id : option.spu_id+"",
spu_name : option.spu_name+"",
}
}
app.sr.track('browse_sku_page', option)
}
/**
*
* 商品曝光
* @param {*} option (以满足十条)
*/
Ad.exposeGoodsCard = function(option){
option = {
sku:{
sku_id: option.sku_id+"",
sku_name:option.sku_name,
},
spu:{
spu_id : option.spu_id+"",
spu_name : option.spu_name,
}
}
app.sr.track('expose_sku_component', option)
}
/**
*
* 商品卡触发
* @param {*} option (以满足十条)
*/
Ad.clickGoodsCard = function(option){
option = {
sku:{
sku_id: option.sku_id+"",
sku_name:option.sku_name,
},
spu:{
spu_id : option.spu_id+"",
spu_name : option.spu_name,
}
}
app.sr.track('trigger_sku_component', option)
}
/**
* 订单行为
* @param {*} option
*/
Ad.customOrder = function(option){
option = {
order: {
order_id: option.order_id,
order_time: option.order_time,
order_status: option.order_status,
},
sub_orders: [ {
sub_order_id: option.sub_order_id,
order_amt: option.order_amt,
pay_amt: option.pay_amt
}]
}
app.sr.track('custom_order', option)
}
module.exports = {
Ad: Ad,
}
2-2、行为接入
- 在有数的官方接入数据文档中,接入指引都较为详细
- image.png
- 在有相应行为时调用方法进行埋点(以支付为例)
const { Ad } = require("../../ad/ad-util.js")
this.customOrder(e.detail, "pay"); // 点击支付就要上报
this.customOrder(e.detail, "cancel_pay"); // 取消支付
this.customOrder(e.detail, "cancel_give_order"); // 取消订单成功
this.customOrder(e.detail, "payed"); // 支付成功
/**
* 有数埋点订单行为
* @param {*} e
* @param {*} order_status
*/
customOrder: function (e, order_status) {
let orderInfo = {
order_id: e.orderSn,
order_time: e.createTime,
order_status: order_status,
sub_order_id: e.orderSn,
order_amt: e.totalPrice,
pay_amt: e.realPrice,
};
Ad.customOrder(orderInfo);
},
/**
* 有数埋点 优惠券核销
* @param {*} action_type
*/
consumeCoupon:function(action_type){
if(this.data.selectCouponItem){
let { selectCouponItem:{ couponId, couponName } } = this.data
let opstion ={
coupon_id: couponId,
coupon_name: couponName,
action_type: action_type
}
Ad.consumeCoupon(opstion)
}
},
整个流程状态变更.png
- 商品卡浏览部分使用 IntersectionObserver 对象实例进行曝光上报
/**
* 商品卡曝光
*/
exposeGoodsCard(){
this._observer = this.createIntersectionObserver({
thresholds: [0.5],
observeAll: true
})
this._observer.relativeToViewport({ bottom: 0 })
.observe('.goods-card', (res) => {
var opstion = {
sku_id: res.dataset.item.skuId,
sku_name: `${res.dataset.item.goodsName}${res.dataset.item.skuName}`,
spu_id: res.dataset.item.goodsIdStr,
spu_name: res.dataset.item.goodsName,
}
Ad.exposeGoodsCard(opstion)
})
},
3、数据查看及有数测试报告回馈
3-1、数据查看
- 在第一测试阶段每个行为数据需达到十条才能送测
- 之后可以在有数数据管理平台看到相应的日志
- 数据页面.png
3-2、测试不通过打回报告
-
这个部分需要在TAPD中查看,不通过的话继续进行埋点修改
行为列表.png - 不通过原因.png
关于申请,送测等部分均是由产品进行。开发者进行数据接入,需要注意的是上报的数据应该前后端需要统一,协商好相应的数据上报
4、更新
- 有数更换了初始化配置,使用
autoProxy
进行总集成(替换proxyPage、proxyComponent、openSdkShareDepth)等等。并且通过授权可以自动获取openId和unionId。可将sr.setUser
的一系列操作去除。