서버 간 - EVENT 엔드포인트 API 참조

문서

이벤트 엔드포인트 API 레퍼런스

SDK 구현의 대안으로 서버 간 연동을 통해 Singular의 REST API를 사용하여 어트리뷰션 분석 및 캠페인 최적화를 위한 인앱 이벤트와 구매을 추적합니다.


개요

서버 간 사용 사례

EVENT API를 사용하면 앱이 사용자 상호작용 데이터를 백엔드로 전달하여 이벤트 어트리뷰션 및 구매 분석 보고를 위해 Singular의 서버로 전송하는 인앱 이벤트 추적이 가능합니다.

지원되는 기능

  • 이벤트 어트리뷰션: 사용자 행동을 마케팅 캠페인에 연결
  • 구매 추적: 인앱 구매 및 트랜잭션 측정 및 어트리뷰션
  • 커스텀 이벤트: 등록부터 레벨 완료까지 모든 사용자 상호 작용 추적
  • 이벤트 속성: 이벤트에 컨텍스트 데이터를 첨부하여 심층 분석 가능

데이터 흐름 아키텍처

서버 간 이벤트 추적은 4단계 데이터 전송 프로세스를 따릅니다.

  1. 클라이언트 수집: 앱이 이벤트 데이터 및 기기 식별자를 수집합니다.
  2. 서버 전송: 앱이 백엔드 서버로 이벤트 데이터를 전달합니다.
  3. 디바이스 그래프 쿼리: 서버가 Singular 디바이스 그래프에서 디바이스 세부 정보를 검색하거나 업데이트합니다.
  4. 이벤트 API 호출: 서버가 이벤트를 Singular REST API 엔드포인트로 전송합니다.

Event Data Flow Diagram


중요 요구 사항

전제 조건:

  • 이벤트 전 세션: 이벤트 추적 전에 세션이 설정되어야 합니다.
  • 순차적 순서: 세션 순서가 잘못되면 데이터 불일치 및 어트리뷰션 오류가 발생합니다.

연동 제약 조건:

  • 실시간 처리: 요청은 개별적으로 처리되며 일괄 처리는 지원되지 않습니다.
  • 시간순 이벤트: 이벤트는 발생한 순서대로 전송되어야 함
  • 중복 제거 없음: 데이터 중복을 방지하기 위해 서버 측 중복 제거를 구현합니다.
  • 데이터 영구성: 장치 수준 데이터는 수집 후 삭제할 수 없음 - 전송 전에 유효성 검사 수행

이벤트 추적 가이드라인

이름 지정 규칙과 데이터 구조에 대한 Singular의 모범 사례에 따라 이벤트 추적을 구현하세요.

이벤트 정의

이벤트 정의하기

S2S 연동을 구현하기 전에, 캠페인 성과 분석을 위해 추적하고자 하는 전체 이벤트 목록을 정의하세요.

이벤트 계획 가이드: 인앱 이벤트 정의하기

이벤트 네이밍 영향: Singular에 전달된 이벤트 이름은 보고서, 내보내기 및 포스트백에 이벤트가 표시되는 방식을 직접 결정합니다.


표준 이벤트 네이밍

모범 사례:


문자 제한

길이 제한:

  • 이벤트 이름: 최대 32자(ASCII가 아닌 경우 UTF-8로 변환 시 32바이트)
  • 이벤트 속성: 속성 키 및 값당 최대 500자(ASCII)

API 엔드포인트 선택

Singular는 서로 다른 연동 아키텍처에 최적화된 두 가지 EVENT 엔드포인트 버전을 제공합니다.

엔드포인트 선택: 연동 아키텍처와 디바이스 식별자 전략에 따라 엔드포인트를 선택하세요. 사용 사례에 따라 올바른 엔드포인트가 결정됩니다.

이벤트 엔드포인트 V1

V1 사용 사례

플랫폼별 장치 식별자(IDFA, IDFV, AIFA, ASID 등)에 의존하는 연동에는 이벤트 엔드포인트 V1을 사용하세요.

권장 대상:

  • 순수한 서버 측: Singular SDK 구현이 없는 서버 측 연동
  • 하이브리드(비 SDID): Singular SDK가 Singular 디바이스 ID(SDID)를 사용하지 않는 하이브리드 연동

엔드포인트 URL:

GET https://s2s.singular.net/api/v1/evt

이벤트 엔드포인트 V2

V2 사용 사례

Singular SDK가 SDID를 사용하여 세션을 추적하고 서버가 동일한 SDID를 사용하여 이벤트를 전송하는 하이브리드 연동에는 이벤트 엔드포인트 V2를 사용하세요.

권장 대상:

  • 하이브리드(SDID 기반): Singular SDK는 SDID로 세션을 추적하고 서버 측 이벤트는 동일한 SDID를 사용합니다.
  • 간소화된 식별자: 플랫폼별 디바이스 식별자(IDFA, AIFA 등)를 피하는 구현

엔드포인트 URL:

GET https://s2s.singular.net/api/v2/evt

계정 활성화: V2 엔드포인트는 SDID 사용을 위해 Singular 계정 구성이 필요합니다. 사용 설정은 솔루션 엔지니어 또는 CSM에게 문의하세요.


필수 장치 식별자

장치 식별자 요구 사항은 엔드포인트 버전 및 플랫폼에 따라 다릅니다. 아래에서 플랫폼별 요구 사항을 검토하세요.

V1 엔드포인트 식별자

플랫폼별 식별자

이벤트 엔드포인트 V1은 디바이스 운영 체제 및 앱 배포 방식에 따라 플랫폼별 광고 식별자를 요구합니다.

파라미터 플랫폼 설명
idfa iOS

광고주용 식별자(IDFA)는 광고 추적 및 캠페인 어트리뷰션을 가능하게 합니다.

ATT 요구사항: iOS 14.5 이상에서는 앱 추적 투명성을 통한 사용자 옵트인이 필요합니다.

  • IDFA를 사용할 수 없는 경우 매개변수 생략(사용자가 ATT를 거부한 경우)
  • NULL 또는 빈 문자열을 전달하지 마십시오.
  • IDFA 검색

예:DFC5A647-9043-4699-B2A5-76F03A97064B

idfv iOS

공급업체용 식별자(IDFV)는동일한 공급업체의 모든 앱에서 일관성을 유지합니다.

항상 필수입니다: ATT 상태 또는 IDFA 사용 가능 여부에 관계없이 반드시 포함해야 합니다.

예:21DB6612-09B3-4ECC-84AC-B353B0AF1334

aifa Android
(구글 플레이)

Google 광고 ID(GAID)는 사용자가 재설정 가능한 광고 추적을 가능하게 합니다.

  • Google Play 기기에서 필수
  • Google Play가 아닌 기기에서는 생략
  • NULL 또는 빈 문자열을 전달하지 마십시오.
  • AIFA 검색

예:8ecd7512-2864-440c-93f3-a3cabe62525b

asid Android
(구글 플레이)

Android 앱 세트 ID는동일한 개발자에 대해 개인정보 보호를 고려한 교차 앱 추적을 제공합니다.

항상 필수입니다: GAID 사용 가능 여부와 관계없이 Google Play 기기에 반드시 포함되어야 합니다.

예:edee92a2-7b2f-45f4-a509-840f170fc6d9

amid Android
(Amazon)

구글 플레이 서비스가 없는 아마존 파이어 디바이스용 아마존 광고 ID.

예:df07c7dc-cea7-4a89-b328-810ff5acb15d

oaid Android
(중국 OEM)

구글 플레이 서비스가 없는 중국 제조 기기용 OAID(오픈 광고 식별자).

  • Google Play가 없는 화웨이, 샤오미, OPPO, Vivo 기기에 필요합니다.
  • OAID 검색

예:01234567-89abc-defe-dcba-987654321012

andi Android
(비구글 플레이)

Android ID는 기기에서 생성된 64비트 식별자입니다.

사용 제한: Google Play 기기에서는 금지됩니다. 다른 식별자를 사용할 수 없고 Google Play를 통해 배포되지 않은 앱인 경우에만 사용하세요.

예시: fc8d449516de0dfb

sdid 웹, PC, 콘솔, CTV

네이티브 광고 식별자가 없는 플랫폼을 위한 Singular 기기 ID.

  • Web: Singular 웹 SDK에서 획득
  • PC/콘솔: 고유한 앱 설치를 나타내는 클라이언트 생성 UUIDv4
  • SDID 검색

예:40009df0-d618-4d81-9da1-cbb3337b8dec

sing 기업 전용

표준 식별자를 사용할 수 없는 특수한 사용 사례를 위한 클라이언트 정의 식별자.

제한됨: 기업 고객 전용-Singular 솔루션 엔지니어가 앱별로 활성화해야 합니다.

예:da534a95-1b1b-47d4-94b6-07955ec85177


V2 엔드포인트 식별자

SDID 전용 요구 사항

이벤트 엔드포인트 V2는 모든 플랫폼에 대해 Singular 디바이스 ID(SDID)만 필요하므로 디바이스 식별이 간소화됩니다.

매개변수 설명
sdid

플랫폼: iOS, Android, 웹, PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV

Singular SDK에서 획득하거나 PC/콘솔/TV용 클라이언트 측에서 생성한 Singular 디바이스 ID.

  • iOS/안드로이드: SDID 사용을 위해 계정 활성화가 필요함 - SDK 콜백 방식으로 초기화 후 SDID 제공
  • 식별자 간소화: AIFA, ASID, IDFA, IDFV 매개변수 필요 없음
  • 웹: Singular 웹 SDK에서 가져옴
  • PC/콘솔/TV: 고유한 앱 설치를 나타내는 클라이언트 생성 UUIDv4
  • SDID 검색

예:40009df0-d618-4d81-9da1-cbb3337b8dec


필수 파라미터

모든 이벤트 요청에는 디바이스 식별자 외에 이러한 필수 파라미터가 포함되어야 합니다.

파라미터 형식: 모든 파라미터는 GET 메서드를 사용하여 URL 쿼리 파라미터로 전달해야 합니다. 파라미터를 JSON 요청 본문으로 보내지 마세요.

API 인증

파라미터 유형 설명
a string

API 인증을 위한 Singular SDK 키입니다.

검색 위치: Singular UI → 메인 메뉴 → 개발자 도구

중요: 리포팅 API 키는 사용하지 마세요. 요청이 거부됩니다.

예시: sdkKey_afdadsf7asf56


디바이스 매개변수

파라미터 설명
p

애플리케이션의 플랫폼(대소문자 구분).

허용되는 값: 안드로이드, iOS, 웹, PC, 엑스박스, 플레이스테이션, 닌텐도, 메타퀘스트, CTV

예시: Android

ip

디바이스의 공인 IPv4 IP 주소. IPv6도 지원되지만 어트리뷰션 호환성을 위해 IPv4를 권장합니다.

예시: 172.58.29.235

ve

이벤트 시점의 디바이스 OS 버전.

예시: 9.2


애플리케이션 매개변수

파라미터 설명
i

앱 식별자(대소문자 구분).

  • Android: 패키지 이름(예: com.singular.app)
  • iOS: 번들 ID(예: com.singular.app)
  • 웹: 제품 ID
  • PC/콘솔/TV: 지정 식별자

예시: com.singular.app

att_authorization_status
iOS

ATT(앱 추적 투명성) 상태 코드(iOS 14.5 이상).

상태 값:

  • 0 - 미정(프롬프트가 표시되지 않음)
  • 1 - 제한됨(디바이스 수준 추적 비활성화)
  • 2 - 거부됨(사용자가 권한 부여를 거부함)
  • 3 - 승인됨(사용자에게 권한 부여됨)

항상 필요: ATT가 구현되지 않은 경우에도 0 (미정)을 전달합니다.

예시: 3


이벤트 매개변수

파라미터 설명
n

추적 중인 이벤트의 이름입니다.

예시: sng_add_to_cart


선택적 매개변수

선택적 매개변수는 추가적인 컨텍스트와 기능으로 이벤트 추적을 향상시킵니다.

타임스탬프 매개변수

파라미터 유형 설명
utime int

이벤트의 10자리 유닉스 타임스탬프입니다.

예시: 1483228800

umilisec int

13자리 유닉스 타임스탬프(밀리초 포함)입니다.

예시: 1483228800000

ma
iOS, Android
string

디바이스 제조사(제조업체 이름). mo (모델)과 함께 사용해야 합니다.

디바이스 제조사 검색

예시 Samsung, LG, Apple

mo
iOS, Android
string

디바이스 모델. ma (제조사)와 함께 사용해야 합니다.

디바이스 모델 검색

예시 iPhone 4S, Galaxy SIII

lc
iOS, Android
string

IETF 로캘 태그 - 밑줄로 구분된 두 글자 언어와 국가 코드.

디바이스 로캘 검색

예시: en_US

bd
iOS, Android
string

URL로 인코딩된 디바이스 빌드 식별자.

디바이스 빌드 검색

예시: Build%2F13D15


이벤트 속성

파라미터 설명
e

사용자 지정 이벤트 속성을 지정하는 JSON URL 인코딩 문자열입니다.

JSON 구조입니다:

{
  "sng_attr_content_id": 5581,
  "sng_attr_content": "XBox",
  "sng_attr_content_type": "electronics"
}

URL로 인코딩된 예시:

%7B%22sng_attr_content_id%22%3A5581%2C%22sng_attr_content%22%3A%22XBox%22%2C%22sng_attr_content_type%22%3A%22electronics%22%7D
global_properties

이벤트에 전역적으로 적용되는 사용자 지정 키-값 쌍을 포함하는 JSON URL 인코딩된 개체입니다.

제한:

  • 최대 5개의 키-값 쌍
  • 키 및 값당 최대 200자

JSON:{"key1":"value1","key2":"value2"}

URL 인코딩:%7B%22key1%22%3A%22value1%22%2C%22key2%22%3A%22value2%22%7D


네트워크 파라미터

파라미터 설명
use_ip

Singular가 ip 매개변수 대신 HTTP 요청에서 IP 주소를 추출하도록 지시합니다.

제한사항:

  • Singular에 의한 IP 기반 지리적 위치를 방지합니다.
  • country 파라미터를 통해 두 글자 국가 코드 제공
  • ip 파라미터와 상호 배타적
  • ip 또는 use_ip중 하나를 제공해야 합니다.

예시: true

country

ISO 3166-1 알파-2두 글자 국가 코드.

필요한 경우: IP 주소를 사용할 수 없거나 use_ip=true

예: US


데이터 개인정보

파라미터 설명
data_sharing_options

데이터 공유에 대한 최종 사용자의 JSON URL 인코딩 동의. 이후의 모든 이벤트 요청에 대해 유지되고 전달되어야 합니다.

사용자 동의(옵트인):

{"limit_data_sharing":false}

사용자 거부(옵트아웃):

{"limit_data_sharing":true}

URL 인코딩 예:%7B%22limit_data_sharing%22%3Atrue%7D


교차 디바이스 지원

파라미터 설명
custom_user_id

교차 기기 추적을 위한 내부 사용자 ID입니다.

예시: 123456789abcd


SKAdNetwork 지원

파라미터 설명
skan_conversion_value
iOS

이벤트 시점의 최신 SKAdNetwork 전환 값입니다.

자세히 알아보기: SKAdNetwork 구현

예시: 7

skan_first_call_timestamp
iOS

SKAdNetwork API를 처음 호출한 유닉스 타임스탬프.

예시: 1483228800

skan_last_call_timestamp
iOS

이벤트 시점에 가장 최근에 SKAdNetwork API를 호출한 유닉스 타임스탬프입니다.

예시: 1483228800


구매 추적

적절한 유효성 검사 및 통화 처리를 통해 인앱 구매 및 구매 이벤트를 추적합니다.

필수 구매 매개변수

기본 구매 추적

자체 구매 유효성 검사를 수행할 때 구매 이벤트 추적에 필요한 최소 매개 변수입니다.

모범 사례: 이벤트 요청을 Singular에 보내기 전에 서버 측에서 앱 스토어를 통해 구매 이벤트를 검증합니다. 자체 검증을 수행하는 경우, 다음 파라미터만 필요합니다.

파라미터 유형 설명
is_revenue_event string

이벤트가 구매 이벤트인지 여부를 지정합니다.

  • 이벤트 이름이 __iap__또는 0이 아닌 amt 제공된 경우 생략할 수 있습니다.

예시: true

amt double

거래의 통화 금액입니다.

  • cur 매개변수와 함께 사용

예시: 2.51

cur string

ISO 4217세 글자의 대문자 통화 코드입니다.

  • amt 매개변수와 함께 사용

예: USD


구매 유효성 검사 매개변수

Singular 유효성 검사 구매

앱스토어에서 서버 측 구매 유효성 검사를 수행하기 위한 Singular의 선택적 파라미터입니다.

유효성 검사 요구 사항:

  • 앱스토어 구매 유효성 검사를 위해 Singular를 사용하는 경우 필수입니다.
  • 구매 영수증 및 서명 값의 올바른 구문 확인
  • 잘못된 서식으로 인해 Singular가 구매을 차단하고 __iapinvalid__ 이벤트를 생성합니다.
파라미터 설명
purchase_receipt
iOS, Android

구매 거래에서 받은 영수증입니다.

예(iOS):

MIISqwYJKoZI...cNqts0jvcNvPcK7yuj0KhJ9nTTQ54kDKfReihzc6aw==

예시(Android, URL 인코딩):

%7B%22orderId%22%3A%22GPA.1234%22%2C%22packageName%22%3A%22com.example%22%2C%22productId%22%3A%22com.example.product%22...
receipt_signature
Android

구매 영수증에 서명하는 데 사용되는 서명(Android 전용).

예시:

TyVJfHg8OAoW7W4wuJt...5agEDMnNXvhfrw==
purchase_product_id

제품 SKU 식별자.

예시: com.example.product

purchase_transaction_id

거래 식별자.

예(iOS): 380000123004321

예(Android):GPA.1234-1234-1234-12345


요청 예제

샘플 코드는 여러 프로그래밍 언어에서 EVENT 엔드포인트 연동을 보여줍니다.

예제 면책 조항: 코드 샘플에는 모든 필수 매개변수가 포함되어 있지 않을 수 있습니다. 프로덕션 구현 전에 전체 매개변수 목록을 확인하시기 바랍니다. 개발/테스트에는 고유한 i (앱 식별자)를 사용하세요.

PYTHONCURLHTTPJAVA

Python 예제

import requests

params = {
    'a': 'sdk_key_here',
    'p': 'Android',
    'i': 'com.singular.app',
    'ip': '10.1.2.3',
    've': '9.2',
    'ma': 'samsung',
    'mo': 'SM-G935F',
    'lc': 'en_US',
    'bd': 'Build/13D15',
    'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
    'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
    'n': 'sng_add_to_cart'
}

response = requests.get('https://s2s.singular.net/api/v1/evt', params=params)
print(response.json())

응답 코드 및 오류

EVENT 엔드포인트는 요청 성공 또는 실패를 나타내는 HTTP 상태 코드와 JSON 응답을 반환합니다.

전체 오류 문서: S2S 응답 코드 및 오류 처리


테스트 및 검증

실시간 데이터 유효성 검사를 위해 Singular SDK 콘솔을 사용하여 프로덕션 배포 전에 S2S 이벤트 연동을 검증하세요.

테스트 절차

엔드투엔드 검증

  1. 테스트 디바이스를 등록합니다: 디바이스 광고 ID를 획득하고 Singular SDK 콘솔에추가합니다.
  2. 콘솔 로깅을 활성화합니다: SDK 콘솔에 디바이스 식별자를 추가하여 테스트 데이터를 캡처합니다.
  3. 개발 앱 ID 사용: 앱 식별자를 개발 버전(예: com.singular.app.dev)으로 재정의하여 테스트와 프로덕션 데이터를 분리합니다.
  4. 빌드 및 실행: 종료된 상태에서 앱 빌드 또는 열기
  5. 클라이언트 데이터 유효성 검사: 앱이 필요한 모든 Singular 데이터 포인트를 서버로 전송하는지 확인합니다.
  6. 세션 확인: 서버가 모든 필수 파라미터와 함께 https://s2s.singular.net/api/v1/launch 로 세션 요청을 보내는지 확인합니다.
  7. SDK 콘솔(세션)을 확인합니다: 몇 초 내에 SDK 콘솔에 세션 이벤트가 표시되어야 합니다.

SDK Console Session Event


이벤트 테스트

  1. 이벤트 트리거: 앱에서 이벤트 트리거를 진행합니다.
  2. 이벤트 데이터 검증: 모든 필수 Singular 데이터 포인트와 함께 서버로 전송된 이벤트를 확인합니다.
  3. 서버 요청 확인: 서버가 모든 필수 파라미터와 함께 https://s2s.singular.net/api/v1/evt로 이벤트 요청을 보냈는지 확인합니다.
  4. SDK 콘솔(이벤트)을 확인합니다: 몇 초 내에 SDK 콘솔에 EVENT가 표시되어야 합니다.
  5. 테스트를 반복합니다: 예상 값으로 전송된 모든 이벤트의 유효성 검사

SDK Console Event

중요 확인:

  • 이벤트 수신 전 앱 오픈/포그라운드에서 세션 이벤트 발생 확인
  • 이벤트 필수 데이터 포인트가 세션 데이터 포인트와 일치하는지 확인합니다.

성공 표시기: 이벤트가 SDK 콘솔에 나타나면 엔드투엔드 이벤트 연동 테스트가 성공적으로 완료된 것입니다!


추가 리소스

테스트 문서

종합 테스트 가이드: S2S 연동 테스트 가이드