# 来源类型
# 商家自己生成引流渠道 chan_id
有数中的引流渠道分为功能、活动、导购、地推、物料、触达、广告、公众号图文、直播 9 大类。
chan_id
的来源有两种:
- 来源一:从跳转链接中获得参数;
- 来源二:从小程序码/二维码中获得参数。
如果小程序码/二维码是通过 getUnlimited 接口生成的,那么开发者需要通过 decodeURIComponent 来获取二维码中的 scene 值。
# 第三方服务生成引流渠道 chan_id
# 智慧零售入口
当用户从逛一逛跳转至商家小程序时,链接中会自动带上逛一逛专属渠道参数chan_id
,例:pages/productDetail/productDetail?chan_id=8_ac3e76c2e5721f5f&productId=561440
,其中的8_ac3e76c2e5721f5f
是智慧零售入口专属渠道参数,包含逛一逛渠道信息。
chan_refer_app_id
:对于智慧零售来说,该字段总是wx9d4f5f62ea059f08
。
示例
"chan": {
"chan_id": "8_ac3e76c2e5721f5f",
"chan_refer_app_id": "wx9d4f5f62ea059f08",
"chan_wxapp_scene": 1037
}
# 上报方式
# 在 App.onShow
里收集
- 总是在
App.onShow
里采集渠道数据,具体采集方法见下表 - 每次触发
App.onShow
时候,若新的渠道数据非空,则应该覆盖旧的渠道数据
渠道参数 | 类型 | 收集方法 |
---|---|---|
chan_id | string | 自定义渠道的收集方法较复杂,详见下节 |
chan_wxapp_scene | int | 就是小程序场景值 (opens new window),可从 options.scene 获取 |
chan_refer_app_id | string | 来源公众号或小程序appID,可从 options.referrerInfo.appId 获取 |
应该在 onShow 函数内收集而不是 onLaunch,因为在小程序周期内用户可能多次进出小程序触发 onShow,用户每次重新进入小程序都可能改变当前会话的渠道信息。 而 onLaunch 在整个小程序生命周期内只触发一次。
# 收集方法
chan_id
可在多种场景进行标记,下面介绍各个情况下的标记及收集方法。
# 1. 通过接口A (opens new window)生成小程序码
使用接口 A 生成小程序码时需要将 chan_id=<渠道值>
作为 URL 查询参数填入 path
。
例如:为了统计 chan_id=shop1357
的门店的流量情况,且扫描小程序码时打开页面/home/index
调用接口 A 生成小程序码时,path
填入 /home/index?chan_id=shop1356
。
收集方法
App({
onShow({ query }) {
let chan_id = query.chan_id
console.log(`chan_id: ${chan_id}`)
}
})
# 2. 通过接口B (opens new window)生成小程序码
使用接口 B 生成小程序码时需要将 chan_id=<渠道值>
作为 scene
的一部分填入。
例如:为了统计chan_id=shop1357
的门店的流量情况,且扫描小程序码时打开页面/home/index
调用接口 B 生成小程序码时,path
填入 /home/index
,scene
填入 chan_id=shop1357
。
收集方法
App({
onShow({ query }) {
const scene = decodeURIComponent(query.scene)
let match = scene.split('&').map(m => m.match(/^chan_id=(.*)$/)).find(m => !!m)
if (match) {
console.log(`chan_id=${match[1]}`)
} else {
console.log('do not find chan_id')
}
}
})
# 3. 通过接口C (opens new window)生成二维码
使用接口C生成二维码时需要将 chan_id =<渠道值> 作为 URL 查询参数填入 path。
收集方法同接口A一致,不再赘述。
# 4. 通过 wx.navigateToMiniProgram (opens new window) 跳转小程序
当其他小程序通过 wx.navigateToMiniProgram 跳转过来时,chan_id
可能会以查询参数的形式附加在 path
参数上。
收集方法同接口 A 一致,不再赘述。
# 5. 统一收集
用一段代码同时兼容以上 4 种情况:
App({
_getChanID(query) {
let chan_id = query.chan_id
if (chan_id) { return chan_id }
let sceneInQuery = decodeURIComponent(query.scene)
let match = sceneInQuery.split('&').map(m => m.match(/^chan_id=(.*)$/)).find(m => !!m)
if (match) { return match[1] }
},
onShow({ query }) {
let chan_id = this._getChanID(query)
console.log(`chan_id=${chan_id}`)
}
})