什么是ACDL
ACDL全称是Adobe Client Data Layer,叫数据驱动数据层,它可以在页面主动发送数据。
是Adobe在2020推出,它的目标是通过提供一种标准化方法来公开和访问任何脚本的任何类型数据,从而减少对网站进行测试的工作量。
Adobe数据层和ACDL的对比
左边的是Adobe数据层,它是页面上静态的数据,所以是“=”。
右边的是ACDL,它是主动主动推送数据,可以看到它有个push的字段。
ACDL和GTM的数据层对比
ACDL与GTM的DataLayer非常类似,如发送的调用的函数,里面的数据结构都高度相似,但ACDL的会更强,它支持数据嵌套、json格式的数据。
ACDL的一般用法
ACDL目前是一个Extensions,你先需要在Extension安装它,一般的ACDL的用法如下:
adobeDataLayer.push({"event":"myEvent",
"data":{"foo":"bar",
"key":"value"}})
event是触发条件,data里面就是发送的数据。
先来看一下如何在data element里拿到data里的数据,也就是foo和key。
创建一个数据元素,命名为AB,然后做如下设置:
这个是ACDL内置的传入数据的方法,data.foo就拿到bar,如果是data.key,就拿到的value。(这种方式有时候会拿不到数据)然后这个data element就可以被Rules或Extensions引用。
接下来看一下怎么发送数据,新建一个Rules,命名为ACDL。
在Rules新建event,做如下设置:
这个设置的意思是,当myEvent触发的的时候才执行,也就是接收到ACDL的数据。
接下来就是配置Action,可以将data element拿到的数据设置成eVars或props发送给Adobe analytics。
ACDL与AEM的用法
AEM里面已经集成有ACDL的,可以开启使用。
以https://wknd.site/content/wknd/us/en.html为例,这个站点是AEM建立的,且开启了ACDL,可以在代码查看中通过关键字“ adobeDataLayer.push”找到ACDL的数据:
它发送的数据就有json数据,而且格式还比较特别,可以在浏览器控制台下看看它具体的数据结构:
发送的数据page里面签到一个page-2eee4f8914,这个动态的页面id,而且里面还有一个特别的数据结构,里面有很多的数据。
像这种情况就不能像一般的ACDL那么处理的,这类情况需要用自定义js去监听event,然后重构数据层里面的信息,提取page-2eee4f8914里面的数据从重新发送,使得能够被Adobe Launch获取和使用。
新建一个Rules,命名为Page Load。
Event选择Custom Code,然后将下面的代码监听event的代码黏贴进入:
var pageShownEventHandler = function(evt) {
// defensive coding to avoid a null pointer exception
if(evt.hasOwnProperty("eventInfo") && evt.eventInfo.hasOwnProperty("path")) {
//trigger Launch Rule and pass event
console.debug("cmp:show event: " + evt.eventInfo.path);
var event = {
//include the path of the component that triggered the event
path: evt.eventInfo.path,
//get the state of the component that triggered the event
component: window.adobeDataLayer.getState(evt.eventInfo.path)
};
//Trigger the Launch Rule, passing in the new `event` object
// the `event` obj can now be referenced by the reserved name `event` by other Launch data elements
// i.e `event.component['someKey']`
trigger(event);
}
}
//set the namespace to avoid a potential race condition
window.adobeDataLayer = window.adobeDataLayer || [];
//push the event listener for cmp:show into the data layer
window.adobeDataLayer.push(function (dl) {
//add event listener for `cmp:show` and callback to the `pageShownEventHandler` function
dl.addEventListener("cmp:show", pageShownEventHandler);
});
效果如下:
在配置发送数据之前,我们还可以通过data element去获取page-2eee4f8914里面的具体的数据,假设现在想获取@type这个信息:
那么可以新建一个data element,命名为AA,选择Custom Code,然后将以下代码黏贴进去:
if(event && event.component && event.component.hasOwnProperty('@type')) {
return event.component['@type'];
}
这段代码的作用就是监听Rule里面的自定义代码触发的事件,然后返回具体的值。
设置后可以在浏览器控制台测试,看是否拿到信息:
已经拿到@type的值,同理可以拿到其他的值到data element。
然后将这些值设置成eVars或props发送给Adobe Analytics。
ACDL的优点
ACDL是主动发送数据,可以有效避免原有的Adobe数据层,由于页面刷新导致的数据重发,数据更准确。
另外ACDL可以和XDM的一些组件结合,实施AEP会更方便。