인앱 이벤트 추적
인앱 이벤트를 추적하여 캠페인 성과를 분석하고 사용자 로그인, 회원가입, 튜토리얼 완료, 진행 단계 달성과 같은 핵심성과지표(KPI)를 측정하세요.
표준 이벤트 및 속성
표준 이벤트 사용
Singular은 광고 네트워크가 리포팅 및 최적화를 위해 인식하는 표준 이벤트 를 지원합니다. 자동 인식과 간편한 설정을 위해 가능한 한 표준 이벤트 이름을 사용하세요.
UA, 마케팅 또는 비즈니스 팀이 조직의 마케팅 KPI를 기반으로 이벤트 목록을 작성해야 합니다. 계획 수립에 대해서는 인앱 이벤트 추적 방법: Singular 어트리뷰션 고객을 위한 가이드 를 참고하세요.
각 이벤트는 다양한 속성을 지원합니다. 구현 세부 정보는 이벤트별 권장 표준 속성 을 참고하세요.
이벤트 전송
이벤트 구현 가이드라인
eventJSON
또는
event
메서드를 사용하여 Singular에 이벤트를 전송하세요(가독성 향상을 위해
eventJSON
을 권장합니다).
-
표준 이벤트:
표준 이벤트 목록의
이벤트 Android 이름
을 사용하세요(예:
sngTutorialComplete) - 커스텀 이벤트: 표준 이벤트와 일치하지 않는 앱 고유의 이벤트의 경우, 문자 제한을 준수하는 설명적인 문자열을 사용하세요
커스텀 이벤트 제한사항:
- 언어: 서드파티 파트너 및 분석 솔루션과의 호환성을 보장하기 위해 이벤트 이름과 속성을 영어로 전달하세요
- 이벤트 이름: ASCII 문자 32자로 제한됩니다. 비ASCII 문자열은 UTF-8로 변환했을 때 32바이트 미만이어야 합니다
- 속성 및 값: ASCII 문자 500자로 제한됩니다
eventJSON 메서드
구조화된 데이터를 위해 JSONObject 형식을 사용하여 추가 정보와 함께 사용자 이벤트를 보고합니다.
메서드 시그니처:
Singular.eventJSON(String name, JSONObject args)
참고:
args
매개변수는 하나 이상의 키-값 쌍을 포함하는 JSONObject입니다. 키는 문자열이어야 하며 값은 JSONObject 값으로 허용되는 모든 타입이 될 수 있습니다.
사용 예시
// Example 1: Standard event with recommended attributes
val att = JSONObject().apply {
put(Attributes.sngAttrContent.toString(), "Telugu")
put(Attributes.sngAttrContentId.toString(), 32)
put(Attributes.sngAttrContentType.toString(), "video")
put(Attributes.sngAttrSuccess.toString(), 75)
}
Singular.eventJSON(Events.sngTutorialComplete.toString(), att)
// Example 2: Custom event with custom attributes
val att = JSONObject().apply {
put("Points", 500)
put("score", 650)
}
Singular.eventJSON("Bonus Points Earned", att)
// Example 1: Standard event with recommended attributes
JSONObject att = new JSONObject();
try {
att.put(Attributes.sngAttrContent.toString(), "Telugu");
att.put(Attributes.sngAttrContentId.toString(), 32);
att.put(Attributes.sngAttrContentType.toString(), "video");
att.put(Attributes.sngAttrSuccess.toString(), 92);
} catch (JSONException e) {
e.printStackTrace();
}
Singular.eventJSON(Events.sngTutorialComplete.toString(), att);
// Example 2: Custom event with custom attributes
JSONObject att = new JSONObject();
try {
att.put("Points", 500);
att.put("score", 650);
} catch (JSONException e) {
e.printStackTrace();
}
Singular.eventJSON("Bonus Points Earned", att);
event 메서드
가변 인자를 사용하여 추가 정보를 포함하거나 포함하지 않고 사용자 이벤트를 보고합니다.
메서드 시그니처:
Singular.event(String eventName)
Singular.event(String eventName, Object... args)
참고:
args
매개변수는 하나 이상의 키-값 쌍을 받습니다. 키는 문자열이어야 하며 값은 JSONObject 값으로 허용되는 모든 타입(JSONObject, JSONArray, String, Boolean, Integer, Long, Double 또는 NULL)이 될 수 있습니다.
args
목록은 짝수 개의 요소를 포함해야 하며 그렇지 않으면 이벤트가 거부됩니다.
사용 예시
// Example 1: Standard event without attributes
Singular.event(Events.sngSubscribe.toString())
// Example 2: Standard event with recommended attributes
Singular.event(Events.sngTutorialComplete.toString(),
Attributes.sngAttrContent.toString(), "Telugu",
Attributes.sngAttrContentId.toString(), "32",
Attributes.sngAttrContentType.toString(), "video",
Attributes.sngAttrSuccess.toString(), "yes"
)
// Example 3: Custom event without attributes
Singular.event("SignUp")
// Example 4: Custom event with custom attribute
Singular.event("Bonus Points Earned", "Points", 500)
// Example 1: Standard event without attributes
Singular.event(Events.sngSubscribe.toString());
// Example 2: Standard event with recommended attributes
Singular.event(Events.sngTutorialComplete.toString(),
Attributes.sngAttrContent.toString(), "Spanish",
Attributes.sngAttrContentId.toString(), 52,
Attributes.sngAttrContentType.toString(), "video",
Attributes.sngAttrSuccess.toString(), 46
);
// Example 3: Custom event without attributes
Singular.event("SignUp");
// Example 4: Custom event with custom attribute
Singular.event("Bonus Points Earned", "Points", 500);
인앱 수익 추적
인앱 구매(IAP), 구독 및 커스텀 수익원에서 발생하는 수익을 추적하여 캠페인 성과와 광고 비용 대비 수익률(ROAS)을 측정하세요.
수익 데이터는 세 가지 채널을 통해 전달됩니다:
- 인터랙티브 리포트: Singular 대시보드에서 수익 지표를 확인합니다
- Export Logs: 커스텀 분석을 위한 상세 ETL 데이터에 액세스합니다
- 실시간 포스트백: 외부 플랫폼으로 수익 이벤트를 전송합니다
수익 이벤트 제한사항:
- 이벤트 이름: 커스텀 수익 이벤트 이름은 ASCII 문자 32자(비ASCII의 경우 UTF-8로 변환 시 32바이트)로 제한됩니다
- 속성: 이벤트 속성 이름과 값은 ASCII 문자 500자로 제한됩니다
- 통화 코드: 모두 대문자로 작성해야 하며 세 글자 ISO 4217 표준 을 따라야 합니다(예: USD, EUR, INR)
모범 사례
- 표준 명명: Singular의 표준 이벤트 및 속성 명명 규칙 을 사용하세요
- 언어: 광고 네트워크 포스트백 호환성 향상을 위해 커스텀 수익 이벤트 이름을 영어로 전송하세요
- 0이 아닌 금액: 금액이 0보다 크거나 작은 경우에만 수익 이벤트를 전송하세요
비구독 인앱 구매
Purchase 객체 연동
Google Billing Library의
Purchase
객체를
revenue
또는
customRevenue
메서드에 전달하여 강화된 리포팅 및 거래 검증을 활용하세요.
이점:
- 풍부한 데이터: Singular이 종합적인 리포트를 위한 완전한 거래 세부 정보를 수신합니다
- 사기 방지: 거래 영수증을 통해 검증이 가능하여 인앱 사기를 방지합니다
참고:
-
커스텀 이벤트 이름:
customRevenue메서드는 리포트에서 이벤트 유형별로 수익을 분류하기 위한 커스텀 이벤트 이름을 받습니다 - 통화 변환: 다른 통화의 수익은 조직의 기본 통화로 자동 변환됩니다
Purchase를 사용한 revenue 메서드
자동 검증 및 강화된 데이터를 위해 Purchase 객체와 함께 수익 이벤트를 전송합니다.
메서드 시그니처:
Singular.revenue(String currency, double amount, Object purchase)
사용 예시
Singular.revenue("USD", 5.50, purchase)
Singular.revenue("USD", 5.50, purchase);
Purchase를 사용한 customRevenue 메서드
분류된 수익 추적을 위해 커스텀 이름과 Purchase 객체와 함께 수익 이벤트를 전송합니다.
메서드 시그니처:
Singular.customRevenue(String eventName, String currency, double amount, Object purchase)
사용 예시
Singular.customRevenue("MyCustomRevenue", "USD", 5.50, purchase)
Singular.customRevenue("MyCustomRevenue", "USD", 5.50, purchase);
구독 수익
구독 이벤트 구현
구독 구매 및 갱신을 추적하여 사용자 행동과 반복 수익 창출에 대한 인사이트를 확보하세요.
구현 가이드: Singular SDK로 구독을 추적하는 방법에 대한 자세한 안내는 종합적인 구독 이벤트 기술 구현 가이드 를 확인하세요.
Purchase 검증 없는 커스텀 수익
수동 수익 추적
Purchase 객체 없이 통화, 금액 및 선택적 제품 세부 정보를 전달하여 수익을 추적합니다. 이 방법은 검증을 위한 거래 영수증을 제공하지 않습니다.
중요: 이 메서드를 사용하면 Singular이 거래를 검증할 수 없습니다. 가능한 경우 항상 위에서 설명한 Purchase 객체 메서드를 사용할 것을 강력히 권장합니다.
Purchase 없는 revenue 메서드
통화, 금액 및 선택적 제품 세부 정보와 함께 수익 이벤트를 전송합니다.
메서드 시그니처:
Singular.revenue(String currency, double amount)
Singular.revenue(String currency, double amount, String productSKU, String productName, String productCategory, int productQuantity, double productPrice)
Singular.revenue(String currency, double amount, Map<String, Object> attributes)
사용 예시
// Without product details
Singular.revenue("USD", 5.50)
// With product details
Singular.revenue("EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee", 1, 5.00)
// With product details in an attribute map
val attributes = mutableMapOf<String, Any>().apply {
put("product_id", "com.app.premium")
put("transaction_id", "T12345")
put("quantity", 1)
put("is_trial", false)
}
Singular.revenue("USD", 9.99, attributes)
// Without product details
Singular.revenue("USD", 5.50);
// With product details
Singular.revenue("EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee", 1, 5.00);
// With product details in an attribute map
Map<String, Object> attributes = new HashMap<>();
attributes.put("product_id", "com.app.premium");
attributes.put("transaction_id", "T12345");
attributes.put("quantity", 1);
attributes.put("is_trial", false);
Singular.revenue("USD", 9.99, attributes);
Purchase 없는 customRevenue 메서드
지정된 이벤트 이름, 통화, 금액 및 선택적 거래 속성과 함께 커스텀 수익 이벤트를 전송합니다.
메서드 시그니처:
Singular.customRevenue(String eventName, String currency, double amount)
Singular.customRevenue(String eventName, String currency, double amount, String productSKU, String productName, String productCategory, int productQuantity, double productPrice)
Singular.customRevenue(String eventName, String currency, double amount, Map<String, Object> attributes)
사용 예시
// Without product details
Singular.customRevenue("MyCustomRevenue", "USD", 5.50)
// With product details
Singular.customRevenue("MyCustomRevenue", "EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee", 1, 5.00)
// With product details in an attribute map
val attributes = mutableMapOf<String, Any>().apply {
put("product_id", "com.app.premium")
put("transaction_id", "T12345")
put("quantity", 1)
put("is_trial", false)
}
Singular.customRevenue("MyCustomRevenue", "USD", 9.99, attributes)
// Without product details
Singular.customRevenue("MyCustomRevenue", "USD", 5.50);
// With product details
Singular.customRevenue("MyCustomRevenue", "EUR", 5.00, "SKU1928375", "Reservation Fee", "Fee", 1, 5.00);
// With product details in an attribute map
Map<String, Object> attributes = new HashMap<>();
attributes.put("product_id", "com.app.premium");
attributes.put("transaction_id", "T12345");
attributes.put("quantity", 1);
attributes.put("is_trial", false);
Singular.customRevenue("MyCustomRevenue", "USD", 9.99, attributes);
하이브리드 이벤트 추적 (고급)
최적의 어트리뷰션을 위해 앱에 연동된 Singular SDK를 통해 모든 이벤트와 수익을 전송하세요. 다만 필요한 경우 Singular은 다른 소스에서 이벤트를 수집할 수 있습니다.
Singular SDK 외부에서 전송되는 이벤트는 Singular의 서버 간(S2S) 이벤트 문서 를 준수해야 하며 정확한 어트리뷰션을 위해 일치하는 기기 식별자를 제공해야 합니다.
중요:
서버 간 요청의 기기 식별자가 Singular SDK가 기록한 식별자와 일치하지 않으면 불일치가 발생합니다:
- 조기 이벤트: Singular SDK가 기기 식별자를 기록하기 전에 이벤트가 도착하면, 해당 이벤트는 알 수 없는 기기의 "첫 세션"이 되어 자연 어트리뷰션으로 처리됩니다
- 불일치 식별자: Singular SDK가 서버 간 요청의 식별자와 다른 기기 식별자를 기록한 경우, 이벤트가 잘못 어트리뷰션됩니다
하이브리드 이벤트 추적 가이드
내부 서버에서 이벤트 전송
내부 서버에서 수익 데이터를 수집하여 캠페인 성과와 ROI를 분석하세요.
요구사항:
- 기기 식별자 캡처: 인앱 회원가입 또는 로그인 이벤트 중에 기기 식별자를 캡처하고 전달한 다음, 이 데이터를 User ID와 함께 서버에 저장하세요. 정확한 어트리뷰션을 위해 사용자가 새 앱 세션을 생성할 때 식별자를 업데이트하세요
- 플랫폼별 식별자: 플랫폼에 맞는 기기 식별자(예: iOS 기기의 경우 IDFA 또는 IDFV)와 함께 서버 측 이벤트를 전송하세요
- 실시간 업데이트: Singular Internal BI 포스트백 메커니즘을 사용하여 이벤트를 실시간으로 엔드포인트에 푸시하세요. Internal BI Postback FAQ 를 참고하세요
- 구현 세부 정보: 서버 간 연동 가이드의 "Tracking Revenue" 섹션을 확인하세요
수익 제공업체에서 이벤트 전송
RevenueCat 또는 adapty와 같은 서드파티 수익 제공업체를 연동하여 구매 및 구독 수익을 Singular에 전송하세요.
지원되는 제공업체:
- RevenueCat: 자세한 내용은 RevenueCat 문서 를 참고하세요
- adapty: 자세한 내용은 adapty 문서 를 참고하세요
Segment에서 이벤트 전송
Segment에서 "Cloud-Mode" 데스티네이션을 추가하여 Singular SDK와 병행하여 Segment가 Singular로 이벤트를 전송하도록 설정하세요.
자세한 설정 방법은 구현 가이드 Singular-Segment 연동 을 참고하세요.