Track Commerce, Content, Lifecycle and Custom Events
Overview
Branch SDK에서는 기본적으로 클릭, 오픈, 설치, 재설치 및 임프레션을 자동으로 추적합니다(기본 제공).
마찬가지로 Branch Web SDK에서는 페이지 뷰, 웹 세션 시작, 클릭 및 임프레션을 자동으로 추적합니다(기본 제공).
또한 Branch는 이벤트를 의미에 따라 여러 카테고리로 분류하여 추적 및 저장하고 있습니다. 예를 들어, 고객 구매와 관련된 모든 이벤트는 "commerce event" 카테고리로 분류되고 앱내 콘텐츠와 상호 작용하는 유저 행위와 관련된 모든 이벤트는 "content_event"카테고리로 분류됩니다.
다음은 가장 보편적으로 사용되는 이벤트를 Branch SDK를 통해 추적하는 방법을 안내하고 있습니다.
Events for Optimization
When Universal Ads is enabled, tracking these events will postback to the attributed Ad Network. For example, if you track the purchase event through Branch, this will automatically map to Facebook's Purchase event if the user is attributed to Facebook.
These events will also have analytics like counts and cohorts, so you can understand their performance even when using SafeTrack Attribution.
사용 가능한 이벤트
Event Tracking Disclaimer
Branch may implement caps/overages on the number of events you are tracking. We recommend that you only track events that are useful for your analytics and attribution needs. Additionally, this will avoid unnecessary network calls that your app will make leading to better app performance.
Facebook Ads Support
If you are sending any event Server to Server to Branch and are running Facebook campaigns on iOS, it is required to send the OS version for Branch to provide attribution on Facebook ads.
Commerce Events
Event Name | iOS | Android | Web/API |
---|---|---|---|
Add To Cart | BranchStandardEventAddToCart | BRANCH_STANDARD_EVENT.ADD_TO_CART | ADD_TO_CART |
Add To Wishlist | BranchStandardEventAddToWishlist | BRANCH_STANDARD_EVENT.ADD_TO_WISHLIST | ADD_TO_WISHLIST |
View Cart | BranchStandardEventViewCart | BRANCH_STANDARD_EVENT.VIEW_CART | VIEW_CART |
Initiate Purchase | BranchStandardEventInitiatePurchase | BRANCH_STANDARD_EVENT.INITIATE_PURCHASE | INITIATE_PURCHASE |
Add Payment Info | BranchStandardEventAddPaymentInfo | BRANCH_STANDARD_EVENT.ADD_PAYMENT_INFO | ADD_PAYMENT_INFO |
Click Ad | BranchStandardEventClickAd | BRANCH_STANDARD_EVENT.CLICK_AD | CLICK_AD |
Purchase | BranchStandardEventPurchase | BRANCH_STANDARD_EVENT.PURCHASE | PURCHASE |
Reserve | BranchStandardEventReserve | BRANCH_STANDARD_EVENT.RESERVE | RESERVE |
Spend Credits | BranchStandardEventSpendCredits | BRANCH_STANDARD_EVENT.SPEND_CREDITS | SPEND_CREDITS |
View Ad | BranchStandardEventViewAd | BRANCH_STANDARD_EVENT.VIEW_AD | VIEW_AD |
Content Events
Event Name | iOS | Android | Web/API |
---|---|---|---|
Search | BranchStandardEventSearch | BRANCH_STANDARD_EVENT.SEARCH | SEARCH |
View Item | BranchStandardEventViewItem | BRANCH_STANDARD_EVENT.VIEW_ITEM | VIEW_ITEM |
View Items | BranchStandardEventViewItems | BRANCH_STANDARD_EVENT.VIEW_ITEMS | VIEW_ITEMS |
Rate | BranchStandardEventRate | BRANCH_STANDARD_EVENT.RATE | RATE |
Share | BranchStandardEventShare | BRANCH_STANDARD_EVENT.SHARE | SHARE |
Initiate Stream | BranchStandardEventInitiateStream | BRANCH_STANDARD_EVENT.INITIATE_STREAM | INITIATE_STREAM |
Complete Stream | BranchStandardEventCompleteStream | BRANCH_STANDARD_EVENT.COMPLETE_STREAM | COMPLETE_STREAM |
Lifecycle Events
Event Name | iOS | Android | Web/API |
---|---|---|---|
Complete Registration | BranchStandardEventCompleteRegistration | BRANCH_STANDARD_EVENT.COMPLETE_REGISTRATION | COMPLETE_REGISTRATION |
Complete Tutorial | BranchStandardEventCompleteTutorial | BRANCH_STANDARD_EVENT.COMPLETE_TUTORIAL | COMPLETE_TUTORIAL |
Achieve Level | BranchStandardEventAchieveLevel | BRANCH_STANDARD_EVENT.ACHIEVE_LEVEL | ACHIEVE_LEVEL |
Unlock Achievement | BranchStandardEventUnlockAchievement | BRANCH_STANDARD_EVENT.UNLOCK_ACHIEVEMENT | UNLOCK_ACHIEVEMENT |
Invite | BranchStandardEventInvite | BRANCH_STANDARD_EVENT.INVITE | INVITE |
Login | BranchStandardEventLogin | BRANCH_STANDARD_EVENT.LOGIN | LOGIN |
Start Trial | BranchStandardEventStartTrial | BRANCH_STANDARD_EVENT.START_TRIAL | START_TRIAL |
Subscribe | BranchStandardEventSubscribe | BRANCH_STANDARD_EVENT.SUBSCRIBE | SUBSCRIBE |
Opt In | Tracked via handleATTAuthorizationStatus() | Not Applicable | Not Applicable |
Opt Out | Tracked via handleATTAuthorizationStatus() | Not Applicable | Not Applicable |
Custom Events
Custom Events can be tracked if the event does not fall within one of the categories above.
Note: Custom data in the Branch dashboard is viewable in Liveview and Exports.
Commerce Event 추적
Commerce Event는 사용자가 제품과 상호 작용하여 최종적으로 구매전환할 때까지 발생하는 일련의 행위들과 관련이 있습니다. 예를 들면 지불정보 추가, 구매 등이 있습니다. Branch Universal Ads(광고 어트리뷰션)를 활성화시킬 경우, 이러한 이벤트는 자동으로 특정 광고 파트너에 맵핑됩니다. 먼저 추적중인 이벤트와 연관된 각 제품에 해당되는 BranchUniversalLink를 생성하기 바랍니다.
그 다음 BranchUniversalObject를 추적할 이벤트에 추가하고 이벤트명은 사전 정의된 문자열 상수로 설정하기 바랍니다.예를 들면 아래 코드는 유저가 장바구니에 추가할 때 추적하는 것이지만 해당 이벤트명 관련상수를 다른 상수로 바꾸면 다른 이벤트를 추적할 수 있습니다.
Currency and Exchange Rates
If you track commerce events without a currency, we assume they are USD. If you track commerce events with a currency other than USD, we will convert the
revenue
specified to USD using a recent exchange rate.This allows you to easily visualize revenue on the Dashboard across many countries and currencies because all units are USD. The exchange rate is pulled from openexchangerates.org regularly and is generally within an hour of the real-time exchange rate. If you view raw Branch events via either Webhooks or Exports, you can see the exchange rate used.
HTTP API - Commerce Endpoint
POST /v2/event/standard
Content-Type: application/json
파라미터
Note about required identifiers. You must send up (in user_data):
browser_fingerprint_id OR
os=iOS AND (idfa OR idfv) OR
os=Android AND (android_id or aaid)
Example - Commerce
// Create a BranchUniversalObject with your content data:
let branchUniversalObject = BranchUniversalObject.init()
// ...add data to the branchUniversalObject as needed...
branchUniversalObject.canonicalIdentifier = "item/12345"
branchUniversalObject.canonicalUrl = "https://branch.io/item/12345"
branchUniversalObject.title = "My Item Title"
branchUniversalObject.contentMetadata.contentSchema = .commerceProduct
branchUniversalObject.contentMetadata.quantity = 1
branchUniversalObject.contentMetadata.price = 23.20
branchUniversalObject.contentMetadata.currency = .USD
branchUniversalObject.contentMetadata.sku = "1994320302"
branchUniversalObject.contentMetadata.productName = "my_product_name1"
branchUniversalObject.contentMetadata.productBrand = "my_prod_Brand1"
branchUniversalObject.contentMetadata.productCategory = .apparel
branchUniversalObject.contentMetadata.productVariant = "XL"
branchUniversalObject.contentMetadata.condition = .new
branchUniversalObject.contentMetadata.customMetadata = [
"custom_key1": "custom_value1",
"custom_key2": "custom_value2"
]
// Create a BranchEvent:
let event = BranchEvent.standardEvent(.purchase)
// Add the BranchUniversalObject with the content (do not add an empty branchUniversalObject):
event.contentItems = [ branchUniversalObject ]
// Add relevant event data:
event.alias = "my custom alias"
event.transactionID = "12344555"
event.currency = .USD
event.revenue = 1.5
event.shipping = 10.2
event.tax = 12.3
event.coupon = "test_coupon"
event.affiliation = "test_affiliation"
event.eventDescription = "Event_description"
event.searchQuery = "item 123"
event.customData = [
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
]
event.logEvent() // Log the event.
// Create a BranchUniversalObject with your content data:
BranchUniversalObject *branchUniversalObject = [BranchUniversalObject new];
// ...add data to the branchUniversalObject as needed...
branchUniversalObject.canonicalIdentifier = @"item/12345";
branchUniversalObject.canonicalUrl = @"https://branch.io/item/12345";
branchUniversalObject.title = @"My Item Title";
branchUniversalObject.contentMetadata.contentSchema = BranchContentSchemaCommerceProduct;
branchUniversalObject.contentMetadata.quantity = 1;
branchUniversalObject.contentMetadata.price = [[NSDecimalNumber alloc] initWithDouble:23.20];
branchUniversalObject.contentMetadata.currency = BNCCurrencyUSD;
branchUniversalObject.contentMetadata.sku = @"1994320302";
branchUniversalObject.contentMetadata.productName = @"my_product_name1";
branchUniversalObject.contentMetadata.productBrand = @"my_prod_Brand1";
branchUniversalObject.contentMetadata.productCategory = BNCProductCategoryApparel;
branchUniversalObject.contentMetadata.productVariant = @"XL";
branchUniversalObject.contentMetadata.condition = @"NEW";
branchUniversalObject.contentMetadata.customMetadata = (NSMutableDictionary*) @{
@"content_custom_key1": @"content_custom_value1",
@"content_custom_key2": @"content_custom_value2"
};
// Create an event and add the BranchUniversalObject to it.
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventAddToCart];
// Add the BranchUniversalObjects with the content (do not add an empty branchUniversalObject):
event.contentItems = (id) @[ branchUniversalObject ];
// Add relevant event data:
event.alias = @"my custom alias";
event.transactionID = @"12344555";
event.currency = BNCCurrencyUSD;
event.revenue = [NSDecimalNumber decimalNumberWithString:@"1.5"];
event.shipping = [NSDecimalNumber decimalNumberWithString:@"10.2"];
event.tax = [NSDecimalNumber decimalNumberWithString:@"12.3"];
event.coupon = @"test_coupon";
event.affiliation = @"test_affiliation";
event.eventDescription = @"Event_description";
event.searchQuery = @"item 123";
event.customData = (NSMutableDictionary*) @{
@"Custom_Event_Property_Key1": @"Custom_Event_Property_val1",
@"Custom_Event_Property_Key2": @"Custom_Event_Property_val2"
};
[event logEvent];
BranchUniversalObject buo = new BranchUniversalObject()
.setCanonicalIdentifier("myprod/1234")
.setCanonicalUrl("https://test_canonical_url")
.setTitle("test_title")
.setContentMetadata(
new ContentMetadata()
.addCustomMetadata("custom_metadata_key1", "custom_metadata_val1")
.addCustomMetadata("custom_metadata_key1", "custom_metadata_val1")
.addImageCaptions("image_caption_1", "image_caption2", "image_caption3")
.setAddress("Street_Name", "test city", "test_state", "test_country", "test_postal_code")
.setRating(5.2, 6.0, 5)
.setLocation(-151.67, -124.0)
.setPrice(10.0, CurrencyType.USD)
.setProductBrand("test_prod_brand")
.setProductCategory(ProductCategory.APPAREL_AND_ACCESSORIES)
.setProductName("test_prod_name")
.setProductCondition(ContentMetadata.CONDITION.EXCELLENT)
.setProductVariant("test_prod_variant")
.setQuantity(1.5)
.setSku("test_sku")
.setContentSchema(BranchContentSchema.COMMERCE_PRODUCT))
.addKeyWord("keyword1")
.addKeyWord("keyword2");
// Do not add an empty branchUniversalObject to the BranchEvent
new BranchEvent(BRANCH_STANDARD_EVENT.ADD_TO_CART)
.setAffiliation("test_affiliation")
.setCustomerEventAlias("my_custom_alias")
.setCoupon("Coupon Code")
.setCurrency(CurrencyType.USD)
.setDescription("Customer added item to cart")
.setShipping(0.0)
.setTax(9.75)
.setRevenue(1.5)
.setSearchQuery("Test Search query")
.addCustomDataProperty("Custom_Event_Property_Key1", "Custom_Event_Property_val1")
.addCustomDataProperty("Custom_Event_Property_Key2", "Custom_Event_Property_val2")
.addContentItems(buo)
.logEvent(context);
val buo = BranchUniversalObject()
.setCanonicalIdentifier("myprod/1234")
.setCanonicalUrl("https://test_canonical_url")
.setTitle("test_title")
.setContentMetadata(
ContentMetadata()
.addCustomMetadata("custom_metadata_key1", "custom_metadata_val1")
.addCustomMetadata("custom_metadata_key1", "custom_metadata_val1")
.addImageCaptions("image_caption_1", "image_caption2", "image_caption3")
.setAddress("Street_Name", "test city", "test_state", "test_country", "test_postal_code")
.setRating(5.2, 6.0, 5)
.setLocation(-151.67, -124.0)
.setPrice(10.0, CurrencyType.USD)
.setProductBrand("test_prod_brand")
.setProductCategory(ProductCategory.APPAREL_AND_ACCESSORIES)
.setProductName("test_prod_name")
.setProductCondition(ContentMetadata.CONDITION.EXCELLENT)
.setProductVariant("test_prod_variant")
.setQuantity(1.5)
.setSku("test_sku")
.setContentSchema(BranchContentSchema.COMMERCE_PRODUCT)
)
.addKeyWord("keyword1")
.addKeyWord("keyword2")
// Do not add an empty branchUniversalObject to the BranchEvent
BranchEvent(BRANCH_STANDARD_EVENT.ADD_TO_CART)
.setAffiliation("test_affiliation")
.setCustomerEventAlias("my_custom_alias")
.setCoupon("Coupon Code")
.setCurrency(CurrencyType.USD)
.setDescription("Customer added item to cart")
.setShipping(0.0)
.setTax(9.75)
.setRevenue(1.5)
.setSearchQuery("Test Search query")
.addCustomDataProperty("Custom_Event_Property_Key1", "Custom_Event_Property_val1")
.addCustomDataProperty("Custom_Event_Property_Key2", "Custom_Event_Property_val2")
.addContentItems(buo)
.logEvent(applicationContext)
let buo = await branch.createBranchUniversalObject(
"item/12345",
{
canonicalUrl: "https://branch.io/item/12345",
title: "My Item Title",
contentMetadata: {
quantity: 1,
price: 23.20,
sku: "1994320302",
productName: "my_product_name1",
productBrand: "my_prod_Brand1",
customMetadata: {
custom_key1: "custom_value1",
custom_key2: "custom_value2"
}
}
}
)
let params = {
transaction_id: "tras_Id_1232343434",
currency: "USD",
revenue: 180.2,
shipping: 10.5,
tax: 13.5,
coupon: "promo-1234",
affiliation: "high_fi",
description: "Preferred purchase",
purchase_loc: "Palo Alto",
store_pickup: "unavailable",
customData: {
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
}
}
let event = new BranchEvent(BranchEvent.Purchase, [buo], params)
event.logEvent()
BranchEvent event = BranchEvent.standardEvent(BranchStandardEvent.PURCHASE);
event.transactionID = "12344555";
event.currency = BranchCurrencyType.USD;
event.revenue = 1.5;
event.shipping = 10.2;
event.tax = 12.3;
event.coupon = "test_coupon";
event.affiliation = "test_affiliation";
event.eventDescription = "Event_description";
event.searchQuery = "item 123";
event.addCustomData('Custom_Event_Property_Key1', 'Custom_Event_Property_val1');
event.addCustomData('Custom_Event_Property_Key2', 'Custom_Event_Property_val2');
FlutterBranchSdk.trackContent(buo: [buo], branchEvent: event);
var event_and_custom_data = {
"transaction_id": "tras_Id_1232343434",
"currency": "USD",
"revenue": 180.2,
"shipping": 10.5,
"tax": 13.5,
"coupon": "promo-1234",
"affiliation": "high_fi",
"description": "Preferred purchase",
"purchase_loc": "Palo Alto",
"store_pickup": "unavailable"
};
var content_items = [
{
"$content_schema": "COMMERCE_PRODUCT",
"$og_title": "Nike Shoe",
"$og_description": "Start loving your steps",
"$og_image_url": "http://example.com/img1.jpg",
"$canonical_identifier": "nike/1234",
"$publicly_indexable": false,
"$price": 101.2,
"$locally_indexable": true,
"$quantity": 1,
"$sku": "1101123445",
"$product_name": "Runner",
"$product_brand": "Nike",
"$product_category": "SPORTING_GOODS",
"$product_variant": "XL",
"$rating_average": 4.2,
"$rating_count": 5,
"$rating_max": 2.2,
"$creation_timestamp": 1499892854966,
"$exp_date": 1499892854966,
"$keywords": [ "sneakers", "shoes" ],
"$address_street": "230 South LaSalle Street",
"$address_city": "Chicago",
"$address_region": "IL",
"$address_country": "US",
"$address_postal_code": "60604",
"$latitude": 12.07,
"$longitude": -97.5,
"$image_captions": [ "my_img_caption1", "my_img_caption_2" ],
"$condition": "NEW",
"$custom_fields": {"foo1":"bar1","foo2":"bar2"}
},
{
"$og_title": "Nike Woolen Sox",
"$canonical_identifier": "nike/5324",
"$og_description": "Fine combed woolen sox for those who love your foot",
"$publicly_indexable": false,
"$price": 80.2,
"$locally_indexable": true,
"$quantity": 5,
"$sku": "110112467",
"$product_name": "Woolen Sox",
"$product_brand": "Nike",
"$product_category": "Apparel & Accessories",
"$product_variant": "Xl",
"$rating_average": 3.3,
"$rating_count": 5,
"$rating_max": 2.8,
"$creation_timestamp": 1499892854966
}];
var customer_event_alias = "my custom alias";
branch.logEvent(
"PURCHASE",
event_and_custom_data,
content_items,
customer_event_alias,
function(err) { console.log(err); }
);
// Create a BranchUniversalObject with your content data:
let branchUniversalObject = BranchUniversalObject.init()
// ...add data to the branchUniversalObject as needed...
branchUniversalObject.canonicalIdentifier = "item/12345"
branchUniversalObject.canonicalUrl = "https://branch.io/item/12345"
branchUniversalObject.title = "My Item Title"
branchUniversalObject.contentMetadata.contentSchema = .commerceProduct
branchUniversalObject.contentMetadata.quantity = 1
branchUniversalObject.contentMetadata.price = 23.20
branchUniversalObject.contentMetadata.currency = .USD
branchUniversalObject.contentMetadata.sku = "1994320302"
branchUniversalObject.contentMetadata.productName = "my_product_name1"
branchUniversalObject.contentMetadata.productBrand = "my_prod_Brand1"
branchUniversalObject.contentMetadata.productCategory = .apparel
branchUniversalObject.contentMetadata.productVariant = "XL"
branchUniversalObject.contentMetadata.condition = .new
branchUniversalObject.contentMetadata.customMetadata = [
"custom_key1": "custom_value1",
"custom_key2": "custom_value2"
]
// Create a BranchEvent:
let event = BranchEvent.standardEvent(.purchase)
// Add the BranchUniversalObject with the content (do not add an empty branchUniversalObject):
event.contentItems = [ branchUniversalObject ]
// Add relevant event data:
event.transactionID = "12344555"
event.currency = .USD
event.revenue = 1.5
event.shipping = 10.2
event.tax = 12.3
event.coupon = "test_coupon"
event.affiliation = "test_affiliation"
event.eventDescription = "Event_description"
event.searchQuery = "item 123"
event.customData = [
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
]
// The log method is on the Branch singleton instead of the event object
Branch.sharedInstance.logEvent(event) { (error) in
// log error here
}
// Create a BranchUniversalObject with your content data:
BranchUniversalObject *branchUniversalObject = [BranchUniversalObject new];
// ...add data to the branchUniversalObject as needed...
branchUniversalObject.canonicalIdentifier = @"item/12345";
branchUniversalObject.canonicalUrl = @"https://branch.io/item/12345";
branchUniversalObject.title = @"My Item Title";
branchUniversalObject.contentMetadata.contentSchema = BranchContentSchemaCommerceProduct;
branchUniversalObject.contentMetadata.quantity = 1.0;
branchUniversalObject.contentMetadata.price = [NSDecimalNumber decimalNumberWithString:@"23.20"];
branchUniversalObject.contentMetadata.currency = BNCCurrencyUSD;
branchUniversalObject.contentMetadata.sku = @"1994320302";
branchUniversalObject.contentMetadata.productName = @"my_product_name1";
branchUniversalObject.contentMetadata.productBrand = @"my_prod_Brand1";
branchUniversalObject.contentMetadata.productCategory = BNCProductCategoryApparel;
branchUniversalObject.contentMetadata.productVariant = @"XL";
branchUniversalObject.contentMetadata.condition = @"NEW";
branchUniversalObject.contentMetadata.customMetadata = (NSMutableDictionary*) @{
@"content_custom_key1": @"content_custom_value1",
@"content_custom_key2": @"content_custom_value2"
};
// Create an event and add the BranchUniversalObject to it.
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventAddToCart];
// Add the BranchUniversalObjects with the content (do not add an empty branchUniversalObject):
event.contentItems = (id) @[ branchUniversalObject ];
// Add relevant event data:
event.transactionID = @"12344555";
event.currency = BNCCurrencyUSD;
event.revenue = [NSDecimalNumber decimalNumberWithString:@"1.5"];
event.shipping = [NSDecimalNumber decimalNumberWithString:@"10.2"];
event.tax = [NSDecimalNumber decimalNumberWithString:@"12.3"];
event.coupon = @"test_coupon";
event.affiliation = @"test_affiliation";
event.eventDescription = @"Event_description";
event.searchQuery = @"item 123";
event.customData = (NSMutableDictionary*) @{
@"Custom_Event_Property_Key1": @"Custom_Event_Property_val1",
@"Custom_Event_Property_Key2": @"Custom_Event_Property_val2"
};
[[Branch sharedInstance] logEvent:event completion:^(NSError * _Nullable error) {
NSLog(@"Test Standard Event: %@", error);
}];
curl -vvv -d '{
"name": "PURCHASE",
"customer_event_alias": "my custom alias",
"user_data": {
"advertising_ids": {
"oaid": "02ab41d3-7886-4f29-a606-fba4372e9fdc"
},
"os": "Android",
"os_version": "25",
"environment": "FULL_APP",
"aaid": "abcdabcd-0123-0123-00f0-000000000000",
"android_id": "a12300000000",
"limit_ad_tracking": false,
"developer_identity": "user123",
"country": "US",
"language": "en",
"ip": "192.168.1.1",
"local_ip": "192.168.1.2",
"brand": "LGE",
"app_version": "1.0.0",
"model": "Nexus 5X",
"screen_dpi": 420,
"screen_height": 1794,
"screen_width": 1080
},
"custom_data": {
"purchase_loc": "Palo Alto",
"store_pickup": "unavailable"
},
"event_data": {
"transaction_id": "trans_Id_1232343434",
"currency": "USD",
"revenue": 180.2,
"shipping": 10.5,
"tax": 13.5,
"coupon": "promo-1234",
"affiliation": "high_fi",
"description": "Preferred purchase",
"custom_param_1": "Parameter 1",
"custom_param_2": "Parameter 2",
"custom_param_3": "Parameter 3"
},
"content_items": [
{
"$content_schema": "COMMERCE_PRODUCT",
"$og_title": "Nike Shoe",
"$og_description": "Start loving your steps",
"$og_image_url": "http://example.com/img1.jpg",
"$canonical_identifier": "nike/1234",
"$publicly_indexable": false,
"$price": 101.2,
"$locally_indexable": true,
"$quantity": 1,
"$sku": "1101123445",
"$product_name": "Runner",
"$product_brand": "Nike",
"$product_category": "Sporting Goods",
"$product_variant": "XL",
"$rating_average": 4.2,
"$rating_count": 5,
"$rating_max": 2.2,
"$creation_timestamp": 1499892854966,
"$exp_date": 1499892854966,
"$keywords": [
"sneakers",
"shoes"
],
"$address_street": "230 South LaSalle Street",
"$address_city": "Chicago",
"$address_region": "IL",
"$address_country": "US",
"$address_postal_code": "60604",
"$latitude": 12.07,
"$longitude": -97.5,
"$image_captions": [
"my_img_caption1",
"my_img_caption_2"
],
"$condition": "NEW",
"$custom_fields": "{\"foo1\":\"bar1\",\"foo2\":\"bar2\"}"
},
{
"$og_title": "Nike Woolen Sox",
"$canonical_identifier": "nike/5324",
"$og_description": "Fine combed woolen sox for those who love your foot",
"$publicly_indexable": false,
"$price": 80.2,
"$locally_indexable": true,
"$quantity": 5,
"$sku": "110112467",
"$product_name": "Woolen Sox",
"$product_brand": "Nike",
"$product_category": "Apparel & Accessories",
"$product_variant": "Xl",
"$rating_average": 3.3,
"$rating_count": 5,
"$rating_max": 2.8,
"$creation_timestamp": 1499892854966
}
],
"metadata": {},
"branch_key": "key_test_hdcBLUy1xZ1JD0tKg7qrLcgirFmPPVJc"
}' https://api2.branch.io/v2/event/standard
BranchEvent branchEvent = new BranchEvent(BranchEventType.PURCHASE);
branchEvent.AddCustomData("Transaction ID", "12344555");
branchEvent.AddCustomData("Currency", BranchCurrencyType.USD.ToString());
branchEvent.AddCustomData("Revenue", "1.5");
branchEvent.AddCustomData("Shipping", "10.2");
branchEvent.AddCustomData("Tax", "12.3");
branchEvent.AddCustomData("Coupon", "test_coupon");
branchEvent.AddCustomData("Affiliation", "test_affiliation");
branchEvent.AddCustomData("Event Description", "event_description");
branchEvent.AddCustomData("Search Query", "item 123");
branchEvent.AddCustomData("Custom_Event_Property_Key1", "Custom_Event_Property_val1");
branchEvent.AddCustomData("Custom_Event_Property_Key2", "Custom_Event_Property_val2");
Branch.sendEvent(branchEvent);
See full API docs here.
Content Event 추적
Content Event는 사용자가 앱 내 콘텐츠에 대해 관심을 가지고 상호작용하는 행위를 취했을 때 전송하는 이벤트입니다. 예를 들면, 기사를 다루고 있는 앱에서 사용자가 콘텐츠를 검색하고, 읽고, 평가하고, 공유할 수 있습니다. 이는 블로그 게시물, 음악, 동영상, 사진, 전자상거래 카탈로그 항목 등 다양한 앱내 콘텐츠에 적용할 수 있습니다.
HTTP API - Content Endpoint
POST /v2/event/standard
Content-Type: application/json
파라미터
Note about required identifiers. You must send up (in user_data):
browser_fingerprint_id OR
os=iOS AND (idfa OR idfv) OR
os=Android AND (android_id or aaid)
Example - Content
let event = BranchEvent.standardEvent(.search)
event.alias = "my custom alias"
event.eventDescription = "Product Search"
event.searchQuery = "user search query terms for product xyz"
event.customData["Custom_Event_Property_Key1"] = "Custom_Event_Property_val1"
event.logEvent()
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventSearch];
event.alias = @"my custom alias";
event.eventDescription = @"Product Search";
event.searchQuery = @"user search query terms for product xyz";
event.customData = (NSMutableDictionary*) @{
@"Custom_Event_Property_Key1": @"Custom_Event_Property_val1",
@"Custom_Event_Property_Key2": @"Custom_Event_Property_val2"
};
new BranchEvent(BRANCH_STANDARD_EVENT.SEARCH)
.setCustomerEventAlias("my_custom_alias")
.setDescription("Product Search")
.setSearchQuery("product name")
.addCustomDataProperty("Custom_Event_Property_Key1", "Custom_Event_Property_val1")
.logEvent(context);
BranchEvent(BRANCH_STANDARD_EVENT.SEARCH)
.setCustomerEventAlias("my_custom_alias")
.setDescription("Product Search")
.setSearchQuery("product name")
.addCustomDataProperty("Custom_Event_Property_Key1", "Custom_Event_Property_val1")
.logEvent(applicationContext);
let params = {
alias: "my custom alias",
description: "Product Search",
searchQuery: "user search query terms for product xyz",
customData: {
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
}
}
let event = new BranchEvent(BranchEvent.Search, null, params)
event.logEvent()
BranchEvent event = BranchEvent.standardEvent(BranchStandardEvent.SEARCH);
event.eventDescription = "Product Search";
event.searchQuery = "user search query terms for product xyz";
event.addCustomData('Custom_Event_Property_Key1', 'Custom_Event_Property_val1');
event.addCustomData('Custom_Event_Property_Key2', 'Custom_Event_Property_val2');
FlutterBranchSdk.trackContentWithoutBuo(branchEvent: event);
var event_and_custom_data = {
"transaction_id": "tras_Id_1232343434",
"currency": "USD",
"revenue": 180.2,
"shipping": 10.5,
"tax": 13.5,
"coupon": "promo-1234",
"affiliation": "high_fi",
"description": "Preferred purchase",
"purchase_loc": "Palo Alto",
"store_pickup": "unavailable"
};
var content_items = [
{
"$content_schema": "COMMERCE_PRODUCT",
"$og_title": "Nike Shoe",
"$og_description": "Start loving your steps",
"$og_image_url": "http://example.com/img1.jpg",
"$canonical_identifier": "nike/1234",
"$publicly_indexable": false,
"$price": 101.2,
"$locally_indexable": true,
"$quantity": 1,
"$sku": "1101123445",
"$product_name": "Runner",
"$product_brand": "Nike",
"$product_category": "Sporting Goods",
"$product_variant": "XL",
"$rating_average": 4.2,
"$rating_count": 5,
"$rating_max": 2.2,
"$creation_timestamp": 1499892854966,
"$exp_date": 1499892854966,
"$keywords": [ "sneakers", "shoes" ],
"$address_street": "230 South LaSalle Street",
"$address_city": "Chicago",
"$address_region": "IL",
"$address_country": "US",
"$address_postal_code": "60604",
"$latitude": 12.07,
"$longitude": -97.5,
"$image_captions": [ "my_img_caption1", "my_img_caption_2" ],
"$condition": "NEW",
"$custom_fields": {"foo1":"bar1","foo2":"bar2"}
},
{
"$og_title": "Nike Woolen Sox",
"$canonical_identifier": "nike/5324",
"$og_description": "Fine combed woolen sox for those who love your foot",
"$publicly_indexable": false,
"$price": 80.2,
"$locally_indexable": true,
"$quantity": 5,
"$sku": "110112467",
"$product_name": "Woolen Sox",
"$product_brand": "Nike",
"$product_category": "Apparel & Accessories",
"$product_variant": "Xl",
"$rating_average": 3.3,
"$rating_count": 5,
"$rating_max": 2.8,
"$creation_timestamp": 1499892854966
}];
var customer_event_alias = "my custom alias";
branch.logEvent(
"VIEW_ITEMS",
event_and_custom_data,
content_items,
customer_event_alias,
function(err) { console.log(err); }
);
// Create a BranchEvent:
let event = BranchEvent.standardEvent(.search)
event.alias = "my custom alias"
event.eventDescription = "Product Search"
event.searchQuery = "user search query terms for product xyz"
event.customData["Custom_Event_Property_Key1"] = "Custom_Event_Property_val1"
// The log method is on the Branch singleton instead of the event object
Branch.sharedInstance.logEvent(event) { (error) in
// log error here
}
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventSearch];
event.alias = "my custom alias";
event.eventDescription = @"Product Search";
event.searchQuery = @"user search query terms for product xyz";
event.customData[@"Custom_Event_Property_Key1"] = @"Custom_Event_Property_val1";
[[Branch sharedInstance] logEvent:event completion:^(NSError * _Nullable error) {
NSLog(@"Test Standard Event: %@", error);
}];
curl -vvv -d '{
"name": "VIEW_ITEMS",
"customer_event_alias": "my custom alias",
"user_data": {
"advertising_ids": {
"oaid": "02ab41d3-7886-4f29-a606-fba4372e9fdc"
},
"os": "Android",
"os_version": "25",
"environment": "FULL_APP",
"aaid": "abcdabcd-0123-0123-00f0-000000000000",
"android_id": "a12300000000",
"limit_ad_tracking": false,
"developer_identity": "user123",
"country": "US",
"language": "en",
"ip": "192.168.1.1",
"local_ip": "192.168.1.2",
"brand": "LGE",
"app_version": "1.0.0",
"model": "Nexus 5X",
"screen_dpi": 420,
"screen_height": 1794,
"screen_width": 1080
},
"custom_data": {
"purchase_loc": "Palo Alto",
"store_pickup": "unavailable"
},
"event_data": {
"search_query": "red sneakers",
"description": "Preferred purchase",
"custom_param_1": "Parameter 1",
"custom_param_2": "Parameter 2",
"custom_param_3": "Parameter 3"
},
"content_items": [
{
"$content_schema": "COMMERCE_PRODUCT",
"$og_title": "Nike Shoe",
"$og_description": "Start loving your steps",
"$og_image_url": "http://example.com/img1.jpg",
"$canonical_identifier": "nike/1234",
"$publicly_indexable": false,
"$price": 101.2,
"$locally_indexable": true,
"$sku": "1101123445",
"$product_name": "Runner",
"$product_brand": "Nike",
"$product_category": "Sporting Goods",
"$product_variant": "XL",
"$rating_average": 4.2,
"$rating_count": 5,
"$rating_max": 2.2,
"$creation_timestamp": 1499892854966,
"$exp_date": 1499892854966,
"$keywords": [
"sneakers",
"shoes"
],
"$address_street": "230 South LaSalle Street",
"$address_city": "Chicago",
"$address_region": "IL",
"$address_country": "US",
"$address_postal_code": "60604",
"$latitude": 12.07,
"$longitude": -97.5,
"$image_captions": [
"my_img_caption1",
"my_img_caption_2"
],
"$condition": "NEW",
"$custom_fields": "{\"foo1\":\"bar1\",\"foo2\":\"bar2\"}"
},
{
"$og_title": "Nike Woolen Sox",
"$canonical_identifier": "nike/5324",
"$og_description": "Fine combed woolen sox for those who love your foot",
"$publicly_indexable": false,
"$price": 80.2,
"$locally_indexable": true,
"$sku": "110112467",
"$product_name": "Woolen Sox",
"$product_brand": "Nike",
"$product_category": "Apparel & Accessories",
"$product_variant": "Xl",
"$rating_average": 3.3,
"$rating_count": 5,
"$rating_max": 2.8,
"$creation_timestamp": 1499892854966
}
],
"metadata": {},
"branch_key": "key_test_hdcBLUy1xZ1JD0tKg7qrLcgirFmPPVJc"
}' https://api2.branch.io/v2/event/standard
BranchEvent branchEvent = new BranchEvent(BranchEventType.SEARCH);
branchEvent.SetAlias("my_custom_alias");
branchEvent.AddCustomData("Description", "Product Search");
branchEvent.AddCustomData("Search Query", "product name");
branchEvent.AddCustomData("Custom_Event_Property_Key1", "Custom_Event_Property_val1");
Branch.sendEvent(branchEvent);
See full API docs here.
Lifecycle Event 추적
Lifecycle Event는 사용자의 여정을 심화하기 위해 사용자가 단계별로 발생시키는 일련의 이벤트로 볼 수 있습니다. 이러한 이벤트는 사용자가 회원가입 또는 튜토리얼을 완료할 때 적용될 수 있고 게임 앱과 기타 유형의 앱에도 적용할 수 있습니다.
HTTP API - Lifecycle Endpoint
POST /v2/event/standard
Content-Type: application/json
파라미터
Note about required identifiers. You must send up (in user_data):
browser_fingerprint_id OR
os=iOS AND (idfa OR idfv) OR
os=Android AND (android_id or aaid)
Example - Lifecycle
let event = BranchEvent.standardEvent(.completeRegistration)
event.alias = "my custom alias"
event.transactionID = "tx1234"
event.eventDescription = "User completed registration."
event.customData["registrationID"] = "12345"
event.logEvent()
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventCompleteRegistration];
event.alias = "my custom alias";
event.transactionID = @"tx1234";
event.eventDescription = @"User completed registration.";
event.customData = (NSMutableDictionary*) @{
@"Custom_Event_Property_Key1": @"Custom_Event_Property_val1",
@"Custom_Event_Property_Key2": @"Custom_Event_Property_val2",
@"registrationID": @"12345"
};
[event logEvent];
new BranchEvent(BRANCH_STANDARD_EVENT.COMPLETE_REGISTRATION)
.setCustomerEventAlias("my_custom_alias")
.setTransactionID("tx1234")
.setDescription("User created an account")
.addCustomDataProperty("registrationID", "12345")
.logEvent(context);
BranchEvent(BRANCH_STANDARD_EVENT.COMPLETE_REGISTRATION)
.setCustomerEventAlias("my_custom_alias")
.setTransactionID("tx1234")
.setDescription("User created an account")
.addCustomDataProperty("registrationID", "12345")
.logEvent(applicationContext);
let params = {
alias: "my custom alias",
transaction_id: "tras_Id_1234",
description: "Preferred purchase",
registration_id: "12345",
customData: {
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
}
}
let event = new BranchEvent(BranchEvent.CompleteRegistration, null, params)
event.logEvent()
BranchEvent event = BranchEvent.standardEvent(BranchStandardEvent.COMPLETE_REGISTRATION);
event.transactionID = "tx1234";
event.eventDescription = "User completed registration";
event.addCustomData('Custom_Event_Property_Key1', 'Custom_Event_Property_val1');
event.addCustomData('Custom_Event_Property_Key2', 'Custom_Event_Property_val2');
FlutterBranchSdk.trackContentWithoutBuo(branchEvent: event);
var event_and_custom_data = {
"transaction_id": "tras_Id_1234",
"description": "Preferred purchase",
"registration_id": "12345"
};
var customer_event_alias = "my custom alias";
branch.logEvent(
"COMPLETE_REGISTRATION",
event_and_custom_data,
customer_event_alias,
function(err) { console.log(err); }
);
// Create a BranchEvent:
let event = BranchEvent.standardEvent(.completeRegistration)
event.alias = "my custom alias"
event.transactionID = "tx1234"
event.eventDescription = "User completed registration."
event.customData["registrationID"] = "12345"
// The log method is on the Branch singleton instead of the event object
Branch.sharedInstance.logEvent(event) { (error) in
// log error here
}
BranchEvent *event = [BranchEvent standardEvent:BranchStandardEventCompleteRegistration];
event.alias = "my custom alias";
event.transactionID = @"tx1234";
event.eventDescription = @"User completed registration.";
[[Branch sharedInstance] logEvent:event completion:^(NSError * _Nullable error) {
NSLog(@"Test Standard Event: %@", error);
}];
curl -vvv -d '{
"name": "COMPLETE_REGISTRATION",
"customer_event_alias": "my custom alias",
"user_data": {
"advertising_ids": {
"oaid": "02ab41d3-7886-4f29-a606-fba4372e9fdc"
},
"os": "Android",
"os_version": "25",
"environment": "FULL_APP",
"aaid": "abcdabcd-0123-0123-00f0-000000000000",
"android_id": "a12300000000",
"limit_ad_tracking": false,
"developer_identity": "user123",
"country": "US",
"language": "en",
"ip": "192.168.1.1",
"local_ip": "192.168.1.2",
"brand": "LGE",
"app_version": "1.0.0",
"model": "Nexus 5X",
"screen_dpi": 420,
"screen_height": 1794,
"screen_width": 1080
},
"custom_data": {
"foo": "bar"
},
"event_data": {
"description": "Preferred purchase",
"custom_param_1": "Parameter 1",
"custom_param_2": "Parameter 2",
"custom_param_3": "Parameter 3"
},
"metadata": {},
"branch_key": "key_test_hdcBLUy1xZ1JD0tKg7qrLcgirFmPPVJc"
}' https://api2.branch.io/v2/event/standard
BranchEvent branchEvent = new BranchEvent(BranchEventType.COMPLETE_REGISTRATION);
branchEvent.SetAlias("my_custom_alias");
branchEvent.AddCustomData("Transaction_ID", "tx1234");
branchEvent.AddCustomData("Description", "User created an account");
branchEvent.AddCustomData("registrationID", "12345");
Branch.sendEvent(branchEvent);
See full API docs here.
Custom Event 추적
사전 정의된 표준 이벤트가 아닌 임의로 정의한 이벤트를 추적하려면 아래 내용을 참고하시기 바랍니다.
Custom Event 의 이벤트명
The name
custom event
is reserved by Branch. Please ensure you give your custom event an actual name.Additionally, do not use the same name for your custom event as Standard Events. This will have an impact on attribution with Self-Attributing Networks and event mapping.
We strongly recommend using custom event names that contain no more than 40 characters, contain only letters, numbers, hyphens, spaces, and underscores, and do not start with a hyphen. Facebook will not accept events that violate these rules, and if you enable the Facebook integration, Branch may sanitize your event names to pass validation.
HTTP API - Custom Endpoint
POST /v2/event/custom
Content-Type: application/json
파라미터
Note about required identifiers. You must send up (in user_data):
browser_fingerprint_id OR
os=iOS AND (idfa OR idfv) OR
os=Android AND (android_id or aaid)
Example - Custom
let event = BranchEvent.customEvent(withName:"User_Scanned_Item")
event.customData["Custom_Event_Property_Key1"] = "Custom_Event_Property_val1"
event.customData["Custom_Event_Property_Key2"] = "Custom_Event_Property_val2"
event.alias = "my custom alias"
event.logEvent()
BranchEvent *event = [BranchEvent customEventWithName:@"User_Scanned_Item"];
event.customData = (NSMutableDictionary*) @{
@"Custom_Event_Property_Key1": @"Custom_Event_Property_val1",
@"Custom_Event_Property_Key2": @"Custom_Event_Property_val2"
};
event.alias = "my custom alias";
[event logEvent];
new BranchEvent("Some Custom Event")
.addCustomDataProperty("Custom_Event_Property_Key11", "Custom_Event_Property_val11")
.addCustomDataProperty("Custom_Event_Property_Key22", "Custom_Event_Property_val22")
.setCustomerEventAlias("my_custom_alias")
.logEvent(MainActivity.this);
BranchEvent("Some Custom Event")
.addCustomDataProperty("Custom_Event_Property_Key11", "Custom_Event_Property_val11")
.addCustomDataProperty("Custom_Event_Property_Key22", "Custom_Event_Property_val22")
.setCustomerEventAlias("my_custom_alias")
.logEvent(this);
let params = {
alias: "my custom alias",
customData: {
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
}
}
let event = new BranchEvent("Some Custom Event", null, params) //pass null if no BranchUniversalObject is used
event.logEvent()
BranchEvent eventCustom = BranchEvent.customEvent('User_Scanned_Item');
eventCustom.addCustomData('Custom_Event_Property_Key1', 'Custom_Event_Property_val1')
eventCustom.addCustomData('Custom_Event_Property_Key2', 'Custom_Event_Property_val2');
FlutterBranchSdk.trackContentWithoutBuo(branchEvent: eventCustom);
var custom_data = {
"Custom_Event_Property_Key1": "Custom_Event_Property_val1",
"Custom_Event_Property_Key2": "Custom_Event_Property_val2"
};
branch.logEvent(
'custom_event_name',
custom_data,
function(err) { console.log(err); }
);
// Create a BranchEvent:
let event = BranchEvent.customEvent(withName:"User_Scanned_Item")
event.customData["Custom_Event_Property_Key1"] = "Custom_Event_Property_val1"
event.customData["Custom_Event_Property_Key2"] = "Custom_Event_Property_val2"
event.alias = "my custom alias"
// The log method is on the Branch singleton instead of the event object
Branch.sharedInstance.logEvent(event) { (error) in
// log error here
}
BranchEvent *event = [BranchEvent customEventWithName:@"User_Scanned_Item"];
event.customData[@"Custom_Event_Property_Key1"] = @"Custom_Event_Property_val1";
event.customData[@"Custom_Event_Property_Key2"] = @"Custom_Event_Property_val2";
event.alias = "my custom alias";
[[Branch sharedInstance] logEvent:event completion:^(NSError * _Nullable error) {
NSLog(@"Test Standard Event: %@", error);
}];
curl -vvv -d '{
"name": "picture swiped",
"customer_event_alias": "my custom alias",
"user_data": {
"advertising_ids": {
"oaid": "02ab41d3-7886-4f29-a606-fba4372e9fdc"
},
"os": "Android",
"os_version": "25",
"environment": "FULL_APP",
"aaid": "abcdabcd-0123-0123-00f0-000000000000",
"android_id": "a12300000000",
"limit_ad_tracking": false,
"developer_identity": "user123",
"country": "US",
"language": "en",
"ip": "192.168.1.1",
"local_ip": "192.168.1.2",
"brand": "LGE",
"app_version": "1.0.0",
"model": "Nexus 5X",
"screen_dpi": 420,
"screen_height": 1794,
"screen_width": 1080
},
"event_data": {
"custom_param_1": "Parameter 1",
"custom_param_2": "Parameter 2",
"custom_param_3": "Parameter 3"
},
"custom_data": {
"foo": "bar"
},
"metadata": {},
"branch_key": "key_test_hdcBLUy1xZ1JD0tKg7qrLcgirFmPPVJc"
}' https://api2.branch.io/v2/event/custom
BranchEvent branchEvent = new BranchEvent("Some Custom Event");
branchEvent.AddCustomData("Custom_Event_Property_Key11", "Custom_Event_Property_val11");
branchEvent.AddCustomData("Custom_Event_Property_Key22", "Custom_Event_Property_val22");
branchEvent.SetAlias("my_custom_alias");
Branch.sendEvent(branchEvent);
See full API docs here.
이벤트 테스트
In order to test whether v2/events are being received on Branch's backend, check out Liveview.
Updated 29 days ago