인앱구매 검증(in-app purchase validation)이란 무엇인가요?
인앱구매(IAP, In-app purchase) 검증은 고객사 Android와 iOS 앱의 매출 이벤트를 Singular에서 검증하여 유효하지 않거나 프러드 가능성이 있는 사용자 구매를 감지하고 수익 메트릭이 왜곡되지 않도록 하는 프로세스입니다.
유효하지 않은 구매는 왜 발생하나요?
유효하지 않은 구매는 주로 다음과 같은 프러드 유형에 의해 발생합니다.
- 유저 프러드: 실제 유저가 실결제 없이 해킹 등의 방법으로 인앱구매 기반의 서비스나 아이템을 획득
- 마케팅 프러드: 프러드 퍼블리셔가 KPI를 높이고 진성 유저를 획득하는 것처럼 보이기 위해 가짜 매출 이벤트를 전송
Singular는 어떻게 구매를 검증하나요?
유저가 Android와 iOS 앱에서 금융 결제를 할 때 Google Play와 Apple App Store는 디지털 영수증(receipt)를 생성합니다. 구매 상세 정보를 인코딩한 각 영수증은 Google / Apple에서 암호화하여 서명합니다.
매출 이벤트와 함께 이 구매 영수증을 보내면 Singular가 구매의 적합성을 확인할 수 있습니다.
구매 영수증이 포함된 매출 이벤트를 받으면 Singular는 다음 단계에 따라 이를 확인합니다.
- Singular에서 영수증 수신
- 영수증이 재사용되지 않았는지 확인 (이전 트랜잭션에서 사용되었는지 여부)
- 영수증의 서명 유효성 확인.
- iOS의 경우 Apple의 인증서를 사용하여 확인
- Android의 경우 앱의 라이센싱 키를 사용하여 확인 (해당 키가 제공된 경우)
- 영수증의 세부 사항이 앱과 트랜잭션 세부 사항과 일치하는지 확인
만약 위 과정에서 매출 이벤트가 유효하지 않다고 확인되면 해당 이벤트를 __iapinvalid__라는 이름으로 재명명하여 분류합니다.
주의: 해당 프로세스의 정확성을 높이려면 다음 정보를 제공하세요.
- Android 라이센싱 키: 이를 통해 Singular가 Android에서 암호화한 영수증을 검증할 수 있습니다. 자세한 내용은 Google Play 라이센싱 키 추가 가이드를 참조하세요.
- 제품 SKU 식별자(product SKU identifier) 및 트랜잭션 식별자(transaction identifier): 자세한 내용은 각 SDK 문서(Unity, React Native, Android, iOS) 혹은 S2S 문서를 확인하세요.
구매 영수증은 어떻게 보내나요?
구매 영수증을 보내기 위해서는 사용하는 플랫폼과 연동 방식에 따라 올바른 인앱구매 리포팅 메서드를 사용해야 합니다.
영수증 없이 Singular로 매출 이벤트를 보내는 경우 어떻게 되나요?
영수증이 없는 것 자체가 매출 이벤트의 프러드 가능성을 반영하는 지표가 될 수 있습니다.
특정 앱 버전에서 Singular로 모든 구매에 영수증을 포함하여 보내기 시작하여 해당 앱 버전이 앱 스토어에 라이브된 이후라면 해당 버전 이상의 모든 앱 내의 매출 이벤트는 영수증을 포함하여야 합니다.
Singular에서 영수증이 없는 모든 매출 이벤트를 거부하려면 Apps 페이지에서 영수증 없는 인앱구매 거부(Reject IAP Without Receipt) 옵션을 활성화 하세요.
주의: 위 옵션을 활성화하기 전 앱을 인스톨하거나 업데이트한 유저로부터 발생된 매출은 거부되지 않을 수 있습니다. 옵션 활성 일자는 토글 버튼 옆에 표시됩니다.
구매 검증 결과는 리포트에 어떻게 반영되나요?
구매 검증이 활성화되면 유효한 매출만이 리포트의 Revenue 필드에 집계됩니다.
구매 검증 결과는 로그(export logs)에 어떻게 반영되나요?
Export Logs 메뉴의 Event와 Postback 유형 탭에서 다음 필드가 포함됩니다.
필드 | 설명 |
Event name | 영수증이 유효하지 않은 경우 이벤트 이름이 __iapinvalid__로 변경되어 표기 |
Event revenue | 영수증이 유효하지 않은 경우 revenue가 0 |
Received revenue event | 검증 전의 이벤트 이름 |
Received revenue | 검증 전의 revenue |
Is revenue receipt included | 구매 영수증의 첨부 여부 |
Is revenue valid | 구매 유효성의 판정 결과 |
구매 검증 결과는 포스트백에 어떻게 반영되나요?
내부 BI 포스트백
Singular에서 다음 파라미터를 보냅니다.
파라미터 | 설명 |
event_name | 영수증이 유효하지 않은 경우 이벤트 이름이 __iapinvalid__로 변경되어 표기 |
amount | 영수증이 유효하지 않은 경우 revenue가 0 |
received_revenue_event | 검증 전의 이벤트 이름 |
received_revenue | 검증 전의 revenue |
purchase_receipt_included | 구매 영수증의 첨부 여부 |
purchase_receipt_valid | 구매 유효성의 판정 결과 |
커스텀 포스트백
커스텀 포스트백을 설정하려면 Postback Macros & Passthrough Parameters 가이드의 Event Macros 항목을 참조하세요.
주의: 거부된 매출의 포스트백을 받으려면 __iapinvalid__ 이벤트에 대한 포스트백을 설정하세요.