어드밴티지+ 카탈로그 광고를 사용하면 크로스 디바이스 구매 의향에 따라 사용자에게 광고를 보여줄 수 있습니다. 모바일 앱과 웹사이트에서 사용자 의향의 시그널을 수집한 다음 이 데이터를 사용하여 타겟을 빌드하고 잠재 고객을 타게팅할 수 있습니다.
이 문서에서는 다음을 수행하는 방법을 설명합니다.
사용자 시그널을 수집하려면 앱 이벤트(모바일 앱의 경우) 또는 Meta 픽셀(웹사이트의 경우)을 사용합니다.
앱이 있고 데스크톱에서만 광고를 실행하는 경우에도 Facebook SDK를 설치해야 합니다. 이는 시그널을 수집하고 타겟 대상을 확장하는 데 도움이 됩니다.
iOS 및 Android용 Facebook SDK를 통해 다음 이벤트를 앱에 추가해야 합니다.
이벤트 | iOS 이벤트 | Android 이벤트 |
---|---|---|
검색 |
|
|
콘텐츠 조회 |
|
|
장바구니에 담기 |
|
|
구매 | // logPurchase를 통해 전송 |
|
모든 이벤트는 content_id
(또는 content_id
의 JSON 배열)를 포함해야 합니다.
Meta 픽셀과 달리 앱 이벤트에는 product_catalog_id
매개변수가 없습니다. 그러므로 아래에 설명된 external_event_sources
엔드포인트로 카탈로그와 앱을 연결해야 합니다.
iOS의 장바구니에 담기 이벤트:
[[FBSDKAppEvents shared] logEvent:FBSDKAppEventNameAddedToCart valueToSum:54.23 parameters:@{ FBSDKAppEventParameterNameCurrency : @"USD", FBSDKAppEventParameterNameContentType : @"product", FBSDKAppEventParameterNameContentID : @"123456789" } ];
수량 및 서로 다른 구매 품목 2개를 포함한 iOS의 구매 이벤트:
[[FBSDKAppEvents shared] logPurchase:21.97 currency:@"USD" parameters:@{ FBSDKAppEventParameterNameContent : @"[{\"id\":\"1234\",\"quantity\":2},{\"id\":\"5678\",\"quantity\":1}]", FBSDKAppEventParameterNameContentType : @"product" } ];
수량 및 구매 품목 2개를 포함한 Android의 구매 이벤트:
Bundle parameters = new Bundle(); parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD"); parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product"); parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT, "[{\"id\":\"1234\",\"quantity\":2},{\"id\":\"5678\",\"quantity\":1}]"); logger.logEvent( AppEventsConstants.EVENT_NAME_PURCHASED, 21.97, parameters );
구매 품목 2개를 포함한 Android의 구매 이벤트:
Bundle parameters = new Bundle(); parameters.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "USD"); parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "product"); parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, "[\"1234\",\"5678\"]"); logger.logEvent( AppEventsConstants.EVENT_NAME_PURCHASED, 21.97, parameters );
CONTENT_ID
또는 CONTENT
중 하나를 어드밴티지+ 카탈로그 광고와 사용하여 제품 ID를 보고할 수 있습니다. CONTENT
매개변수를 사용하면 제품에 대한 추가 정보를 제공할 수 있습니다.
모바일 측정 파트너(MMP)와 함께 어드밴티지+ 카탈로그 광고를 사용하려면 사용자가 앱을 사용할 때 별도의 필수 이벤트를 트리거해야 합니다. 추적해야 할 주요 인터랙션 포인트는 사용자가 제품을 검색하고, 제품을 보고, 장바구니에 담고 품목을 구매할 때입니다. MMP에서 다음 표준 어드밴티지+ 카탈로그 광고 이벤트에 상응하는 이벤트를 선택해야 합니다.
이름 | 설명 |
---|---|
| 사용자가 제품을 검색할 때 |
| 계정 센터 계정이 제품을 볼 때 |
| 사용자가 장바구니에 품목을 담을 때 |
| 계정 센터 계정이 하나 이상의 품목을 구매할 때 |
또한 유효한 어드밴티지+ 카탈로그 광고 이벤트로 등록되려면 각 이벤트에 추가 매개변수 2개가 필요합니다. 이 두 매개변수는 사용자가 보고 있거나 장바구니에 담았거나 구매한 품목의 ID와 해당 ID가 제품 또는 제품 그룹 ID인지 여부를 나타냅니다. 사용 가능한 추가 매개변수는 다음과 같습니다.
이름 | 설명 |
---|---|
문자열 |
|
문자열 |
|
문자열 | 선택 사항.
자세한 내용은 '적절한 |
문자열 | 선택 사항. |
문자열 | 선택 사항. |
참고: 구매가 이루어지면 _valueToSum
및 fb_currency
매개변수를 전송하는 것이 좋습니다.
해당하는 경우 다음 이벤트를 웹사이트에 추가해야 합니다.
Search
ViewCategory
ViewContent
AddToCart
Purchase
이러한 이벤트는 다음 데이터 매개변수와 함께 전송해야 합니다.
이름 | 설명 |
---|---|
문자열 또는 string[] |
|
object[] |
|
문자열 | 선택 사항.
자세한 내용은 '적절한 |
문자열 | 선택 사항. |
Search
표준 이벤트의 예시는 아래와 같습니다. 상위 검색 결과의 품목 5~10개를 content_ids
에 제공하는 것이 좋습니다.
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); fbq('track', 'Search', { search_string: 'leather sandals', content_ids: ['1234', '2424', '1318', '6832'], // top 5-10 search results content_type: 'product' }); </script> <!-- End Facebook Pixel Code -->
ViewCategory
이벤트의 예시는 아래와 같습니다. 상위 결과의 품목 5~10개를 content_ids
에 제공하는 것이 좋습니다. 참고로 ViewCategory
가 표준 이벤트가 아니므로 trackCustom
함수를 사용합니다.
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); fbq('trackCustom', 'ViewCategory', { content_name: 'Really Fast Running Shoes', content_category: 'Apparel & Accessories > Shoes', content_ids: ['1234', '2424', '1318', '6832'], // top 5-10 results content_type: 'product' }); </script> <!-- End Facebook Pixel Code -->
ViewContent
표준 이벤트의 예시는 아래와 같습니다. 픽셀 설정에 대한 자세한 내용은 Meta 픽셀을 참조하세요.
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['1234'], content_type: 'product', value: 0.50, currency: 'USD' }); </script> <!-- End Facebook Pixel Code -->
AddToCart
표준 이벤트는 이커머스 플랫폼이 장바구니에 품목을 담는 방식에 따라 달라집니다. 이 작업을 동적으로 수행할 경우 버튼 클릭 시 트리거되도록 onclick
이벤트 핸들러에 배치되어야 합니다. 별도 페이지를 읽어들이는 경우 픽셀 이벤트를 평소처럼 실행할 수 있습니다.
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); // If you have a separate add to cart page that is loaded. fbq('track', 'AddToCart', { content_ids: ['1234', '1853', '9386'], content_type: 'product', value: 3.50, currency: 'USD' }); </script> <!-- End Facebook Pixel Code -->
버튼 클릭 시 이벤트를 실행해야 하고 읽어들이는 별도의 페이지가 없는 경우:
<!-- The below method uses jQuery, but that is not required --> <button id="addToCartButton">Add To Cart</button> <!-- Add event to the button's click handler --> <script type="text/javascript"> $( '#addToCartButton' ).click(function() { fbq('track', 'AddToCart', { content_ids: ['1234'], content_type: 'product', value: 2.99, currency: 'USD' }); }); </script>
Purchase
표준 이벤트(수량이 포함된 품목 2개 포함):
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); fbq('track', 'Purchase', { contents: [ {'id': '1234', 'quantity': 2}, {'id': '4642', 'quantity': 1} ], content_type: 'product', value: 21.97, currency: 'USD' }); </script> <!-- End Facebook Pixel Code -->
Purchase
표준 이벤트(품목 2개 포함):
<!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); // Insert Your Facebook Pixel ID below. fbq('init', '<FB_PIXEL_ID>'); fbq('track', 'PageView'); fbq('track', 'Purchase', { content_ids: ['1234', '4642'], content_type: 'product', value: 21.97, currency: 'USD' }); </script> <!-- End Facebook Pixel Code -->
content_type
선택참고:fb_content_type
은 모바일용 콘텐츠 유형입니다.
페이지가 특정 SKU(특정 크기, 색상 등)에 관한 것이라면 content_type
에 product
를 사용하고 content_ids
에 제품 ID(즉, 제품 피드의 id
열)를 전달합니다. 사람들이 특정 제품을 구매하기 때문에 모든 AddToCart
및 Purchase
이벤트는 content_type=product
를 사용해야 합니다. 사람들은 크기, 색상이 정해지지 않은 아무 셔츠나 구매하는 것이 아니라 특정 치수와 색상의 셔츠를 구매합니다.
페이지가 크기, 색상 등은 다르지만 동일한 제품 그룹에 속하는 관련 제품 그룹에 관한 것이라면 product_group
을 사용하고 content_ids
에 제품 그룹 ID(즉, 제품 피드의 item_group_id
열)를 전달합니다. 일반적인 사용 사례로는 사용자가 아직 크기를 선택하지 않은 ViewContent
페이지가 있습니다. product_group
을 AddToCart
나 Purchase
와 함께 사용하지 마세요.
content_type
이 content_ids
또는 contents
매개변수에 포함된 ID 유형과 일치하는 것이 중요합니다.
특정 제품 ID(content_type=product
)를 전달하면 사용자가 어떤 에디션(크기, 색상 등)에 관심이 있는지 알 수 있으므로 Meta가 더 관련성 있는 제품을 추천할 수 있습니다. content_type=product_group
이라도 항상 (제품 그룹이 아니라) 제품을 표시합니다.
content_type
을 제공하지 않는 경우 Meta가 유형과 관계없이 동일한 ID가 있는 모든 항목에 이벤트를 매칭합니다. content_type
을 보내면 이벤트를 매칭하고 싶은 특정 ID를 더욱 세밀하게 관리할 수 있으므로 이를 권장합니다.
이벤트 소스와 각 제품 카탈로그를 연결해서 Facebook이 이 데이터를 가져오고 광고에 올바른 제품을 표시하도록 해야 합니다. 이렇게 하려면 비즈니스 관리자의 카탈로그 페이지를 방문하여 이벤트 소스 연결 버튼을 클릭하면 됩니다. 어드밴티지+ 카탈로그 광고 이벤트를 수신할 앱과 픽셀을 선택하세요.
또는 외부 이벤트 소스 리스트를 UTF-8로 인코딩된 쿼리 문자열 매개변수로 포함해 POST
API를 호출할 수 있습니다.
use FacebookAds\Object\ProductCatalog;
$product_catalog = new ProductCatalog(<PRODUCT_CATALOG_ID>);
$product_catalog->createExternalEventSource(array(), array(
'external_event_sources' => array(
<PIXEL_ID>,
<APP_ID>,
),
));
from facebookads.adobjects.productcatalog import ProductCatalog
product_catalog = ProductCatalog(<PRODUCT_CATALOG_ID>)
product_catalog.add_external_event_sources([
<PIXEL_ID>,
<APP_ID>,
])
curl \
-F 'external_event_sources=["<PIXEL_ID>","<APP_ID>"]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<PRODUCT_CATALOG_ID>/external_event_sources
참고: 카탈로그, 픽셀, 앱 및 비즈니스에 대한 권한이 필요합니다.
이름 | 설명 |
---|---|
| 필수 항목. |
다음 단계에서는 모바일 앱과 웹사이트 활동을 기반으로 제품 타겟을 빌드해야 합니다. 사용할 이벤트를 선택하고 제품 타겟을 사용하여 광고를 타게팅할 수 있습니다.
표준 앱 이벤트의 경우 타겟은 다음 광고 픽셀 이벤트 이름으로 집계됩니다.
Search
ViewContent
AddToCart
Purchase
Android 및 iOS 사용자를 포함하더라도 타겟 규칙에 위의 이벤트 이름을 사용하세요.
/act_{ad-account-id}/product_audiences
엔드포인트로 POST
API 호출을 보내서 제품 타겟을 만듭니다.
https://graph.facebook.com/v21.0
/act_AD_ACCOUNT_ID/product_audiences
이름 | 설명 |
---|---|
문자열 | 필수 항목. |
문자열 | 선택 사항. |
숫자 문자열 | 필수 항목. 이 타겟으로 타게팅할 제품 세트. |
JSON 개체 | 필수 항목. |
정수 | 필수 항목. |
object[] | 필수 항목. |
JSON 개체 | 선택 사항. |
정수 | 필수 항목(제외를 지정하는 경우). |
object[] | 필수 항목(제외를 지정하는 경우). |
각 규칙은 연산자 eq
를 포함하는 event
를 최상위 규칙으로 포함하거나 최상위 and
규칙의 일부로 포함해야 합니다.
포함과 제외에 동일한 event
를 사용했다면 추가 매개변수 검사도 정확히 똑같아야 합니다.
제품을 보거나 장바구니에 담았지만 구매하지 않은 사용자를 타게팅하는 타겟을 만들 경우의 예시는 다음과 같습니다.
curl -X POST \
-F 'name="Test Product Audience"' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'inclusions=[
{
"retention_seconds": 86400,
"rule": {
"event": {
"eq": "AddToCart"
}
}
},
{
"retention_seconds": 72000,
"rule": {
"event": {
"eq": "ViewContent"
}
}
}
]' \
-F 'exclusions=[
{
"retention_seconds": 172800,
"rule": {
"event": {
"eq": "Purchase"
}
}
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
iPhone으로 웹에서 제품을 보았지만 어떤 기기에서도 제품을 구매하지 않은 사용자를 타게팅하려면 다음과 같이 타겟을 만듭니다.
여기에서는 Meta 픽셀에 userAgent
매개변수를 포함하는 것으로 가정합니다.
curl -X POST \
-F 'name="Test Iphone Product Audience"' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'inclusions=[
{
"retention_seconds": 86400,
"rule": {
"and": [
{
"event": {
"eq": "AddToCart"
}
},
{
"userAgent": {
"i_contains": "iPhone"
}
}
]
}
}
]' \
-F 'exclusions=[
{
"retention_seconds": 172800,
"rule": {
"event": {
"eq": "Purchase"
}
}
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/product_audiences
제품 타겟을 만들고 나면 맞춤 타겟 API를 사용하여 이를 가져올 수 있습니다. data_source
매개변수를 이용하여 타겟을 만들 때 사용한 원래의 매개변수를 가져올 수 있습니다.
제품 타겟은 특정한 유형의 맞춤 타겟으로, 제품 이벤트에서 동적으로 생성됩니다. act_{ad-account-id}/product_audiences
엔드포인트는 이러한 타겟을 생성하는 특수한 POST
엔드포인트입니다.
맞춤 타겟을 가져오는 예시는 다음과 같습니다.
curl -X GET \
-d 'fields="data_source,subtype"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/customaudiences
특정 제품 타겟을 가져오는 예시는 다음과 같습니다.
use FacebookAds\Object\ProductAudience;
$product_audience = new ProductAudience(<PRODUCT_AUDIENCE_ID>);
$product_audience->read();
from facebookads.objects import ProductAudience
product_audience = ProductAudience(<PRODUCT_AUDIENCE_ID>)
product_audience.remote_read()
CustomAudience customAudience2 = new CustomAudience(<PRODUCT_AUDIENCE_ID>, context).get()
.execute();
curl -G \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<PRODUCT_AUDIENCE_ID>