에어브릿지 Web 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(){h.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 k(){a_.removeEventListener("load",k);i_.head.appendChild(c)})},h={queue:[],get isSDKEnabled(){return!1}};_i.concat(_d).forEach(function(c){var a=c.split("."),k=a.pop();a.reduce(function(p,q){return p[q]=p[q]||{}},h)[k]=function(){h.queue.push([c,arguments])}});a_[_b]=h;"undefined"!==typeof i_.documentMode&&(_r=_r.replace(/^https:/,""));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","https://static.airbridge.io/sdk/latest/airbridge.min.js","init startTracking stopTracking 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","fetchResource","createTouchpoint","createTrackingLink"],0);
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
})
</script>
아래의 명령어를 실행하여 airbridge-web-sdk-loader
를 설치합니다.
npm install airbridge-web-sdk-loader
yarn add airbridge-web-sdk-loader
pnpm i airbridge-web-sdk-loader
airbridge-web-sdk-loader
패키지를 설치했다면 다음과 같이 사용할 수 있습니다.
import airbridge from 'airbridge-web-sdk-loader'
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
})
app
과 webToken
은 에어브릿지 대시보드의 설정 → 토큰 관리에서 확인할 수 있습니다.
에어브릿지 Web SDK는 ES5를 지원하는 모든 브라우저에서 동작합니다.
브라우저 | 지원 여부 |
---|---|
Chrome | ✔️ |
Firefox | ✔️ |
Safari | ✔️ |
Internet Explorer | IE 9 이상 |
에어브릿지 Web SDK는 airbridge.init()
함수를 사용하여 초기화할 수 있습니다. 초기화 시 필수로 입력해야 하는 app
과 webToken
은 에어브릿지 대시보드의 설정 → 토큰 관리에서 확인할 수 있습니다. 필요에 따라 다양한 초기화 옵션을 추가로 설정할 수 있습니다.
아래 코드는 초기화 예시 코드입니다.
옵션 | 필수여부 | 타입 | 기본값 | 설명 |
---|---|---|---|---|
| 필수 |
|
| Web SDK 초기화시 필요한 고객사의 앱 이름입니다. |
| 필수 |
|
| Web SDK 초기화시 필요한 고객사의 웹 SDK 토큰입니다. |
| 옵션 |
|
| 옵트인을 명시적으로 해야하는 경우 이 값을 |
| 선택 |
|
| URL 파라미터의 UTM 값을 각각 Airbridge 캠페인 파라미터 값으로 자동 설정합니다. 자세한 내용은 캠페인 파라미터 설정하기를 참고하세요. |
| 선택 |
|
| utmParameterValueReplaceMap을 설정하면 |
| 선택 |
|
|
|
| 선택 |
|
| 초기화 시 사용자 정보를 전달 할 수 있습니다. |
| 선택 |
|
| 유저 이메일과 전화번호를 해시화하여 전송할 수 있습니다. |
| 선택 |
|
| 자세한 내용은 어트리뷰션 윈도우 수정하기를 참고하세요 |
| 선택 |
|
| 자세한 내용은 어트리뷰션 윈도우 수정하기를 참고하세요 |
| 선택 |
|
| 자세한 내용은 웹 투 앱 어트리뷰션의 기여 기간 설정하기를 참고하세요. |
| 선택 |
|
| 자세한 내용은 웹 투 앱 어트리뷰션의 기여 기간 설정하기를 참고하세요. |
| 선택 |
| true | 자세한 내용은 서브 도메인 간에 기여 정보 공유하기를 참고하세요. |
| 선택 |
|
| 몰로코 쿠키 ID 를 설정하기 위한 옵션입니다. |
| 선택 |
|
| 저장 공간을 분리하여 같은 루트 도메인을 공유하는 서브 도메인에서 사용 중인 여러 앱의 어트리뷰션 데이터를 앱 별로 확인하기 위한 옵션입니다. |
알립니다
필수 설정 기능이 아닙니다. 필요한 기능인지 확인한 후에 설정하세요.
옵트인(Opt-In)은 유저가 동의할 때에만 유저 정보를 사용하는 정책입니다.
autoStartTrackingEnabled
옵션을 false
로 설정한 후에, 이벤트를 수집할 수 있는 시점에 startTracking
함수를 호출하세요. startTracking
함수가 호출된 시점부터 이벤트 수집을 시작합니다.
기본 설정은 true
입니다.
autoStartTrackingEnabled
설정으로, 초기화를 마친 후에 자동으로 이벤트 추적이 시작되지 않도록 설정하세요.
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
autoStartTrackingEnabled: false,
})
개인정보 수집 및 활용에 대한 유저 응답을 수집하세요. 유저가 개인정보 수집 및 활용에 동의하면 이벤트 추적을 시작합니다.
airbridge.startTracking()
알립니다
필수 설정 기능이 아닙니다. 필요한 기능인지 확인한 후에 설정하세요.
옵트아웃(Opt-Out)은 유저가 거부하기 전까지 유저 정보를 사용할 수 있는 정책입니다.
autoStartTrackingEnabled
옵션을 true
로 설정한 후에, 이벤트를 수집할 수 없는 시점에 stopTracking
함수를 호출하세요. stopTracking
함수가 호출된 시점부터 이벤트 수집을 시작합니다.
autoStartTrackingEnabled
설정으로, 초기화를 마친 후에 자동으로 이벤트 추적이 시작되도록 설정하세요. autoStartTrackingEnabled
옵션의 기본값이 true
이기 때문에 입력하지 않아도 자동으로 이벤트를 추적합니다.
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
autoStartTrackingEnabled: true,
})
개인정보 수집 및 활용에 대한 유저 응답을 수집하세요. 유저가 개인정보 수집 및 활용을 거부하면 이벤트 추적을 중단합니다.
airbridge.stopTracking()
에어브릿지 SDK가 서비스에서 발생한 유저의 특정 행동을 설정에 따라 수집한 후에 이벤트로 전송합니다.
웹 이벤트를 전송하기 위해 airbridge.events.send
함수를 사용합니다.
아래 예시를 참고하세요.
airbridge.events.send('category', {
label: 'Tool',
action: 'Hammer',
value: 10,
semanticAttributes: {
currency: 'USD',
transactionID: 'transaction_123',
products: [
{
productID: 'coke_zero',
name: 'PlasticHammer',
},
],
},
customAttributes: {
promotion: 'FirstPurchasePromotion',
},
})
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| 이벤트의 이름 |
| 선택 |
| 이벤트 하위 분류 |
| 선택 |
| 이벤트 하위 분류 |
| 선택 |
| 이벤트 하위 분류 |
| 선택 |
| 이벤트의 시맨틱 어트리뷰트 |
| 선택 |
| 이벤트의 커스텀 어트리뷰트 |
각 구성요소의 정의와 사용할 수 있는 문자열을 아래에서 확인하세요.
에어브릿지에서는 스탠다드 이벤트를 제공합니다. 스탠다드 이벤트 목록을 확인하여 이벤트를 전송하세요.
커스텀 이벤트는 이벤트 택소노미에서 정한 이벤트 이름을 사용하여 전송할 수 있습니다.
어트리뷰트로 이벤트의 추가 정보를 수집할 수 있습니다.
action
, label
: 에어브릿지 리포트에서 그룹바이로 활용할 수 있는 정보를 수집합니다.
value
: 매출 분석에서 활용하는 정보를 수집합니다. 수집한 데이터는 자유롭게 사칙연산에 활용할 수 있습니다.
시맨틱 어트리뷰트: 에어브릿지가 미리 정의한 어트리뷰트입니다.
커스텀 어트리뷰트: 에어브릿지 사용자가 정의한 어트리뷰트입니다.
에어브릿지가 제공하는 시맨틱 어트리뷰트 목록은 아래에서 확인할 수 있습니다.
알립니다
필수 설정 기능이 아닙니다. 필요한 기능인지 확인한 후에 설정하세요.
전송하는 웹 이벤트에 필요한 설정을 추가할 수 있습니다.
에어브릿지 SDK는 디바이스 식별자를 모든 이벤트에 포함해 전송하는 기능을 지원합니다.
함수 | 설명 |
---|---|
| 디바이스 식별자를 추가로 입력합니다. |
| 디바이스 식별자 중에서 지정한 디바이스 식별자를 삭제합니다. |
| 디바이스 식별자를 모두 삭제합니다. |
airbridge.setDeviceAlias('<DEVICE_ALIAS_KEY>', '<DEVICE_ALIAS_VALUE>')
airbridge.removeDeviceAlias('<DEVICE_ALIAS_KEY>')
airbridge.clearDeviceAlias()
에어브릿지가 수집하는 주요 인앱 이벤트는 스탠다드 이벤트와 커스텀 이벤트입니다.
스탠다드 이벤트는 에어브릿지가 정의한 이벤트입니다.
아래 예시 코드를 참고하세요.
회원가입
// Make sure to set user information before sending the event
airbridge.setUserID('string')
airbridge.setUserPhone('string')
airbridge.setUserEmail('string')
airbridge.setUserAttribute('string', 'string')
airbridge.setUserAlias('string', 'string')
// Send event
airbridge.events.send('airbridge.user.signup')
로그인
// Make sure to set user information before sending the event
airbridge.setUserID('string')
airbridge.setUserPhone('string')
airbridge.setUserEmail('string')
airbridge.setUserAttribute('string', 'string')
airbridge.setUserAlias('string', 'string')
// Send event
airbridge.events.send('airbridge.user.signin')
로그아웃
// Send event before clearing user information
airbridge.events.send('airbridge.user.signout')
// Initialize user information
airbridge.clearUser()
홈화면 조회
airbridge.events.send('airbridge.ecommerce.home.viewed')
상품리스트 조회
airbridge.events.send('airbridge.ecommerce.product.viewed', {
semanticAttributes: {
listID: '84e6e236-38c4-48db-9b49-16e4cc064386',
currency: 'USD',
products: [
{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
},
{
productID: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
name: 'PlasticFork',
price: 1,
quantity: 1,
currency: 'USD',
},
],
},
})
검색결과 조회
airbridge.events.send('airbridge.ecommerce.searchResults.viewed', {
semanticAttributes: {
query: 'Plastic',
currency: 'USD',
products: [
{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
},
{
productID: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
name: 'PlasticFork',
price: 1,
quantity: 1,
currency: 'USD',
},
],
},
})
상품상세페이지 조회
airbridge.setUserID('string')
airbridge.setUserPhone('string')
airbridge.setUserEmail('string')
airbridge.setUserAttribute('string', 'string')
airbridge.setUserAlias('string', 'string')
airbridge.events.send('airbridge.ecommerce.product.viewed', {
semanticAttributes: {
currency: 'USD',
products: [{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
}],
},
})
결제수단 등록
airbridge.events.send('airbridge.addPaymentInfo', {
semanticAttributes: {
type: 'CreditCard',
},
})
위시리스트 추가
airbridge.events.send('airbridge.addToWishlist', {
semanticAttributes: {
listID: '189a2f8b-83ee-4074-8158-726be54e57d4',
currency: 'USD',
products: [{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
}],
},
})
장바구니 담기
airbridge.events.send('airbridge.ecommerce.product.addedToCart', {
semanticAttributes: {
cartID: '421eaeb7-6e80-4694-933e-f2e1a55e9cbd',
currency: 'USD',
products: [{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
}],
},
})
결제 시작
airbridge.events.send('airbridge.initiateCheckout', {
semanticAttributes: {
transactionID: '0a7ee1ec-33da-4ffb-b775-89e80e75978a',
currency: 'USD',
products: [
{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
},
{
productID: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
name: 'PlasticFork',
price: 1,
quantity: 1,
currency: 'USD',
},
],
},
})
구매 완료
airbridge.events.send('airbridge.ecommerce.order.completed'{
semanticAttributes: {
value: 11,
transactionID: '8065ef16-162b-4a82-b683-e51aefdda7d5',
currency: 'USD',
inAppPurchased: true,
products: [
{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
},
{
productID: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
name: 'PlasticFork',
price: 1,
quantity: 1,
currency: 'USD',
},
],
},
})
구매 취소
주의하세요
구매 취소 이벤트의 경우, 반드시 구매 완료 이벤트의
transactionID
를 구매 취소 이벤트의transactionID
에 입력해 주세요.transactionID
가 서로 일치하지 않으면 구매취소 이벤트가 반영되지 않습니다.자세한 내용은 정확한 구매 성과 측정을 위한 구매 취소 이벤트 분석하기를 참고해 주세요.
airbridge.events.send('airbridge.ecommerce.order.canceled', {
semanticAttributes: {
value: 11,
transactionID: '8065ef16-162b-4a82-b683-e51aefdda7d5',
currency: 'USD',
inAppPurchased: true,
products: [
{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
quantity: 1,
currency: 'USD',
},
{
productID: 'd6ab2fbe-decc-4362-b719-d257a131e91e',
name: 'PlasticFork',
price: 1,
quantity: 1,
currency: 'USD',
},
],
},
})
체험판 시작
airbridge.events.send('airbridge.startTrial', {
semanticAttributes: {
transactionID: 'ef1e5271-0370-407c-b1e9-669a8df1dc2c',
currency: 'USD',
period: 'P1M',
products: [{
productID: '306a57cb-f653-4220-a208-8405d8e4d506',
name: 'MusicStreamingMembership',
price: 15,
currency: 'USD',
}],
},
})
구독
airbridge.events.send('airbridge.subscribe', {
semanticAttributes: {
value: 15,
currency: 'USD',
transactionID: 'cbe718c7-e44e-4707-b5cd-4a6a29f29649',
period: 'P1M',
isRenewal: true,
products: [{
productID: '306a57cb-f653-4220-a208-8405d8e4d506',
name: 'MusicStreamingMembership',
price: 15,
currency: 'USD',
}],
},
})
구독 취소
airbridge.events.send('airbridge.unsubscribe', {
semanticAttributes: {
value: 15,
currency: 'USD',
transactionID: 'cbe718c7-e44e-4707-b5cd-4a6a29f29649',
period: 'P1M',
isRenewal: true,
products: [{
productID: '306a57cb-f653-4220-a208-8405d8e4d506',
name: 'MusicStreamingMembership',
price: 15,
currency: 'USD',
}],
},
})
광고 노출
airbridge.events.send('airbridge.adImpression', {
semanticAttributes: {
value: 0.01,
adPartners: [{
app_version: '5.18.0',
adunit_id: '12345',
adunit_name: '12345',
adunit_format: 'Banner',
id: '12345',
currency: 'USD',
publisher_revenue: 12345.123,
adgroup_id: '12345',
adgroup_name: '12345',
adgroup_type: '12345',
adgroup_priority: '12345',
country: 'kr',
precision: 'publisher_defined',
network_name: '12345',
network_placement_id: '12345',
demand_partner_data: '12345',
}],
},
})
광고 클릭
airbridge.events.send('airbridge.adClick', {
semanticAttributes: {
value: 0.1,
adPartners: [{
app_version: '5.18.0',
adunit_id: '12345',
adunit_name: '12345',
adunit_format: 'Banner',
id: '12345',
currency: 'USD',
publisher_revenue: 12345.123,
adgroup_id: '12345',
adgroup_name: '12345',
adgroup_type: '12345',
adgroup_priority: '12345',
country: 'kr',
precision: 'publisher_defined',
network_name: '12345',
network_placement_id: '12345',
demand_partner_data: '12345',
}],
},
})
튜토리얼 완료
airbridge.events.send('airbridge.completeTutorial', {
semanticAttributes: {
description: 'Finish Initial Tutorial',
},
})
레벨 달성
airbridge.events.send('airbridge.achieveLevel', {
semanticAttributes: {
level: 13,
},
})
과제 달성
airbridge.events.send('airbridge.unlockAchievement', {
semanticAttributes: {
achievementID: '36a0f0bb-b153-4be1-a3e0-3cb5b2b076c1'
description: 'Finish Initial Tutorial',
score: 80,
},
})
평가
airbridge.events.send('airbridge.rate', {
semanticAttributes: {
rateID: '531c64b3-4704-4780-a306-89014ec18daf',
rate: 4.5,
maxRate: 5,
currency: 'USD',
products: [{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
currency: 'USD',
}],
},
})
공유
airbridge.events.send('airbridge.share', {
semanticAttributes: {
description: 'Share Promotion',
sharedChannel: 'CopyLink',
},
})
일정 예약
airbridge.events.send('airbridge.schedule', {
semanticAttributes: {
scheduleID: '75712915-2cd9-4e42-a85e-8d42f356f4c6',
datetime: '2024-01-01T00:00:00+00:00',
place: 'ConferenceRoom',
products: [{
productID: 'abb3e65d-17bc-4b28-89e3-5e356c0ea697',
name: 'ConferenceRoom',
}],
},
})
크레딧 사용
airbridge.events.send('airbridge.spendCredits', {
semanticAttributes: {
transactionID: '22eb193d-be11-4fe4-95da-c91a196faf1c',
currency: 'USD',
products: [{
productID: '0117b32a-5a6c-4d4c-b64c-7858e07dba78',
name: 'PlasticHammer',
price: 10,
currency: 'USD',
}],
},
})
커스텀 이벤트는 앱 서비스에 맞는 광고 성과를 추적하기 위해 스탠다드 이벤트에 해당하지 않는 유저의 행동을 새로 정의한 이벤트입니다.
아래 예시 코드를 참고하세요.
airbridge.events.send('category', {
label: 'label',
action: 'action',
value: 10,
semanticAttributes: {
transactionID: 'transaction_123',
},
customAttributes: {
key: 'value',
}
})
유저 ID는 서비스에서 활용하는 유저 식별자입니다. 유저 ID는 유저를 웹과 앱에서 하나의 유저로 특정할 수 있는 고유한 ID이어야 합니다.
설정한 유저 정보는 브라우저의 Local Storage에 남아 유저 정보를 초기화하기 전까지 모든 이벤트에 함께 전송됩니다.
함수 | 설명 |
---|---|
| 유저 ID를 입력합니다. |
| 유저 ID를 삭제합니다. |
| 유저 식별자를 추가로 입력합니다. |
| 추가로 입력한 유저 식별자 중에서 지정한 식별자를 삭제합니다. |
| 추가로 입력한 모든 유저 식별자를 삭제합니다. |
아래 예시를 참고하세요.
// ID
airbridge.setUserID('testID')
airbridge.clearUserID()
// alias
airbridge.setUserAlias('ADD_YOUR_KEY', 'value')
airbridge.removeUserAlias('DELETE_THIS_KEY')
airbridge.clearUserAlias()
주의하세요
민감한 유저 정보가 포함될 수 있습니다. 법률 자문사와 충분히 검토한 후에 전송하세요.
유저 속성을 설정하면 추가 유저 정보를 전송할 수 있습니다.
함수 | 설명 |
---|---|
| 유저 이메일을 입력합니다. SHA-256으로 해시(Hash)화되어 있습니다. |
| 유저 이메일을 삭제합니다. |
| 유저 전화 번호를 입력합니다. SHA-256으로 해시화되어 있습니다. |
| 유저 전화 번호를 삭제합니다. |
| 유저 속성을 추가로 입력합니다. |
| 추가로 입력한 유저 속성 중에서 지정한 속성을 삭제합니다. |
| 추가로 입력한 모든 유저 속성을 삭제합니다. |
// Automatically hashed on client side using SHA256
// Can turn off hashing feature with special flag
airbridge.setUserEmail('testID@ab180.co')
airbridge.setUserPhone('821012341234')
// attributes
airbridge.setUserAttribute('ADD_YOUR_KEY', 1)
airbridge.setUserAttribute('ADD_YOUR_KEY', 1.0)
airbridge.setUserAttribute('ADD_YOUR_KEY', '1')
airbridge.setUserAttribute('ADD_YOUR_KEY', true)
airbridge.removeUserAttribute('DELETE_THIS_KEY')
airbridge.clearUserAttributes()
유저 이메일과 전화번호를 해시화하여 전송할 수 있습니다.
기본 설정은 true
입니다.
유저 ID는 해시 옵션 적용을 받지 않으므로, 해시화가 필요한 경우에는 직접 유저 ID를 해시화하여 값을 넣어주세요.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN?',
// ...
userHash: false, // Default true
})
clearUser
함수로 유저 정보를 초기화할 수 있습니다.
airbridge.clearUser()
에어브릿지 Web SDK는 웹에서의 기여 정보를 앱으로 전달할 수 있는 딥링크 기능을 지원합니다.
또한, 앱이 아니더라도 웹에서 웹으로 기여 정보를 전달할 수 있습니다.
openBanner
함수를 통해 웹 유저들에게 앱 설치를 유도하는 스마트 배너를 만들 수 있습니다. 다양한 옵션을 통해 배너의 제목, 설명, 버튼의 색깔과 텍스트 등을 변경할 수 있고, 웹 투 앱 또는 웹 투 스토어 및 웹 투 웹 기능을 구현할 수 있습니다.
공통 옵션
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| 배너 제목입니다. |
| 필수 |
| 배너 설명입니다. |
| 필수 |
| 배너의 앱 다운로드 유도 버튼에 입력할 텍스트입니다. |
| 선택 |
| 배너의 앱 다운로드 유도 버튼에 설정할 색상입니다. CSS 색상 형식으로 설정할 수 있습니다. |
| 선택 |
| 배너의 위치입니다. |
| 필수 |
| 배너의 앱 다운로드 유도 버튼이 동작하는 방식입니다. |
| 선택 |
| 배너의 설정할 커스텀 스타일입니다. |
destination
옵션의 type
을 deeplink
로 설정하면, 배너 버튼 클릭 시 앱을 열 수 있습니다.
airbridge.openBanner({
title: '<BANNER_TITLE>',
description: '<BANNER_DESCRIPTION>',
buttonText: '<BANNER_BUTTON_TEXT>',
color: '<BANNER_BUTTON_COLOR>',
position: '<BANNER_POSITION>', // 'top' or 'bottom'
destination: {
type: 'deeplink',
deeplinks: {
android: '<YOUR_SCHEME>://...',
ios: '<YOUR_SCHEME>://...',
desktop: 'https://www.example.com/'
},
fallbacks: {
android: 'google-play',
ios: 'itunes-appstore',
},
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
destination
옵션의 type
을 download
로 설정하면, 배너 버튼 클릭 시 스토어를 열 수 있습니다.
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
|
|
| 선택 |
| 캠페인 파라미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
airbridge.openBanner({
title: '<BANNER_TITLE>',
description: '<BANNER_DESCRIPTION>',
buttonText: '<BANNER_BUTTON_TEXT>',
color: '<BANNER_BUTTON_COLOR>',
position: '<BANNER_POSITION>', // 'top' or 'bottom'
destination: {
type: 'download',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
destination
옵션의 type
을 web
으로 설정하면, 배너 버튼 클릭시 웹 사이트로 이동할 수 있습니다.
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
|
|
| 필수 |
| 유저를 이동시킬 URL을 입력합니다. |
airbridge.openBanner({
title: '<BANNER_TITLE>',
description: '<BANNER_DESCRIPTION>',
buttonText: '<BANNER_BUTTON_TEXT>',
color: '<BANNER_BUTTON_COLOR>',
position: '<BANNER_POSITION>', // 'top' or 'bottom'
destination: {
type: 'web',
url: 'https://www.example.com',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
옵션에 styles
필드를 추가하여 커스텀 스타일을 지정할 수 있습니다.
Key 에는 CSS Selector 형식으로 지정합니다. Value 에는 CSSStyleDeclaration
(TypeScript) 형식으로 지정합니다.
아래 예시를 참고하세요. 아이콘 영역의 border-radius
스타일을 변경합니다.
airbridge.openBanner({
...
styles: {
'#airbridge-banner-icon': {
borderRadius: '4px'
}
}
})
CSS 스타일을 지정할 수 있는 id
를 제공합니다. #airbridge-banner-icon
와 같이 CSS Selector 형식으로 지정할 수 있습니다.
ID | 설명 |
---|---|
| 배너 전체 영역 |
| 배너 아이콘 |
| 배너 제목 |
| 배너 설명 |
| 앱 다운로드 유도 버튼 |
| 배너 닫기 버튼 |
이미 관리하고 있는 배너에 딥링크 기능을 추가하거나, 더 복잡한 구성으로 커스텀 배너를 직접 구현하려는 경우, 에어브릿지 Web SDK에서 제공하는 기능을 활용하여 구현할 수 있습니다.
openDeeplink
함수를 통해 딥링크로 앱을 열 수 있습니다.
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| Android에서 딥링크로 실행할 앱의 Scheme URL입니다. |
| 필수 |
| iOS에서 딥링크로 실행할 앱의 Scheme URL입니다. |
| 필수 |
| Desktop에서 이동할 웹 사이트 URL입니다. |
| 필수 |
| Android에서 앱 미설치로 인한 딥링크 실패 시 이동할 스토어 혹은 웹 사이트 URL입니다. |
| 필수 |
| iOS에서 앱 미설치로 인한 딥링크 실패 시 이동할 스토어 혹은 웹 사이트 URL입니다. |
| 선택 |
| 유저의 상호작용 여부에 따라 아래 옵션 중 하나를 선택하세요. |
| 선택 |
| 캠페인 파리미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
아래 예시를 참고하세요.
airbridge.openDeeplink({
deeplinks: {
// Please use the custom scheme URL like `<YOUR_SCHEME>://...`
// Don't use the `intent://...`, `market://...` or `https://...`
android: '<YOUR_SCHEME>://path?key=value',
// Please use the custom scheme URL like `<YOUR_SCHEME>://...`
// Don't use the `intent://...`, `market://...` or `https://...`
ios: '<YOUR_SCHEME>://path?key=value',
desktop: 'https://www.example.com/path?key=value',
},
fallbacks: {
// Please use `google-play` or website URL like `https://www.example.com/...`.
// Don't use the store URL like `https://play.google.com/...`
android: 'google-play',
// Please use `itunes-appstore` or website URL like `https://www.example.com/...`.
// Don't use the store URL like `https://apps.apple.com/...`
ios: 'itunes-appstore',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
주의하세요
반드시
deeplinks.android
와deeplinks.ios
에 에어브릿지 대시보드에서 설정한 딥링크 Scheme URL을 사용하세요.
예)
<YOUR_SCHEME>://...
다음과 같은 Intent Scheme URL 혹은 HTTP/HTTPS URL 을 사용하지 마세요.
예)
intent://...
예)
market://...
예)
https://www.example.com
다음과 같이 버튼 이벤트에 사용할 수 있습니다.
<button id="<BUTTON_ID>">앱으로 보기</button>
<script>
document.querySelector('#<BUTTON_ID>').addEventListener('click', () => {
airbridge.openDeeplink({ ... })
})
</script>
<button id="<BUTTON_ID>">앱으로 보기</button>
<script>
document.getElementById('<BUTTON_ID>').onclick = function () {
airbridge.openDeeplink({ ... })
}
</script>
주의하세요
반드시 예시에 적혀있는
<BUTTON_ID>
를 실제로 유저 클릭 시 딥링크 기능이 동작해야 할 버튼의 ID 를 입력해 주세요.
openDeeplink
함수에 deeplinks
옵션을 입력하지 않고, fallbacks
옵션을 스토어로 설정하면, 앱 설치 여부와 상관 없이 스토어를 열 수 있습니다.
옵션 | 필수 여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| Android에서 이동할 스토어입니다. |
| 필수 |
| iOS에서 이동할 스토어입니다. |
| 선택 |
| 캠페인 파리미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
아래 예시를 참고하세요.
airbridge.openDeeplink({
fallbacks: {
android: 'google-play',
ios: 'itunes-appstore',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
다음과 같이 버튼 이벤트에 사용할 수 있습니다.
<button id="<BUTTON_ID>">앱 다운로드하기</button>
<script>
document.querySelector('#<BUTTON_ID>').addEventListener('click', () => {
airbridge.openDeeplink({ ... })
})
</script>
<button id="<BUTTON_ID>">앱 다운로드하기</button>
<script>
document.getElementById('<BUTTON_ID>').onclick = function () {
airbridge.openDeeplink({ ... })
}
</script>
주의하세요
반드시 예시에 적혀있는
<BUTTON_ID>
를 실제로 유저 클릭 시 딥링크 기능이 동작해야 할 버튼의 ID 를 입력해 주세요.
openDeeplink
함수에 deeplinks
옵션을 입력하지 않고, fallbacks
옵션을 웹 URL로 설정하면, 앱 설치 여부와 상관 없이 웹 사이트로 이동할 수 있습니다.
옵션 | 필수 여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| Android에서 이동할 웹 사이트 URL입니다. |
| 필수 |
| iOS에서 이동할 웹 사이트 URL입니다. |
| 선택 |
| 캠페인 파리미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
아래 예시를 참고하세요.
airbridge.openDeeplink({
fallbacks: {
android: 'https://www.example.com',
ios: 'https://www.example.com',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
다음과 같이 버튼 이벤트에 사용할 수 있습니다.
<button id="<BUTTON_ID>">웹으로 이동하기</button>
<script>
document.querySelector('#<BUTTON_ID>').addEventListener('click', () => {
airbridge.openDeeplink({ ... })
})
</script>
<button id="<BUTTON_ID>">웹으로 이동하기</button>
<script>
document.getElementById('<BUTTON_ID>').onclick = function () {
airbridge.openDeeplink({ ... })
}
</script>
주의하세요
반드시 예시에 적혀있는
<BUTTON_ID>
를 실제로 유저 클릭 시 딥링크 기능이 동작해야 할 버튼의 ID 를 입력해 주세요.
openDeeplink
함수는 기존의setDeeplinks
,setDownloads
,sendWeb
함수를 대체하는 통합 함수로, 버튼과 같은 DOM 요소와의 연결 없이 독립적으로 사용할 수 있는 순수 함수입니다.
setDeeplinks
함수는 향후 업데이트 없이 유지보수만 제공될 예정입니다.openDeeplink
함수를 사용하여 구현해 주세요.
setDeeplinks
함수를 통해 버튼에 딥링크 기능을 설정할 수 있습니다.
옵션 | 필수 여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| 딥링크 기능을 설정할 |
| 필수 |
| Android에서 딥링크로 실행할 앱의 Scheme URL입니다. |
| 필수 |
| iOS에서 딥링크로 실행할 앱의 Scheme URL입니다. |
| 필수 |
| Desktop에서 이동할 웹 사이트 URL입니다. |
| 필수 |
| Android에서 앱 미설치로 인한 딥링크 실패 시 이동할 스토어 혹은 웹 사이트 URL입니다. |
| 필수 |
| iOS에서 앱 미설치로 인한 딥링크 실패 시 이동할 스토어 혹은 웹 사이트 URL입니다. |
| 선택 |
| Desktop에서 새 창으로 동작합니다. |
| 선택 |
| 주석 |
| 선택 |
| 캠페인 파리미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
아래 예시를 참고하세요.
<button id="<BUTTON_ID>">앱으로 보기</button>
<script>
airbridge.setDeeplinks({
buttonID: '<BUTTON_ID>', // or ['<BUTTON_ID_1>', '<BUTTON_ID_2>', ...]
deeplinks: {
android: '<YOUR_SCHEME>://path?key=value',
ios: '<YOUR_SCHEME>://path?key=value',
desktop: 'https://www.example.com/path?key=value',
},
fallbacks: {
android: 'google-play',
ios: 'itunes-appstore',
},
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
</script>
주의하세요
setDeeplinks
함수를 사용하면, Web SDK에서 버튼을 관리하기 때문에 절대로 버튼의onclick
함수를 설정하지 마세요. 또한<a>
태그의id
를 사용하지 마세요.
openDeeplink
함수는 기존의setDeeplinks
,setDownloads
,sendWeb
함수를 대체하는 통합 함수로, 버튼과 같은 DOM 요소와의 연결 없이 독립적으로 사용할 수 있는 순수 함수입니다.
setDownloads
함수는 향후 업데이트 없이 유지보수만 제공될 예정입니다.openDeeplink
함수를 사용하여 구현해 주세요.
setDownloads
함수를 통해 버튼에 스토어 열기 기능을 설정할 수 있습니다.
옵션 | 필수 여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| 딥링크 기능을 설정할 |
| 선택 |
| 캠페인 파리미터입니다. |
| 선택 |
| CTA 캠페인 파라미터입니다. |
<button id="<BUTTON_ID>">앱 다운로드하기</button>
<script>
airbridge.setDownloads({
buttonID: '<BUTTON_ID>', // or ['<BUTTON_ID_1>', '<BUTTON_ID_2>', ...]
defaultParams: {
campaign: '<EXAMPLE_CAMPAIGN>',
medium: '<EXAMPLE_MEDIUM>',
term: '<EXAMPLE_TERM>',
content: '<EXAMPLE_CONTENT>',
},
ctaParams: {
cta_param_1: '<EXAMPLE_CTA_PARAM_1>',
cta_param_2: '<EXAMPLE_CTA_PARAM_2>',
cta_param_3: '<EXAMPLE_CTA_PARAM_3>',
},
})
</script>
주의하세요
setDownloads
함수를 사용하면, Web SDK에서 버튼을 관리하기 때문에 절대로 버튼의onclick
함수를 설정하지 마세요. 또한<a>
태그의id
를 사용하지 마세요.
openDeeplink
함수는 기존의setDeeplinks
,setDownloads
,sendWeb
함수를 대체하는 통합 함수로, 버튼과 같은 DOM 요소와의 연결 없이 독립적으로 사용할 수 있는 순수 함수입니다.
sendWeb
함수는 향후 업데이트 없이 유지보수만 제공될 예정입니다.openDeeplink
함수를 사용하여 구현해 주세요.
sendWeb
함수를 통해 다른 도메인의 웹 사이트로 이동할 수 있습니다. 이 때 웹 사이트 간의 기여 정보가 전달됩니다.
airbridge.sendWeb('https://other.example.com')
콜백 함수를 입력하면 즉시 웹 사이트로 이동하지 않고, 콜백 함수로 전달되는 URL을 자유롭게 사용 가능합니다. 다음과 같이 버튼 이벤트에 사용할 수 있습니다.
<button id="<BUTTON_ID>">웹으로 이동하기</button>
<script>
document.querySelector('#<BUTTON_ID>').addEventListener('click', () => {
airbridge.sendWeb('https://other.example.com', (error, { targetUrl }) => {
// Open the link with new window or tab.
window.open(targetUrl)
})
})
</script>
<button id="<BUTTON_ID>">웹으로 이동하기</button>
<script>
document.getElementById('<BUTTON_ID>').onclick = function () {
airbridge.sendWeb('https://other.example.com', function (error, response) {
// Open the link with new window or tab.
window.open(response.targetUrl)
})
}
</script>
초기화 시 유저 정보를 전달하여, 발생하는 모든 이벤트에 유저 정보를 담을 수 있습니다.
설정한 유저 정보는 브라우저의 Local Storage에 남아 유저 정보를 초기화하기 전까지 모든 이벤트에 함께 전송됩니다.
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',
},
},
})
옵션 | 타입 | 설명 |
---|---|---|
|
| 유저 ID |
|
| 유저 이메일 |
|
| 유저 전화 번호 |
|
| 유저 속성 (커스텀 Key Value Pair) |
|
| 유저 식별자 |
광고를 통해 웹 사이트에 랜딩한 경우, 웹 사이트 주소에 관련 정보를 파라미터로 붙이면, 그 정보를 토대로 웹 사이트 유입에 대한 트래킹이 가능합니다.
utmParsing
옵션을 true
로 설정하면, URL에 포함된 UTM 관련 파라미터를 자동으로 추출하고 이벤트에 포함하여 전송합니다. 기본값은 false
입니다.
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
utmParsing: true,
})
주의하세요
반드시
utm_source
파라미터가 URL에 포함되어 있어야 합니다.utmParsing
옵션을true
로 설정해도, URL에utm_source
가 없으면 다른 UTM 파라미터들도 무시됩니다.
utmParameterValueReplaceMap
옵션을 설정하면, utmParsing
옵션으로 수집한 UTM 파라미터의 값을 교체할 수 있습니다. 지원하는 파라미터는 utm_source
, utm_campaign
, utm_medium
, utm_term
, utm_content
입니다.
utmParameterValueReplaceMap
옵션을 활용하면, 여러 솔루션을 통해 수집하는 UTM 파라미터를 같은 값으로 통일하여 하나의 대시보드에서 분석할 수 있습니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
utmParsing: true,
utmParameterValueReplaceMap: {
utm_source: {
'before_replace': 'after_replace',
},
},
})
위의 예제는 https://www.example.com/?utm_source=before_replace
와 같이 utm_source
가 before_replace
인 경우, 이벤트에 after_replace
로 변환하여 전송하는 예제입니다.
urlQueryMapping
옵션을 설정하면, UTM 파라미터가 아닌 일반 파라미터도 캠페인 파라미터로 포함하여 이벤트에 전송할 수 있습니다.
옵션 | 필수 여부 | 설명 |
---|---|---|
| 필수 | 채널 |
| 선택 | 캠페인 |
| 선택 | 광고 그룹 |
| 선택 | 광고 소재 |
| 선택 | 콘텐츠 |
| 선택 | 키워드 |
| 선택 | 하위매체 |
| 선택 | 하하위매체1 |
| 선택 | 하하위매체2 |
| 선택 | 하하위매체3 |
| 선택 | 캠페인 ID |
| 선택 | 광고 그룹 ID |
| 선택 | 광고 소재 ID |
| 선택 | 키워드 ID |
예를 들어, 다음은 utm_source
, utm_campaign
파라미터와 함께 서비스 내부에서 사용하는 파라미터가 my_sub_id
인 URL입니다.
https://www.example.com/path?utm_source=my_channel&utm_campaign=my_campaign&my_sub_id=example
이 때, 아래와 같이 설정하면, 에어브릿지 대시보드에서 utm_source
, utm_parameter
와 함께 sub_id_1
을 my_sub_id
로 확인할 수 있습니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
urlQueryMapping: {
channel: 'utm_source',
campaign: 'utm_campaign',
sub_id_1: 'my_sub_id',
},
})
주의하세요
urlQueryMapping
옵션에 반드시channel
을 입력해 주세요.channel
을 입력 하지 않으면 다른 옵션 들도 무시됩니다.
직접 파라미터를 분석하여 init
함수 호출 시에 정보를 입력할 수 있습니다.
옵션 | 필수 여부 | 설명 |
---|---|---|
| 선택 | 매체 이름 |
| 선택 | 광고 이름 |
| 선택 | 광고 매체 |
| 선택 | 광고 검색어 |
| 선택 | 광고 내용 |
아래 예시를 참고해 주세요.
const queryStringToJSON = (url = '') => {
const { searchParams } = new URL(url)
return Object.fromEntries(searchParams.entries())
}
const url = window.location.href
const 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'],
},
})
function queryStringToJSON(url) {
url = url || ''
var index = url.indexOf('?')
if (index < 0) {
index = url.length - 1
}
var pairs = url.slice(index + 1).split('&')
var object = {}
pairs.forEach(function (string) {
if (string.length === 0) {
return
}
var pair = string.split('=')
object[pair[0]] = decodeURIComponent(pair[1] || '')
})
return object
}
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'],
},
})
events.wait
함수를 통해 모든 이벤트 전송이 끝난 후의 동작을 보장할 수 있습니다.
이벤트 전송을 완료하기 전에 페이지를 이동하면 (예를 들어, 페이지를 빠르게 전환하는 중계 페이지에서 이벤트를 전송하는 경우 등) 이벤트가 유실될 수 있습니다. 이런 경우 events.wait
함수로 이벤트 전송을 완료할 때까지 대기한 후에 페이지를 이동하면 이벤트 유실을 최소화할 수 있습니다.
옵션 | 타입 | 설명 |
---|---|---|
|
| 최대 대기시간 (milliseconds) |
|
| 이벤트 전송완료 Callback |
airbridge.events.send('category')
airbridge.events.wait(3000, () => {
location.href = '<TARGET_URL>'
})
airbridge.events.send('category')
airbridge.events.wait(3000, function () {
location.href = '<TARGET_URL>'
})
cookieWindow
옵션을 통해 일 단위로 어트리뷰션 윈도우를 설정할 수 있습니다.
기본 설정은 3일입니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
cookieWindowInMinutes: <MINUTES>,
})
cookieWindowInMinutes
옵션을 통해 분 단위로 어트리뷰션 윈도우를 설정할 수도 있습니다. cookieWindow
옵션과 중복 설정하면 cookieWindowInMinutes
옵션을 우선합니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
cookieWindow: <DAYS>,
})
useProtectedAttributionWindow
옵션을 통해 기여의 프로텍티드 어트리뷰션 윈도우(Protected Attribution Window, PAW)를 설정할 수 있습니다.
기본 설정은 true
입니다.
useProtectedAttribution
옵션을 true
로 설정하면, PAW를 적용합니다. 자세한 내용은 유저가이드를 참고하세요.
useProtectedAttribution
옵션을 false
로 설정하면, PAW를 적용하지 않습니다. 자세한 내용은 유저가이드를 참고하세요.
airbridge.init({
app: 'YOUR_APP_NAME',
webToken: 'YOUR_WEB_TOKEN',
// ...
useProtectedAttributionWindow: true,
})
protectedAttributionWindowInMinutes
옵션을 통해 분 단위로 PAW를 설정할 수 있습니다.
기본 설정은 30분입니다. 최대 3일(4320분) 까지 설정할 수 있습니다.
protectedAttributionWindowInMinutes
옵션은 useProtectedAttributionWindow
옵션을 true
로 설정했을 경우에만 작동합니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
useProtectedAttributionWindow: true,
protectedAttributionWindowInMinutes: 60,
});
에어브릿지 Web SDK는 기본적으로 기여 정보를 쿠키에 저장하고 있으며, 루트 도메인의 쿠키를 저장 공간으로 사용하고 있기 때문에, 서브 도메인 간에 기여 정보를 공유할 수 있습니다.
여러 서브 도메인을 사용한다면 shareCookieSubdomain
옵션을 통해 쿠키를 공유할 지 설정할 수 있습니다.
shareCookieSubdomain
옵션은 false
로 설정하면, 서브 도메인 사이에 데이터를 공유하지 않습니다.
기본 설정은 true
입니다.
// initialize
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
shareCookieSubdomain: false,
})
알립니다
다음과 같은 상황을 고려하여 설정하세요.
여러 서브 도메인에서 하나의 같은 서비스를 운영하는 경우에는
true
로 설정하세요.여러 서브 도메인에서 각각 다른 서비스를 운영하는 경우에는
false
로 설정하세요.
다음과 같은 상황을 가정하겠습니다.
캠페인 A에 대한 트래킹 링크를 클릭하여 https://www.airbridge.io
접속
이후, https://www.airbridge.io
웹 사이트 내의 다른 링크를 클릭하여 https://blog.airbridge.io
접속
위와 같은 경우, shareCookieSubdomain
설정에 따라 다르게 기여됩니다.
true
https://www.airbridge.io
→ 캠페인 A에 기여
https://blog.airbridge.io
→ 캠페인 A에 기여
false
https://www.airbridge.io
→ 캠페인 A에 기여
https://blog.airbridge.io
→ Unattributed
Unattributed 처리되는 상황은 https://blog.airbridge.io
에 Web SDK를 설치하고, init
함수에 특정한 캠페인 파라미터 관련 옵션을 입력하지 않았다고 가정했을 경우입니다.
init
함수의 옵션에 따라 Web SDK의 내부 로직에 의하여 기여가 결정됩니다.
에어브릿지 Web SDK는 기본적으로 도메인 1개당 앱 1개의 어트리뷰션 데이터만 저장할 수 있도록 설계되었습니다. useStoragePerApp
옵션을 true
로 설정하면, 저장 공간을 분리하여 같은 루트 도메인을 공유하는 서브 도메인에서 사용 중인 여러 앱의 어트리뷰션 데이터를 각 앱 별로 확인할 수 있습니다.
기본 설정은 false
입니다.
example.com의 루트 도메인을 공유하는 서브 도메인 a.example.com과 b.example.com에서 여러 앱을 사용할 경우, 아래 예시와 같이 useStoragePerApp
옵션을 사용하여 데이터 저장 공간을 분리할 수 있습니다.
// Subdomain #1: a.example.com
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
useStoragePerApp: true,
})
// Subdomain #2: b.example.com
airbridge.init({
app: '<YOUR_ANOTHER_APP_NAME>',
webToken: '<YOUR_ANOTHER_WEB_TOKEN>',
// ...
useStoragePerApp: true,
})
주의하세요
useStoragePerApp
옵션을 변경하면 변경 직후에 유저가 사용하는 각 브라우저에서 발생한 첫 번째 이벤트가 미기여(unattributed)로 처리될 수 있습니다.
createTrackingLink
함수를 통해 트래킹 링크를 생성할 수 있습니다. 트래킹 링크란 유저가 발생시킨 터치포인트 데이터를 에어브릿지에 전달하기 위해 만드는 링크입니다.
트래킹 링크를 활용하여, 광고를 보거나 광고를 클릭한 유저를 원하는 목적지로 이동시킬 수 있습니다. 에어브릿지 대시보드에서는 트래킹 링크로 수집한 터치포인트 데이터를 활용하여, 전환에 기여한 채널을 분석할 수 있습니다.
interface Airbridge {
createTrackingLink(
channel: string,
options: Record<string, boolean | number | string>,
onSuccess: (trackingLink: TrackingLink) => void
): void
createTrackingLink(
channel: string,
options: Record<string, boolean | number | string>,
onSuccess: (trackingLink: TrackingLink) => void,
onError: (error: Error) => void
): void
}
옵션 | 필수여부 | 타입 | 설명 |
---|---|---|---|
| 필수 |
| 트래킹 링크를 사용할 광고 채널 |
| 필수 |
| 트래킹 링크 생성 옵션 |
| 필수 |
| 성공 콜백 |
| 선택 |
| 실패 콜백 |
다음과 같은 파라미터를 통해 options
를 설정할 수 있습니다.
파라미터 | 타입 | 설명 |
---|---|---|
|
| 캠페인 이름 |
|
| 광고 그룹 |
|
| 광고 소재 |
|
| 광고 콘텐츠 |
|
| 검색 광고 키워드 |
|
| 하위 네트워크 혹은 제휴 매체사 등을 나타내는 아이디. |
|
| 하위 네트워크 또다른 하위 네트워크 아이디. |
|
| 하위 네트워크 또다른 하위 네트워크 아이디. |
|
| 하위 네트워크 또다른 하위 네트워크 아이디. |
|
| Deeplink URL |
|
| Deeplink 의 스탑오버 기능 활성화 여부 |
|
| App 미설치시 ios fallback |
|
| App 미설치시 android fallback |
|
| App 미설치시 desktop fallback |
|
| 애플 앱 스토어의 맞춤형 제품 페이지(Custom Product Page)의 ppid. |
|
| 구글 플레이 스토어의 맞춤 스토어 등록정보(Custom Store Listing) listing 값. |
|
| 트래킹 링크의 |
|
| 트래킹 링크의 |
|
| 트래킹 링크의 |
|
| 지정된 desktop의 Open Graph를 크롤링해서 사용합니다.
|
|
| Custom 채널의 트래킹 링크 생성시 축약된 링크 숏 아이디.
커스텀 도메인 설정을 해야 사용할 수 있습니다. |
|
| Re-engagement 파라미터.
|
createTrackingLink
함수로 생성된 트래킹 링크는 onSuccess
콜백을 통해 전달됩니다.
interface TrackingLink {
shortURL: string
qrcodeURL: string
}
Option | Type | Description |
---|---|---|
|
| Short URL of the tracking link |
|
| QR code URL of the tracking link |
airbridge.createTrackingLink(
'test_channel',
{
campaign: 'test_campaign',
deeplink_url: '<YOUR_SCHEME>://...',
fallback_ios: 'store',
fallback_android: 'store',
fallback_desktop: 'https://www.example.com/'
},
({ shortURL, qrcodeURL }) => {
// Handling created tracking-link
},
(error) => {
// Handling error
}
)
airbridge.createTrackingLink(
'test_channel',
{
campaign: 'test_campaign',
deeplink_url: '<YOUR_SCHEME>://...',
fallback_ios: 'https://www.example.com/',
fallback_android: 'https://www.example.com/',
fallback_desktop: 'https://www.example.com/'
},
({ shortURL, qrcodeURL }) => {
// Handling created tracking-link
},
(error) => {
// Handling error
}
)
airbridge.createTrackingLink(
'test_channel',
{
campaign: 'test_campaign',
fallback_ios: 'store',
fallback_android: 'store',
fallback_desktop: 'https://www.example.com/'
},
({ shortURL, qrcodeURL }) => {
// Handling created tracking-link
},
(error) => {
// Handling error
}
)
airbridge.createTrackingLink(
'test_channel',
{
campaign: 'test_campaign',
fallback_ios: 'https://www.example.com/',
fallback_android: 'https://www.example.com/',
fallback_desktop: 'https://www.example.com/'
},
({ shortURL, qrcodeURL }) => {
// Handling created tracking-link
},
(error) => {
// Handling error
}
)
collectMolocoCookieID를 true로 설정하면, 몰로코 웹 캠페인을 통해 발생한 이벤트의 쿠키 ID를 자동으로 수집하여 캠페인을 최적화합니다.
airbridge.init({
app: '<YOUR_APP_NAME>',
webToken: '<YOUR_WEB_TOKEN>',
// ...
collectMolocoCookieID: true,
})
도움이 되었나요?