Airbridge Web SDK 不仅能追踪 Web-to-app 转化数据,还能追踪 Web 应用本身的归因数据。这能让您更全面地了解链路,尤其是当您的应用同时在 Web 和 App 上运行时。从 Web SDK 收集到的数据将汇总并显示在 Airbridge 面板上,并在该面板上提供对 Web 和 App 的综合分析。原始数据还能够以 CSV 格式导出,方便您使用。
请使用以下 3 个选项之一来安装 SDK。
在 head
元素末尾添加以下代码。
<script>
(function(a_,i_,r_,_b,_r,_i,_d,_g,_e){if(!a_[_b]){var n=function(){var c=i_.createElement(r_);c.onerror=function(){g.queue.filter(function(a){return 0<=_d.indexOf(a[0])}).forEach(function(a){a=a[1];a=a[a.length-1];"function"===typeof a&&a("error occur when load airbridge")})};c.async=1;c.src=_r;"complete"===i_.readyState?i_.head.appendChild(c):a_.addEventListener("load",function h(){a_.removeEventListener("load",h);i_.head.appendChild(c)})},g={queue:[],get isSDKEnabled(){return!1}};_i.concat(_d).forEach(function(c){var a=c.split("."),h=a.pop();a.reduce(function(p,q){return p[q]=p[q]||{}},g)[h]=function(){g.queue.push([c,arguments])}});a_[_b]=g;0<_g?(_b=new (a_.XDomainRequest||a_.XMLHttpRequest),_i=function(){},_b.open("GET",_r),_b.timeout=_g,_b.onload=function(){n()},_b.onerror=_i,_b.onprogress=_i,_b.ontimeout=_i,_b.send()):n()}})(window,document,"script","airbridge","//static.airbridge.io/sdk/latest/airbridge.min.js","init startTracking stopTracking fetchResource openBanner setBanner setDownload setDownloads openDeeplink setDeeplinks sendWeb setUserAgent setMobileAppData setUserID clearUserID setUserEmail clearUserEmail setUserPhone clearUserPhone setUserAttribute removeUserAttribute clearUserAttributes setUserAlias removeUserAlias clearUserAlias clearUser setUserId setUserAttributes addUserAlias setDeviceAlias removeDeviceAlias clearDeviceAlias setDeviceIFV setDeviceIFA setDeviceGAID events.send events.signIn events.signUp events.signOut events.purchased events.addedToCart events.productDetailsViewEvent events.homeViewEvent events.productListViewEvent events.searchResultViewEvent".split(" "),["events.wait","createTouchpoint"],0);
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
})
</script>
APP NAME
和 WEB SDK TOKEN
可在 Airbridge 面板 [设置]>[Token] 中找到。
在监测 Web-to-app 的绩效时,建议配置受保护的归因窗口。有关更多信息,请参阅 本指南。
安装 Airbridge NPM 模块。
npm install airbridge-web-sdk-loader
导入 airbridge
并调用 airbridge.init
函数。
import airbridge from 'airbridge-web-sdk-loader'
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
})
请参阅 使用 Google Tag Manager 安装 SDK。
Airbridge Web SDK 适用于所有支持 ES5 的浏览器。
Chrome | Firefox | Safari | Internet Explorer |
---|---|---|---|
✔️ | ✔️ | ✔️ | IE 9 及以上版本 |
button.onclick = () => {
console.log(airbridge.isSDKEnabled)
}
前往已安装 Airbridge SDK 的网页,在开发者工具控制台中查看 airbridge.isSDKEnabled
是否为 true
。
如果正确输出了结果,前往 Airbridge 面板 [原始数据]>[Web 实时记录] 确认是否显示“Open”事件。
注意
当 Web SDK 加载完毕,
airbridge.isSDKEnabled
的值将从false
变为true
。
SDK 初始化时会自动发送用户信息。用户信息将存储在浏览器的本地存储中,并且网站上的所有后续事件都将连同用户信息一起发送,直到 signOut
被调用。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
user: {
externalUserID: 'personID',
externalUserEmail: 'persondoe@airbridge.io',
externalUserPhone: '1(123)123-1234',
attributes: {
age_group: 30,
gender: 'Female'
},
alias: {
custom_id: '83587901-2726-4E29-ACEB-A90B0F7E75F6',
},
},
})
属性 | 类型 | 说明 |
---|---|---|
| String | 用户 ID |
| String | 用户邮箱 |
| String | 用户电话号码 |
| Object | 自定义用户属性 (自定义键值对) |
| Object | 用户别名 |
使用以下方法设置自己的,而非外部的,用户标识符。用户标识符将存储在浏览器的本地存储中,并且网站上的所有后续事件都将连同用户信息一起发送,直到 signOut
被调用。
airbridge.setUserID('654321')
airbridge.setUserEmail('user@example.com')
您还可以设置用户别名,有助于与第三方工具(例:Amplitude、Braze)进行用户匹配。
airbridge.setUserAlias('amplitude_id', '12345678')
airbridge.setUserAlias('braze_ext_id', '87654321')
附加用户属性有助于更准确的多触点归因 (MTA) 分析、附加内部数据分析和集成第三方解决方案。
airbridge.setUserAttribute('age', 45)
airbridge.setUserAttribute('gender', 'male')
airbridge.setUserAttribute('name', 'Gildong Hong')
请按照以下步骤确保您设置的的用户信息正通过 SDK 正确发送。
配置用户标识符信息。
使用 SDK 发送事件。
前往 Airbridge 面板 [原始数据]>[Web 实时记录] 点击事件。
检查 user
块下的用户信息是否正确发送。
您可在 SDK 中设置设备标识符,使以后收集的所有事件包含设备标识符。设置后,无论 App 是否关闭,设备标识符将保留,除非手动删除。
airbridge.setDeviceAlias('YOUR_KEY', 'YOUR_VALUE')
airbridge.removeDeviceAlias('YOUR_KEY')
airbridge.clearDeviceAlias()
方法 | 说明 |
---|---|
| 将键值对添加到设备标识符中。 |
| 删除相应于 key 的设备标识符。如果没有相应的设备标识符,则不执行任何操作。 |
| 删除所有设备标识符。 |
注意
对于 iOS,根据 Cookie 的最大存储期限,设备别名最长可保留 7 天。
当出现重要的用户操作时,可以发送应用内事件来监测各渠道的表现。
所有事件参数均为选填项。不过,有关事件的信息越多,越有助于提供更准确的统计数据。
名称: send
字段 | 类型 | 详细参数字段名称 | 类型 | 参数说明 |
---|---|---|---|---|
category | String | - | - | 事件名称 (必填) |
info | Object | label | String | 事件子属性 1 |
info | Object | action | String | 事件子属性 2 |
value | Object | value | Number | 自定义事件值 |
info | Object | semanticAttributes | Object | |
info | Object | customAttributes | Object | Custom Attribute |
airbridge.events.send('category', {
label: 'label',
action: 'action',
value: 10,
semanticAttributes: {
transactionID: 'transaction_123',
},
customAttributes: {
key: 'value',
}
})
名称 | 字段 | 类型 | 参数说明 |
---|---|---|---|
homeViewEvent | - | - | - |
airbridge.events.send('airbridge.ecommerce.home.viewed')
字段 | 类型 | 说明 |
---|---|---|
userID | String | 用户 ID |
userEmail | string | 用户邮箱 |
userPhone | string | 用户电话号码 |
attributes | object | 用户属性 |
alias | object | 用户别名 |
airbridge.setUserID('ab180')
airbridge.setUserEmail('user@example.com')
airbridge.events.send('airbridge.user.signup')
字段 | 类型 | 说明 |
---|---|---|
userID | String | 用户 ID |
userEmail | String | 用户邮箱 |
userPhone | String | 用户电话号码 |
attributes | Object | 用户属性 |
alias | Object | 用户别名 |
airbridge.setUserID('ab180')
airbridge.setUserEmail('user@example.com')
airbridge.events.send('airbridge.user.signin')
名称 | 字段 | 类型 | 参数说明 |
---|---|---|---|
signOut | - | - | - |
airbridge.events.send('airbridge.user.signout')
airbridge.clearUser()
字段 | 类型 | 详细参数字段名称 | 类型 | 参数说明 |
---|---|---|---|---|
productListID | string | - | - | 产品列表 ID |
products | Array<Product> | - | - | 产品数组 |
products | Array<Product> | productID | string | 产品 ID |
products | Array<Product> | name | string | 产品名称 |
products | Array<Product> | price | number | 产品价格 |
products | Array<Product> | currency | string | 产品货币 |
products | Array<Product> | quantity | number | 产品数量 |
products | Array<Product> | position | number | 产品定位 |
airbridge.events.send('airbridge.ecommerce.productList.viewed', {
semanticAttributes: {
productListID: 'food',
products: [
{
productID: 'coke_zero',
name: 'Coke Zero',
price: 1.99,
currency: 'USD',
position: 1
},
{
productID: 'burger_cheese_double',
name: 'Double Cheeseburger',
price: 3.99,
currency: 'USD',
position: 2
}
]
}
})
名称: products
类型: Array<Object>
字段 | 类型 | 参数说明 |
---|---|---|
- | - | 产品对象数组 |
productID | string | 产品 ID |
name | string | 产品名称 |
price | number | 产品价格 |
currency | string | 产品货币 |
quantity | number | 产品数量 |
position | number | 产品定位 |
airbridge.events.send('airbridge.ecommerce.product.viewed', {
semanticAttributes: {
products: [{
productID: 'coke_zero',
name: 'Coke Zero',
price: 1.99,
currency: 'USD',
position: 1
}]
}
})
字段 | 类型 | 详细参数字段名称 | 类型 | 参数说明 |
---|---|---|---|---|
query | string | - | - | 搜索查询 |
products | Array<Product> | - | - | 产品数组 |
products | Array<Product> | productID | string | 产品 ID |
products | Array<Product> | name | string | 产品名称 |
products | Array<Product> | price | number | 产品价格 |
products | Array<Product> | currency | string | 产品货币 |
products | Array<Product> | quantity | number | 产品数量 |
products | Array<Product> | Position | number | 产品定位 |
airbridge.events.send('airbridge.ecommerce.searchResults.viewed', {
semanticAttributes: {
products: [
{
productID: 'coke_zero',
name: 'Coke Zero',
price: 1.99,
currency: 'USD',
position: 1
},
{
productID: 'burger_cheese_double',
name: 'Double Cheeseburger',
price: 3.99,
currency: 'USD',
position: 2
}
],
query: 'Search Query'
}
})
字段 | 类型 | 详细参数字段名称 | 类型 | 参数说明 |
---|---|---|---|---|
cartID | string | - | - | 产品购物车 ID |
currency | string | - | - | 产品货币 |
products | Array<Product> | - | - | 产品数组 |
productID | Array<Product> | productID | string | 产品 ID |
productID | Array<Product> | name | string | 产品名称 |
productID | Array<Product> | price | number | 产品价格 |
productID | Array<Product> | currency | string | 产品货币 |
productID | Array<Product> | quantity | number | 产品数量 |
productID | Array<Product> | position | number | 产品定位 |
airbridge.events.send('airbridge.ecommerce.product.addedToCart', {
value: 13.95,
semanticAttributes: {
products: [
{
productID: 'coke_zero',
name: 'Coke Zero',
price: 1.99,
currency: 'USD',
quantity: 3,
position: 1
},
{
productID: 'burger_cheese_double',
name: 'Double Cheeseburger',
price: 3.99,
currency: 'USD',
quantity: 2,
position: 2
}
],
cartID: '73926365',
currency: 'USD'
}
})
字段 | 类型 | 详细参数字段名称 | 类型 | 参数说明 |
---|---|---|---|---|
inAppPurchased | boolean | - | - | 产品应用内购买 |
currency | string | - | - | 产品货币 |
transactionID | string | - | - | 交易 ID |
products | Array<Product> | - | - | 产品数组 |
products | Array<Product> | productID | string | 产品 ID |
products | Array<Product> | name | string | 产品名称 |
products | Array<Product> | price | number | 产品价格 |
products | Array<Product> | currency | string | 产品货币 |
products | Array<Product> | quantity | number | 产品数量 |
products | Array<Product> | position | number | 产品定位 |
airbridge.events.send('airbridge.ecommerce.order.completed', {
value: 13.95,
semanticAttributes: {
products: [
{
productID: 'coke_zero',
name: 'Coke Zero',
price: 1.99,
currency: 'USD',
quantity: 3,
position: 1
},
{
productID: 'burger_cheese_double',
name: 'Double Cheeseburger',
price: 3.99,
currency: 'USD',
quantity: 2,
position: 2
}
],
inAppPurchased: true,
currency: 'USD',
transactionID: '16874326'
}
})
请按照以下步骤确保您设置的事件正通过 SDK 正确发送。
使用 SDK 发送事件。
检查事件是否显示在 Airbridge 面板 [原始数据]>[Web 实时记录] 中。
Airbridge Web SDK 可让您为用户提供无缝的 Web-to-app 体验。以下方法使得开发人员不必为每个按钮单独编码,还可确保您的按钮适用于所有主流浏览器。
使用按钮的 id
值添加下载功能并追踪其性能。
// html
<button id="app_download">Go to app</button>
// javascript
airbridge.setDownloads({
buttonID: "app_download",
// or ["app_download_1", "app_download_2", ...]
defaultParams: {
campaign: 'example_campaign',
medium: 'example_medium',
term: 'example_term',
content: 'example_content'
},
ctaParams: {
cta_param_1: '1',
cta_param_2: '2',
cta_param_3: '3',
}
});
必填
buttonID
: 按钮的 id
属性值。可以是数组。
选填
defaultParams
: 广告系列参数
如有设置,defaultParams
将在点击按钮时发送。
注意
由于 SDK 应确保用户跳转到应用商店,因此请勿使用
<a>
标签或onclick
功能。
使用按钮的 id
值嵌入深度链接并追踪其性能。通过 setDeeplinks
,您可以自定义每个按钮的操作。您不仅可以为每个平台(OS)分别设置深度链接的跳转目的地,还可以覆盖后备和广告系列参数。这样即可正确追踪 Web 归因,又省去为网站上所有按钮创建深度链接的麻烦。
airbridge.setDeeplinks({
buttonID: "deeplinking-button-1",
// or ["deeplink-button-1", "deeplink-button-2", ...]
deeplinks: {
ios: "ablog://main",
android: "ablog://main",
desktop: "https://www.airbridge.io/blog"
},
fallbacks: {
ios: "itunes-appstore",
// itunes-appstore(default), google-play, url
android: "google-play"
// google-play(default), itunes-appstore, url
},
defaultParams: {
campaign: 'example_campaign',
medium: 'example_medium',
term: 'example_term',
content: 'example_content'
},
desktopPopUp: true
});
必填
deeplinks.ios
: 在 iOS 环境中点击按钮时要运行的深度链接。(仅允许具有 Scheme 的深度链接)
deeplinks.android
: 在 Android 环境中点击按钮时要运行的深度链接。(仅允许具有 Scheme 的深度链接)
deeplinks.desktop
: 在 Desktop 环境中点击按钮时要运行的深度链接。
fallbacks.ios
: 当 iOS 中的深链接失败时的目的地。
fallbacks.android
: 当 Android 中的深链接失败时的目的地。
itunes-appstore: App 的 Apple App Store 页面
google-play : App 的 Google Play Store 页面
url : http 或 https scheme URL
buttonID
: 按钮的 id
属性值。可以是数组。
选填
defaultParams
: 广告系列参数
desktopPopUp
: 如果设置为 true
,在 Desktop 环境中的深度链接将在新窗口中运行。
注意:由于 SDK 应确保用户跳转到应用商店,因此请勿使用 <a>
标签或 onclick
功能。
如果设置了 redirect: true
,深度链接将自动运行于所有试图访问网页的传入请求。
airbridge.setDeeplinks({
buttonID: "deeplinking-button-1",
deeplinks: {
ios: "example://detail?id=1",
android: "example://detail?id=1",
desktop: "https://example.com/detail?id=1"
},
fallbacks: {
// itunes-appstore(default), google-play, url
ios: "itunes-appstore",
// google-play(default), itunes-appstore, url
android: "google-play"
},
redirect: true
});
您可以通过调用 openDeeplink
函数打开 App。
airbridge.openDeeplink({
type: "redirect",
deeplinks: {
ios: "example://detail?id=1",
android: "example://detail?id=1",
desktop: "https://example.com/detail?id=1"
},
fallbacks: {
ios: "itunes-appstore",
android: "google-play"
},
});
当调用通过用户操作执行的函数(如
onclick
)时,请使用type: "click"
。当不通过用户操作直接打开 App 时,请使用type: "redirect"
。
Web-to-app 横幅是鼓励 Web 用户安装 App 的横幅。
airbridge.setBanner({
title: 'AirStyle',
description: 'Find your perfect style!!',
keyColor: '#00a0c6',
position: 1
})
您可以更改横幅的标题、描述、按钮颜色和其他属性。
如果您的广告落地页是一个网站,您可以使用几个参数为 URL 添加其他信息。这些参数可用于追踪网站的链路。
参数分析既可以自动进行,也可以手动完成。
当使用 utmParsing: true
选项调用 airbridge.init
方法时,UTM
值将自动存储为 Airbridge 广告系列参数,并可在 Airbridge 基础报告中查看。
URL 参数 | Airbridge 广告系列参数 |
---|---|
utm_source | Channel ( |
utm_campaign | Campaign ( |
utm_medium | Sub Publisher ( |
utm_term | Term ( |
utm_content | Content ( |
如果缺少
utm_source
,则无法解析其他 UTM 参数。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
utmParsing: true,
})
URL 是 window.location.href
值。
您可以通过设置 utmParameterValueReplaceMap
将通过 utmParsing
收集的 UTM 值记录为自定义值。此功能有助于将通过多种解决方案收集的 UTM 值统一,从而在 Airbridge 更轻松地分析 Web 成果。例如,原则上,设置 utm_source=blog
时,UTM 参数的来源渠道(channel)将记录为 blog
。但是,可以通过 utmParameterValueReplaceMap
将其记录为 my_blog
等自定义值。
支持的参数有 utm_source
、utm_campaign
、utm_medium
、utm_term
、utm_content
。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
utmParsing: true,
utmParameterValueReplaceMap: {
utm_source: {
blog: 'my_blog',
},
},
})
当使用 utmParsing: true
选项调用 init
方法时,UTM
值将自动存储为 Airbridge 广告系列参数,并可在 Airbridge 基础报告中查看。
您可以使用 urlQueryMapping
自动存储其他参数。在调用 airbridge.init
方法时,为 urlQueryMapping
插入键值对。以下是在 Airbridge 可以使用的键。
参数名称 | 说明 |
---|---|
channel | 渠道 |
campaign | 广告系列 |
ad_group | 广告组 |
ad_creative | 广告素材 |
content | 内容 |
term | 关键词 |
sub_id | 子渠道 |
sub_id_1 | 二级子渠道 1 |
sub_id_2 | 二级子渠道 2 |
sub_id_3 | 二级子渠道 3 |
campaign_id | 广告系列 ID |
ad_group_id | 广告组 ID |
ad_creative_id | 广告素材 ID |
term_id | 关键词 ID |
如果在 utm_source
和 utm_campaign
中使用了 internal_code
等自定义参数,URL 结构将如下所示。
https://example.com/?utm_source=google&utm_campaign=jan_ua_campaign&internal_code=ABC
以下是一个示例,说明如何映射各参数,使其显示在 Airbridge 面板上。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
urlQueryMapping: {
channel: 'utm_source',
campaign: 'utm_campaign',
sub_id_1: 'internal_code',
},
})
如果通过上述 URL 发生转化,则 internal_code
的数据可通过前往 Airbridge 面板 [基础报告]>[配置]>[分组] 选择"Sub Sub Publisher 1”访问。
以下是一个示例,说明如何手动解析参数。
从 params
对象中提取信息,并在调用 init
函数时注册此信息。
function queryStringToJSON(url) {
if (url.search.slice !== undefined) {
var pairs = url.search.slice(1).split('&');
} else {
var pairs = url.split('?')[1].split('&');
}
var result = {};
pairs.forEach(function(pair) {
pair = pair.split('=');
result[pair[0]] = decodeURIComponent(pair[1] || '');
});
return JSON.parse(JSON.stringify(result));
}
var url = window.location.href;
var params = queryStringToJSON(url);
// initialize
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
defaultChannel: params['utm_source'],
defaultParams: {
campaign: params['utm_campaign'],
medium: params['utm_medium'],
content: params['utm_content'],
term: params['utm_term']
}
});
名称 | 说明 |
---|---|
defaultChannel | 要记录在网页上所有事件中的广告主名称 |
defaultParams.campaign | 要记录在网页上所有事件中的广告系列名称 |
defaultParams.medium | 要记录在网页上所有事件中的广告媒体 |
defaultParams.content | 要记录在网页上所有事件中的广告内容 |
defaultParams.term | 要记录在网页上所有事件的广告关键词。 |
使用 clearUser
方法删除用户的 ID、邮箱、电话号码、别名和属性。
airbridge.clearUser()
在客户端级别对 user.externalUserEmail
和 user.externalUserPhone
进行哈希处理 (SHA256)。此选项不会影响 user.externalUserID
,也不会对其进行哈希处理。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
userHash: true, // Default false
})
如果在事件完全发送之前发生跳转(例如从中继页面发送事件),数据可能会丢失。使用 events.wait
可确保事件在跳转之前发送完毕。
参数 | 类型 | 说明 |
---|---|---|
timeout | Number | 最长等待时间(毫秒) |
callback | (error: string) => void | 事件发送时的回调 |
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
})
airbridge.events.send('category')
airbridge.events.wait(3000, function (error) {
location.href = 'url'
})
使用 cookieWindow
调整归因窗口。
// Set attribution window to 1 day
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
cookieWindow: 1,
})
// Set attribution window to 720 minutes (12 hours)
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
cookieWindowInMinutes: 720,
})
如果同时设置了
cookieWindow
和cookieWindowInMinutes
,则适用cookieWindowInMinutes
。
用户追踪是通过浏览器 Cookie 进行的,这些 Cookie 在子域之间分享。
将 shareCookieSubdomain
设置为 false
可停止在子域之间分享 Cookie。
// initialize
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
shareCookieSubdomain: false,
})
shareCookieSubdomain
的默认值为 true。
如果有一项服务使用多个子域,建议设置为 true
。
如果有多项服务使用多个子域,建议设置为 false
。
广告系列 A 的追踪链接 → https://airbridge.io → https://blog.airbridge.io,
shareCookieSubdomain: true
https://airbridge.io 上的事件 → 归因于 广告系列 A
https://blog.airbridge.io 上的事件 → 归因于 广告系列 A
shareCookieSubdomain: false
https://airbridge.io 上的事件→ 归因于 广告系列 A
http://blog.airbridge.io 上的事件 → 归因于 默认广告系列
如果在初始化 SDK 时将 autoStartTrackingEnabled
设置为 false
,则在调用 airbridge.startTracking
之前不会发送事件。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
autoStartTrackingEnabled: false,
})
airbridge.startTracking()
autoStartTrackingEnabled
的默认值为 true
。
注意
若您希望在 CTA 按钮中嵌入自定义渠道追踪链接,则不可使用
setDeeplinks
函数。相反,若您使用setDeeplinks
函数创建 CTA 按钮,则不可向其嵌入自定义渠道追踪链接。
如果您正在通过使用 setDeeplinks 函数 创建的 CTA 按钮(例:一个标有“在应用中查看”的按钮)实现 Web-to-app 追踪,您可以根据需要配置受保护的归因窗口(Protected Attribution Window, PAW)。
PAW 是从网站启动开始,从归因过程中排除由 Airbridge Web SDK 收集的触点的时间范围。更多有关 PAW 设置下的归因过程,请参阅 本指南。
useProtectedAttributionWindow
的默认值为 30 分钟。若需修改,请在 airbridge.init()
中将 useProtectedAttributionWindow
设置为 true
,并输入您所希望的 PAW(以分钟为单位)。useProtectedAttributionWindow
可以设置为最多 4320(3 天)。
若您不希望使用 PAW,请将 useProtectedAttributionWindow
设置为 false
。
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
useProtectedAttributionWindow: true,
protectedAttributionWindowInMinutes: 60,
});
当用户跳转到另一个网站时,使用 sendWeb
方法。如果用户跳转到已安装 Airbridge Web SDK 的网站,Airbridge 可连接归因进行分析。
为了连接归因,在初始化 Airbridge SDK 时,必须将
useProtectedAttributionWindow
设置为true
。请参阅 受保护的归因窗口。
// Open in same window
airbridge.sendWeb("https://www.airbridge.io/blog")
// Open in new window
airbridge.sendWeb("https://www.airbridge.io/blog", function(err, res) {
window.open(res.targetUrl)
})
可使用 Google Tag Manager 安装 Airbridge SDK。
请按照以下步骤使用 Google Tag Manager 安装 Airbridge SDK。
点击“Workspace overview” 中的“New tag”,或在 “Container”中选择“Tag → New”。
在“Tag configuration → Custom settings”中选择“Custom HTML”。
在“HTML”部分插入 Airbridge SDK 代码,如下图所示。
前往“Tag configuration → Advanced settings → Tag firing priority”并输入一个大于 0 的数字(例: 9999)。
在“Tag configuration → Advanced settings → Tag firing options”中选择“Once per page”。
将“Trigger”设置为“Pageview - DOM ready”。
完成创建并提交。
在 Airbridge 面板的实时记录检查 SDK 记录是否记录正确。
请按照以下步骤使用 Google Tag Manager 追踪事件。
点击“Workspace overview” 中的“New tag”,或在 “Container”中选择“Tag → New”。
在“Tag configuration → Custom settings”中选择“Custom HTML”。
在“HTML”部分插入您希望追踪的 事件代码,如下图所示。
根据事件,在“Advanced settings → Tag firing options” 中选择 “Unlimited”、“Once per event”、或 “Once per page”。
为事件设置适当的“Trigger”。
完成创建并提交。
在 Airbridge 面板的实时记录检查 SDK 记录是否记录正确。
Was this page helpful?