iOS SDK - 인앱 이벤트 추적

문서

인앱 이벤트 추적

참고: 사용자 이벤트 계획에 대한 자세한 내용은 SDK 계획 및 전제 조건 가이드의 앱에서 사용자 이벤트를 추적할 것인가? 를 참조하세요.

참고: 모든 인앱 이벤트는 앱에서 Singular SDK 메서드를 사용하여 Singular 서버로 전송하는 것이 좋습니다. 다른 제공업체나 내부 서버에서 Singular로 이벤트를 전송하려는 경우 아래의 하이브리드 이벤트 추적 섹션을 참조하세요.

이벤트 추적(비구매)

Singular는 인앱 이벤트에 대한 데이터를 수집하여 캠페인의 성과를 분석하고 KPI를 측정할 수 있습니다. 예를 들어, 게임 앱에서 사용자 로그인, 등록, 튜토리얼 완료 또는 레벨 업에 대한 데이터를 수집하고자 할 수 있습니다.

Singular로 전송되는 이벤트 목록(함께 제공되는 속성 포함)은 UA/마케팅/비즈니스 팀에서 마케팅 KPI에 따라 작성해야 합니다.

사용자 이벤트 계획에 대한 자세한 내용은 SDK 계획 및 전제 조건 가이드에서 앱이 사용자 이벤트를 추적하나요? 를 참조하세요.

코드에서 event 또는 eventWithArgs 메서드를 사용하여 표준 이벤트를 Singular로 전송합니다.

참고: 표준 이벤트의 경우 iOS SDK 표준 이벤트 및 속성 목록에 표시된 이벤트의 iOS 이름 (예: EVENT_SNG_LOGIN)을 사용합니다.

사용자 지정 이벤트의 경우, 조직에서 측정하려는 이벤트 중 Singular의 표준 이벤트와 일치하지 않는 이벤트는 사용자 지정 이름 (최대 32자)을 사용합니다. 최적화를 위해 Singular로부터 이벤트를 수신할 수 있는 모든 애드 네트워크 파트너와의 호환성을 위해 영문 이름을 사용하는 것이 좋습니다.

이벤트 방법
설명 트래킹을 위해 사용자 이벤트를 Singular로 전송합니다.
서명 (void)event:(NSString *)name
사용 예제
SwiftObjective-C
// Using Standard Event


Singular.event(EVENT_SNG_LOGIN)

// Using Custom Event


Singular.event("signup")
eventWithArgs 메서드
설명 추적할 사용자 이벤트를 추가 정보와 함께 Singular로 전송합니다.
Signature (void)eventWithArgs:(NSString *)name, ...
사용 예시
SwiftObjective-C
//Using Standard Event
var dic: [AnyHashable : Any] = [:]
dic[ATTRIBUTE_SNG_ATTR_CONTENT_TYPE] = "PrivacyController"
dic[ATTRIBUTE_SNG_ATTR_CONTENT_ID] = "0"
dic[ATTRIBUTE_SNG_ATTR_CONTENT] = "GDPR and CCPA Opt-Out Options"
Singular.event(EVENT_SNG_CONTENT_VIEW, withArgs: dic)

//Using Custom Event
var bonusdata: [AnyHashable: Any] = [ "level": 10, "points": 500 ]
Singular.event("Bonus Points Earned", withArgs: bonusdata)

인앱 구매 추적

Singular는 인앱 구매(IAP), 구독, 커스텀 구매 에서 발생한 구매 이벤트를 캡처하여 캠페인 성과와 광고 비용 대비 구매률(ROAS)을 측정합니다. 구매 데이터는 세 가지 주요 채널을 통해 제공됩니다:

  • Singular 대시보드의 대화형 보고서
  • 사용자 지정 분석을 위한 상세 내보내기 로그 및 ETL 데이터 대상
  • 외부 플랫폼에 대한 실시간 포스트백

이러한 포괄적인 구매 추적 기능을 통해 마케팅 비용 및 캠페인 최적화에 대한 데이터 기반 의사결정을 내릴 수 있으며, 데이터 소비 및 분석 방식에 유연성을 제공합니다.

요구 사항

  • 사용자 지정 구매 이벤트 이름을 사용하는 경우 사용자 지정 구매 이벤트 이름은 32개의 ASCII 문자로 제한됩니다. ASCII가 아닌 문자의 경우 UTF-8로 변환하면 32바이트로 제한됩니다.
  • 이벤트 속성 이름과 속성 값은 500자로 제한됩니다.
  • 통화를 3글자 ISO 4217 통화 코드로 전달합니다:

    USD, EUR, INR

모범 사례

  • Singular는 Singular의 표준 이벤트 및 속성 명명 규칙을 사용하여 이벤트를 전달할 것을 권장합니다.
  • 맞춤 구매 이벤트 이름을 사용하는 경우, 애드 네트워크 포스트백과의 호환성을 높이기 위해 영문으로 전송해야 합니다.
  • 구매 이벤트는 구매 금액이 0보다 크거나 작은 경우에만 Singular에 전송해야 합니다.

비구독 인앱 구매

중요: 이 방법은 구독 추적을 지원하지 않습니다! 비구독 인앱 구매 추적에는 이 방법을 사용하세요.

앱에서 앱스토어 IAP 추적을 사용하는 경우 iapComplete 메서드를 사용하는 것이 좋습니다.

이 방법은 IAP(Apple의 인앱 구매) 구매 이벤트를 Singular로 전송합니다:

  • 모든 트랜잭션 세부 정보를 Singular가 보고서를 보강하는 데 사용합니다.
  • 거래 영수증은 거래의 유효성을 검사하고 사기 시도를 분석하거나 방지하는 데 사용됩니다.

참고:

  • iapComplete를 사용할 때는 이벤트에SKPaymentTransaction 객체를 포함해야 합니다.
  • 다른 통화로 보고된 구매은 Singular 계정에 설정된 대로 조직의 기본 통화로 자동 변환됩니다.

iapComplete 메서드

거래 영수증과 함께 구매 이벤트를 Singular로 전송합니다.

서명

(void)iapComplete:(id)transaction

(void)iapComplete:(id)transaction withName:(NSString *)name;

사용 예시

SwiftObjective-C
// *** Get the SKPaymentTransaction* transaction object ***

let transaction:SKPaymentTransaction = ...

// Send a transaction event to Singular without a custom event name

Singular.iapComplete(transaction)

// Send a transaction event to Singular with a custom event name

Singular.iapComplete(transaction, withName:"MyCustomRevenue")

구독 구매

구독 추적:

Singular를 사용하면 앱 내에서 구독과 갱신을 추적하여 사용자 행동과 구매 창출에 대한 인사이트를 얻을 수 있습니다. Singular SDK를 사용하여 구독 이벤트를 구현하는 방법에 대한 종합 가이드를 살펴보세요.[구독 이벤트 기술 구현 가이드] 보기

구매 검증 없이 맞춤 구매 창출

앱이 앱스토어 인앱 구매 추적을 지원하지 않는 경우, 구매 또는 customRevenue 메서드를 사용하는 것이 좋습니다. 이러한 메서드는 구매 유효성 검사를 수행하지 않으며 구매 개체나 영수증을 포함하지 않아야 합니다.

구매customRevenue 메서드를 사용하면 거래 금액과 통화를 수동으로 지정할 수 있으며, 제품 일련 번호 및 수량 등의 추가 세부 정보(선택 사항)도 지정할 수 있습니다. customRevenue 메서드를 사용하면 사용자 지정 이벤트 이름도 전달할 수 있습니다.

참고: 이러한 메서드를 사용하는 경우 Singular는 구매 거래의 유효성을 검사하지 않습니다.


구매 메서드

구매 금액, 통화 및 선택적 세부 정보가 포함된 구매 이벤트를 Singular로 전송합니다.

서명

(void)revenue:(NSString *)currency amount:(double)amount;

(void)revenue:(NSString *)currency amount:(double)amount
     productSKU:(NSString *)productSKU 
     productName:(NSString*)productName 
     productCategory:(NSString *)productCategory
     productQuantity:(int)productQuantity 
     productPrice:(double)productPrice;

(void)revenue:(NSString *)currency amount:(double)amount
     withAttributes:(NSDictionary*)attributes;

사용 예시

SwiftObjective-C
// Revenue with no product details

Singular.revenue("USD", amount:1.99)

// Revenue with product details

Singular.revenue("EUR", amount:5.00, 
     productSKU:"SKU1928375", 
     productName:"Reservation Fee",
     productCategory:"Fee", 
     productQuantity:1, productPrice:5.00)

// Send a Revenue Event with attributes in a dictionary

var dic: [AnyHashable : Any] = [:]
dic[ATTRIBUTE_SNG_ATTR_ITEM_DESCRIPTION] = "100% Organic Cotton Mixed Plaid Flannel Shirt"
dic[ATTRIBUTE_SNG_ATTR_ITEM_PRICE] = "$69.95"
dic[ATTRIBUTE_SNG_ATTR_RATING] = "5 Star"
dic[ATTRIBUTE_SNG_ATTR_SEARCH_STRING] = "Flannel Shirt"

Singular.revenue("USD", amount: 19.95, withAttributes: dic)

customRevenue 메서드

이벤트 이름, 구매 금액, 통화 코드 및 추가 거래 속성을 지정하여 사용자 지정 구매 이벤트를 Singular로 전송합니다. Singular는 이러한 이벤트를 처리하여 인앱 구매을 추적합니다.

서명

(void)customRevenue:(NSString *)eventName 
     currency:(NSString *)currency 
     amount:(double)amount;

(void)customRevenue:(NSString *)eventName 
     currency:(NSString *)currency 
     amount:(double)amount 
     productSKU:(NSString *)productSKU 
     productName:(NSString *)productName
     productCategory:(NSString *)productCategory 
     productQuantity:(int)productQuantity
     productPrice:(double)productPrice;

(void)customRevenue:(NSString*)eventname 
     currency:(NSString *)currency 
     amount:(double)amount 
     withAttributes:(NSDictionary*)attributes;

사용 예시

SwiftObjective-C
// Revenue with a custom name and no product details

Singular.customRevenue("MyCustomRevenue", currency:"USD", amount:1.99)

// Revenue with a custom name and product details

Singular.customRevenue("MyCustomRevenue", currency:"EUR", amount:5.00, 
     productSKU:"SKU1928375", 
     productName:"Reservation Fee", 
     productCategory:"Fee", 
     productQuantity:1, 
     productPrice:5.00)

// Send a Custom Revenue Event with attributes in a dictionary

var dic: [AnyHashable : Any] = [:]
dic[ATTRIBUTE_SNG_ATTR_ITEM_DESCRIPTION] = "100% Organic Cotton Mixed Plaid Flannel Shirt"
dic[ATTRIBUTE_SNG_ATTR_ITEM_PRICE] = "$69.95"
dic[ATTRIBUTE_SNG_ATTR_RATING] = "5 Star"
dic[ATTRIBUTE_SNG_ATTR_SEARCH_STRING] = "Flannel Shirt"
Singular.customRevenue("CustomRevenueWithArgsDic", currency: "USD", amount: 44.99, withAttributes: dic)

스토어키트2 지원

앱에서 인앱 구매 추적에 StoreKit2 프레임워크를 사용하는 경우 customRevenue 메서드를 사용하는 것이 좋습니다. customRevenue 메서드를 사용하려면 거래제품 개체를 jsonRepresentation에 제공해야 합니다.

스토어키트2에서는 구매 유효성 검사가 지원되지 않습니다.


customRevenue 메서드

서명

+ (void)customRevenue:(NSData *)transactionJsonRepresentation productJsonRepresentation:(NSData *)productJsonRepresentation;

+ (void)customRevenue:(NSString *)eventName transactionJsonRepresentation:(NSData *)transactionJsonRepresentation productJsonRepresentation:(NSData *)productJsonRepresentation;

사용 예제

SwiftObjective-C
// Fetch transaction and product from StoreKit2

let transaction = ... // Assume this is a valid StoreKit2 transaction

let product = ... // Assume this is a valid StoreKit2 product


// Custom Revenue using __iap__ event name with transaction and product JSON representations

Singular.customRevenue(
            transactionJsonRepresentation: transaction.jsonRepresentation, 
            productJsonRepresentation: product.jsonRepresentation )

// Custom Revenue with custom event name using transaction and product JSON representations

Singular.customRevenue(
            "PaymentSuccess", 
            transactionJsonRepresentation: transaction.jsonRepresentation, 
            productJsonRepresentation: product.jsonRepresentation )
}

하이브리드 이벤트 추적(고급)

Singular는 앱에 연동된 Singular SDK를 통해 모든 이벤트와 구매을 전송할 것을 권장합니다. 그러나 Singular는 다른 소스에서 이벤트와 구매을 수집할 수 있습니다.

Singular SDK에서 전송되지 않은 모든 이벤트는 Singular의 서버 간 이벤트 문서 요구사항을 준수해야 하며, 이벤트의 정확한 어트리뷰션을 위해 일치하는 기기 식별자를 제공해야 합니다.

중요:

서버 간 이벤트 요청에 사용된 디바이스 식별자가 Singular에 일치하는 디바이스 식별자가 없는 경우 불일치가 발생할 수 있습니다. 다음과 같은 가능성에 유의하세요:

  • 이벤트 요청이 앱 세션에서 Singular SDK가 디바이스 식별자를 기록하기 '전에' 수신된 경우, 이벤트 요청은 알 수 없는 디바이스에 대한 '첫 번째 세션'으로 간주되며, Singular는 해당 디바이스를 오가닉 어트리뷰션으로 어트리뷰션할 것입니다.
  • Singular SDK가 디바이스 식별자를 기록했지만, Singular SDK 식별자가 서버 간 이벤트 요청에 지정된 디바이스 식별자와 다른 경우 이벤트는 잘못 어트리뷰션됩니다.

하이브리드 이벤트 추적 가이드

내부 서버에서 이벤트 전송

Singular는 서버에서 구매에 대한 데이터를 수집하여 캠페인의 성과와 ROI를 분석하는 데 도움을 줄 수 있습니다.

요구 사항:

  • 인앱 등록 또는 로그인 이벤트에서 디바이스 식별자를 캡처하여 전달하고 이 데이터를 서버에 사용자 ID와 함께 저장하세요. 디바이스 식별자는 사용자에 따라 변경될 수 있으므로 사용자가 앱 세션을 생성할 때 반드시 식별자를 업데이트해야 합니다. 이렇게 하면 서버 측 이벤트가 올바른 디바이스에 어트리뷰션되도록 보장할 수 있습니다.
  • 서버 측 이벤트는 플랫폼별로 다르므로 디바이스 플랫폼과 일치하는 디바이스 식별자(예: iOS 디바이스의 경우 IDFA 또는 IDFV)로만 전송해야 합니다.
  • Singular 내부 BI 포스트백 메커니즘을 사용하여 이벤트를 내부 엔드포인트에 실시간으로 푸시하여 서버 측의 데이터 집합을 업데이트할 수 있습니다. 내부 BI 포스트백 FAQ를 참조하세요.
  • 자세한 내용은 서버 간 연동 가이드의 "구매 추적" 섹션을 참조하세요.

구매 제공업체에서 이벤트 보내기

리베이트캣 또는 어댑터와 같은 타사 제공업체는 구매 및 구독 구매을 Singular에 제공할 수 있습니다.

이러한 파트너를 활성화하는 방법에 대한 자세한 내용은 아래 링크를 참조하세요.


세그먼트에서 이벤트 보내기

세그먼트에서 Singular SDK와 병행하여 이벤트를 Singular로 보내려면 세그먼트에 "클라우드 모드" 대상을 추가해야 합니다. 여기에서 가이드를 따르세요.