인앱 이벤트 추적
인앱 이벤트를 추적하여 캠페인 성과를 분석하고 사용자 로그인, 가입, 튜토리얼 완료, 진행 마일스톤과 같은 핵심 성과 지표(KPI)를 측정하세요.
표준 이벤트 및 속성
이벤트 유형 이해하기
Singular은 범용 추적 요구사항과 앱별 추적 요구사항을 모두 지원하기 위해 두 가지 유형의 이벤트를 제공합니다.
-
표준 이벤트:
Singular이 인식하고 광고 네트워크가 리포팅 및 최적화를 위해 지원하는 사전 정의된 이벤트(예:
sngLogin,sngContentView)입니다. 표준 이벤트를 사용하면 Singular이 수동 정의 없이 자동으로 이벤트 목록에 추가하므로 설정이 간소화됩니다. 전체 이벤트 이름과 권장 속성은 표준 이벤트 및 속성 목록 을 참조하세요. -
커스텀 이벤트:
Singular의 표준 이벤트와 일치하지 않는, 앱 고유의 이벤트(예:
Signup,AchievementUnlocked)입니다.
권장 사항: 광고 네트워크와의 호환성과 Singular 이벤트 목록에서의 자동 인식을 위해 가능하면 항상 표준 이벤트를 사용하세요.
UA, 마케팅 또는 비즈니스 팀이 조직의 마케팅 KPI를 기반으로 이벤트 목록을 작성해야 합니다. 계획 수립 시 인앱 이벤트 추적 방법: Singular 어트리뷰션 고객을 위한 가이드 를 참조하세요.
커스텀 이벤트 제한 사항
커스텀 이벤트에는 서드파티 파트너 및 분석 솔루션과의 호환성을 보장하기 위한 특정 문자 및 인코딩 제약이 있습니다.
커스텀 이벤트 제한 사항:
- 언어: 서드파티 파트너 및 분석 솔루션과의 호환성을 보장하려면 이벤트 이름과 속성을 영어로 전달하세요
- 이벤트 이름: ASCII 32자로 제한됩니다. 비 ASCII 문자열은 UTF-8로 변환 시 32바이트 미만이어야 합니다
- 속성 및 값: ASCII 500자로 제한됩니다
이벤트 전송
Event 메서드
추가 속성 없이 간단한 이벤트를 추적하려면
event()
메서드를 사용하세요.
import 'package:singular_flutter_sdk/singular.dart';
// Track a simple custom event
Singular.event('SignUp');
// Track a standard event
Singular.event('sngLogin');
메서드 시그니처:
static void event(String eventName)
전체 메서드 목록은 event 메서드 레퍼런스 를 참조하세요.
EventWithArgs 메서드
추가 커스텀 속성과 함께 이벤트를 추적하여 더 풍부한 컨텍스트를 제공하고 리포트에서 세부적인 세그먼테이션을 활성화하세요.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom event with attributes
Singular.eventWithArgs('LevelComplete', {
'level': 5,
'score': 1250,
'time_spent': 45.3
});
// Track standard event with recommended attributes
Singular.eventWithArgs('sngTutorialComplete', {
'sngAttrContent': 'Flutter Basics',
'sngAttrContentId': '32',
'sngAttrContentType': 'video',
'sngAttrSuccess': 'yes'
});
메서드 시그니처:
static void eventWithArgs(String eventName, Map args)
전체 메서드 목록은 eventWithArgs 메서드 레퍼런스 를 참조하세요.
모범 사례
- 표준 이벤트 사용: 광고 네트워크와의 호환성과 Singular 이벤트 목록에서의 자동 인식을 위해 표준 이벤트를 우선 사용하세요
- 속성 검증: 전송하기 전에 속성이 예상 형식과 문자 수 제한에 부합하는지 확인하세요
- 이벤트 디버깅: 개발 중 SDK 로깅을 활성화하여 이벤트가 올바르게 전송되고 적절한 시점에 트리거되는지 확인하세요
- 팀과의 협업: 추적하는 이벤트가 앱의 KPI와 부합하도록 UA/마케팅 팀과 협력하세요
- 프로덕션 전 테스트: 개발 환경에서 이벤트를 테스트하여 Singular 대시보드의 데이터 정확성을 검증하세요
인앱 수익 추적
인앱 구매(IAP), 구독, 커스텀 수익원의 수익을 추적하여 캠페인 성과와 광고 비용 대비 수익(ROAS)을 측정하세요.
수익 데이터는 세 가지 채널을 통해 흐릅니다:
- 인터랙티브 리포트: Singular 대시보드에서 수익 지표를 확인합니다
- 익스포트 로그: 커스텀 분석을 위한 상세 ETL 데이터에 액세스합니다
- 실시간 포스트백: 수익 이벤트를 외부 플랫폼으로 전송합니다
수익 이벤트를 추적해야 하는 이유
- 풍부한 분석: 상세한 거래 데이터를 수집하여 Singular 리포트를 강화합니다
- 어뷰징 방지: 거래 영수증(예: Google Play 또는 Apple App Store)을 포함하여 구매를 검증하고 인앱 어뷰징에 대응합니다
- 캠페인 최적화: 수익을 마케팅 활동에 연결하여 ROI를 측정합니다
모범 사례: 전체 구매 객체 전달하기
Android(Google Play Billing) 또는 iOS(StoreKit)의 인앱 구매(IAP) 프로세스에서 반환된 구매 객체를 전달할 것을 강력히 권장합니다. 이를 통해 Singular은 다음을 포함한 포괄적인 거래 세부 정보를 수신합니다:
- Product ID
- 가격
- 통화
- Transaction ID
- 영수증 데이터(검증용)
전체 구매 객체를 전달하면 특히 Google Play 거래에 대해 더 풍부한 리포팅을 활성화하고 Singular의 어뷰징 탐지 기능을 활용할 수 있습니다.
인앱 구매 연동
IAP 구매 객체 캡처하기
Flutter in_app_purchase 패키지를 사용하여 완전한 거래 세부 정보가 포함된 구매 객체를 가져오세요.
- Flutter: iOS StoreKit과 Android Google Play Billing의 구매 세부 정보에 모두 액세스하려면 in_app_purchase 패키지를 사용하세요
InAppPurchase 메서드
수익 검증 및 어뷰징 방지를 위해 구매 세부 정보와 함께 인앱 구매 이벤트를 추적하세요.
메서드 시그니처:
static void inAppPurchase(String eventName, SingularIAP purchase)
static void inAppPurchaseWithAttributes(String eventName, SingularIAP purchase, Map attributes)
전체 메서드 목록은 inAppPurchase 메서드 레퍼런스 를 참조하세요.
완전한 IAP 구현 예시
IAP 이벤트를 캡처하고 플랫폼별 구매 객체와 함께 Singular으로 전송하는 완전한 구매 리스너를 구현하세요.
import 'dart:io' show Platform;
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_iap.dart';
Future<void> handlePurchase(PurchaseDetails purchaseDetails) async {
if (purchaseDetails.status != PurchaseStatus.purchased &&
purchaseDetails.status != PurchaseStatus.restored) {
return;
}
final response = await InAppPurchase.instance
.queryProductDetails({purchaseDetails.productID});
if (response.productDetails.isEmpty) {
return;
}
final product = response.productDetails.first;
// Extract price and currency with platform-specific handling
double price = 0.0;
String currency = 'USD';
if (Platform.isAndroid && product is GooglePlayProductDetails) {
final offer = product.productDetails.oneTimePurchaseOfferDetails;
price = (offer?.priceAmountMicros ?? 0) / 1000000;
currency = offer?.priceCurrencyCode ?? 'USD';
} else if (Platform.isIOS && product is AppStoreProductDetails) {
price = product.skProduct.price;
currency = product.skProduct.priceLocale.currencyCode ?? 'USD';
}
SingularIAP? singularPurchase;
if (Platform.isAndroid && purchaseDetails is GooglePlayPurchaseDetails) {
singularPurchase = SingularAndroidIAP(
price,
currency,
purchaseDetails.billingClientPurchase.signature,
purchaseDetails.billingClientPurchase.originalJson,
);
} else if (Platform.isIOS && purchaseDetails is AppStorePurchaseDetails) {
singularPurchase = SingularIOSIAP(
price,
currency,
purchaseDetails.productID,
purchaseDetails.skPaymentTransaction.transactionIdentifier ?? '',
purchaseDetails.verificationData.serverVerificationData,
);
} else {
return;
}
const String eventName = 'iap_purchase';
// Track with attributes (use only ONE tracking method)
Singular.inAppPurchaseWithAttributes(eventName, singularPurchase, {
'user_level': 42,
'is_first_purchase': true,
'gems_balance': 1500
});
await InAppPurchase.instance.completePurchase(purchaseDetails);
}
수동 수익 추적
구매 검증 없는 수익 추적
Purchase 객체 없이 통화, 금액, 선택적 제품 세부 정보를 전달하여 수익을 추적하세요. 이 메서드는 검증을 위한 거래 영수증을 제공하지 않는다는 점에 유의하세요.
중요:
유효한 구매 객체 없이 수익 이벤트를 전송하면 Singular은 거래를 검증하지 않습니다. 가능하면 항상 위에서 설명한
inAppPurchase()
메서드를 사용할 것을 강력히 권장합니다.
참고:
통화는 세 자리 ISO 4217 통화 코드로 전달하세요. 예:
USD
,
EUR
,
INR
.
CustomRevenue 메서드
지정된 이벤트 이름, 통화, 금액으로 커스텀 수익 이벤트를 추적하세요.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue event
Singular.customRevenue('PremiumUpgrade', 'USD', 9.99);
메서드 시그니처:
static void customRevenue(String eventName, String currency, double amount)
전체 메서드 목록은 customRevenue 메서드 레퍼런스 를 참조하세요.
CustomRevenueWithAttributes 메서드
지정된 이벤트 이름, 통화, 금액, 추가 커스텀 속성으로 커스텀 수익 이벤트를 추적하세요.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue event with attributes
Singular.customRevenueWithAttributes('PremiumBundlePurchase', 'USD', 99.99, {
'productSKU': 'premium_bundle_xyz',
'productName': 'Premium Bundle',
'productCategory': 'Bundles',
'productQuantity': 1,
'discount_applied': true
});
메서드 시그니처:
static void customRevenueWithAttributes(
String eventName,
String currency,
double amount,
Map attributes
)
전체 메서드 목록은 customRevenueWithAttributes 메서드 레퍼런스 를 참조하세요.
CustomRevenueWithAllAttributes 메서드
제품 SKU, 이름, 카테고리, 수량, 커스텀 속성을 포함한 가능한 모든 속성으로 커스텀 수익 이벤트를 추적하세요.
import 'package:singular_flutter_sdk/singular.dart';
// Track custom revenue with all attributes
Singular.customRevenueWithAllAttributes(
'CoinPackagePurchase',
'USD',
4.99,
'coin_package_abc123',
'Coin Pack 10',
'Virtual Currency',
2,
{
'payment_method': 'google_play',
'transaction_id': 'T12345'
}
);
메서드 시그니처:
static void customRevenueWithAllAttributes(
String eventName,
String currency,
double amount,
String productSKU,
String productName,
String productCategory,
int productQuantity,
Map attributes
)
전체 메서드 목록은 customRevenueWithAllAttributes 메서드 레퍼런스 를 참조하세요.
구독 수익
구독 추적하기
Singular은 Singular SDK를 사용하여 구독 이벤트를 구현하는 방법에 대한 포괄적인 가이드를 제공합니다. 이 가이드는 다양한 플랫폼에 걸친 인앱 구독 이벤트 추적을 다룹니다.
- 구독 수익을 추적하려면 구독 이벤트 기술 구현 가이드 를 참조하세요
하이브리드 이벤트 추적(고급)
CDP 및 서드파티 연동 비호환성: SDID는 CDP(Segment, mParticle) 또는 서드파티 구독 제공업체(RevenueCat, Adapty)와 호환되지 않습니다. SDID가 활성화된 경우 이러한 플랫폼을 이벤트 전달에 병행하여 사용할 수 없으며, 이는 어트리뷰션이 불완전하거나 손상되는 결과로 이어집니다.
Singular은 최적의 어트리뷰션을 위해 앱에 연동된 Singular SDK를 통해 모든 이벤트와 수익을 전송할 것을 권장합니다. 다만 필요한 경우 Singular은 다른 소스에서 이벤트를 수집할 수 있습니다.
Singular SDK 외부에서 전송되는 이벤트는 Singular의 Server-to-Server Event 문서 요구사항 을 준수해야 하며, 올바른 어트리뷰션을 위해 일치하는 디바이스 식별자를 제공해야 합니다.
중요:
Server-to-Server 이벤트 요청에 사용된 디바이스 식별자가 Singular의 디바이스 식별자와 일치하지 않으면 불일치가 발생합니다. 다음 가능성에 유의하세요:
- 조기 이벤트: Singular SDK가 App Session에서 디바이스 식별자를 기록하기 전에 이벤트 요청이 수신되면, 해당 이벤트 요청은 알 수 없는 디바이스의 "첫 세션"으로 간주되어 Singular은 해당 디바이스를 오가닉 어트리뷰션 으로 어트리뷰션합니다
- 불일치 식별자: Singular SDK가 디바이스 식별자를 기록했지만 Server-to-Server Event 요청에 지정된 디바이스 식별자와 다른 경우, 해당 이벤트는 잘못 어트리뷰션됩니다
하이브리드 이벤트 추적 가이드
내부 서버에서 이벤트 전송하기
내부 서버에서 수익 데이터를 수집하여 캠페인 성과와 ROI를 분석하세요.
요구사항:
- 디바이스 식별자 캡처: 인앱 가입 또는 로그인 이벤트에서 디바이스 식별자를 캡처하여 전달하고, 이 데이터를 User ID와 함께 서버에 저장하세요. 디바이스 식별자는 사용자에 대해 변경될 수 있으므로, 사용자가 앱 세션을 생성할 때 식별자를 업데이트하세요. 이렇게 하면 서버 측 이벤트가 올바른 디바이스에 어트리뷰션되도록 보장됩니다
- 플랫폼별 식별자: 서버 측 이벤트는 플랫폼별로 다르며, 디바이스 플랫폼과 일치하는 디바이스 식별자로만 전송해야 합니다(예: iOS 디바이스는 IDFA 또는 IDFV, Android 디바이스는 GAID)
- 실시간 업데이트: Singular Internal BI 포스트백 메커니즘을 사용하여 이벤트를 실시간으로 내부 엔드포인트에 푸시하면 서버 측 데이터 세트를 업데이트할 수 있습니다. Internal BI Postback FAQ 를 참조하세요
- 구현 세부 정보: 자세한 내용은 Server-to-Server Integration 가이드의 수익 추적 섹션을 검토하세요
수익 제공업체에서 이벤트 전송하기
RevenueCat 또는 adapty와 같은 서드파티 수익 제공업체를 연동하여 구매 및 구독 수익을 Singular으로 전송하세요.
지원되는 제공업체:
- RevenueCat: 자세한 내용은 RevenueCat 문서 를 참조하세요
- adapty: 자세한 내용은 adapty 문서 를 참조하세요
- Superwall: 자세한 내용은 Superwall 문서 를 참조하세요
- Xsolla: 자세한 내용은 Xsolla 문서 를 참조하세요
Segment에서 이벤트 전송하기
Segment에서 "Cloud-Mode" 데스티네이션을 추가하여 Singular SDK와 병행하여 Segment가 Singular으로 이벤트를 전송하도록 설정하세요.
자세한 설정 방법은 구현 가이드 Singular-Segment 연동 을 참조하세요.