기기 귀인 확인
연동 테스트 및 트래킹 링크 검증을 위해 Singular Device Assist 앱과 Attribution Details API 엔드포인트를 사용하여 기기 귀인을 검증하는 종합 가이드.
Singular는 기기 귀인을 확인하는 두 가지 방법을 제공합니다: 모바일 테스트용 Device Assist 앱과 프로그래밍 방식 검증을 위한 Attribution Details API 엔드포인트.
귀인 검증은 새로운 SDK/S2S 연동 테스트와 캠페인 배포 전 Singular Links 유효성 확인의 필수 단계입니다.
| 대상 독자 | UA 매니저, 개발자, QA 엔지니어 |
| 사전 요구사항 |
|
귀인 검증 사용 사례
귀인 확인이 필요한 시점
기기 귀인 검증은 연동 및 캠페인 배포 라이프사이클의 여러 단계에서 중요합니다.
| 사용 사례 | 목적 |
|---|---|
| SDK/S2S 연동 테스트 |
연동 개발 중 SDK가 설치를 올바르게 트래킹하고 올바른 소스에 귀인하는지 검증합니다. |
| 트래킹 링크 유효성 검증 |
올바른 귀인 및 파라미터 전달을 보장하기 위해 캠페인 배포 전 새 Singular Links를 테스트합니다. |
| 캠페인 문제 해결 | 테스트 기기 귀인 상태를 확인하여 라이브 캠페인의 귀인 문제를 진단합니다. |
| 파트너 연동 검증 | 광고 파트너에서 Singular 플랫폼으로 귀인 데이터가 올바르게 전달되는지 확인합니다. |
방법 비교
검증 방법 선택
테스트 요구사항과 기술적 역량에 따라 적절한 검증 방법을 선택하세요.
| 방법 | 적합한 경우 | 요구사항 | 제한 사항 |
|---|---|---|---|
| Device Assist 앱 |
|
|
수동 프로세스, 자동화 제한 |
| Attribution Details API |
|
|
테스트 전용 (베타), 기술 지식 필요 |
방법 1: Device Assist 앱
테스트 기기에서 직접 기기 귀인 상태, 설치 세부 정보, 이벤트 트래킹 요약을 시각적으로 빠르게 확인할 수 있는 모바일 앱.
Device Assist 앱 개요
앱 기능
Device Assist 앱은 특정 기기에 대해 Singular에 기록된 종합적인 귀인 정보를 표시합니다.
표시되는 귀인 데이터:
- 설치 귀인: 설치 타임스탬프, 귀인된 매체, 캠페인 이름
- 리인게이지먼트 귀인: 리인게이지먼트 타임스탬프, 귀인된 매체, 캠페인 세부 정보
- 이벤트 요약: Singular가 해당 기기에 대해 트래킹한 세션 및 인앱 이벤트
- 기기 식별자: 트래킹에 사용된 IDFA, IDFV, GAID 또는 기타 식별자
Device Assist 앱 사용 방법
단계별 절차
| 1 |
Device Assist 앱 다운로드테스트 기기에 Singular Device Assist 앱을 설치하세요:
|
| 2 |
귀인 확인 시작Device Assist 앱을 열고 메인 메뉴에서 구현 확인 을 선택하세요.
추가 기능: Device Assist 앱은 메인 메뉴에서 접근 가능한 기기 식별자 조회 및 SDK 구현 검증 도구도 제공합니다. |
| 3 |
기기 식별자 선택앱이 플랫폼에 맞는 기기 식별자를 자동으로 선택합니다. 선택을 확인하고 구현 확인 을 다시 탭하여 진행하세요.
식별자 선택:
|
| 4 |
귀인 세부 정보 검토앱이 Singular 플랫폼에 기록된 기기의 전체 귀인 정보를 표시합니다.
표시되는 귀인 정보
설치 귀인 세부 정보
설치 타임스탬프: 첫 번째 앱 실행 (설치 이벤트)의 날짜 및 시간 귀인된 매체: 설치 귀인을 받은 광고 매체 또는 소스 (예: Facebook, Google Ads, 오가닉) 캠페인 이름: 설치에 귀인된 마케팅 캠페인 추가 파라미터: 트래킹 링크를 통해 전달된 캠페인 특정 파라미터 설치 귀인 해석
리인게이지먼트 귀인 세부 정보
리인게이지먼트 타임스탬프: 최신 리인게이지먼트 세션의 날짜 및 시간 귀인된 매체: 사용자를 앱으로 다시 유입시킨 소스 캠페인 이름: 세션에 귀인된 리인게이지먼트 캠페인 자기 귀인 매체: 자기 귀인 매체 (Twitter, Facebook, Google Ads, Snapchat 등)의 리인게이지먼트 귀인은 개인 정보 보호 이유로 "Unattributed"로 표시될 수 있습니다. 리인게이지먼트 귀인 요구사항리인게이지먼트 귀인이 발생하려면:
자세히 알아보기: 리인게이지먼트 귀인 FAQ
이벤트 트래킹 요약
Device Assist 앱은 Singular가 해당 기기에 대해 트래킹한 모든 인앱 이벤트의 요약을 표시합니다. 표시되는 이벤트 정보:
이벤트 트래킹 검증이벤트 요약을 사용하여 다음을 확인하세요:
|
Device Assist 문제 해결
일반적인 문제
가능한 원인
- 앱 미설치: 기기에 테스트 앱이 설치되지 않았거나 아직 열지 않음
- 잘못된 식별자: Device Assist가 앱 SDK에서 사용하지 않는 식별자를 확인 중
- SDK 미초기화: 앱에서 Singular SDK가 올바르게 초기화되지 않음
- 귀인 처리 중: 귀인 결정이 아직 완료되지 않음 (일반적으로 1~5분 소요)
해결 단계
- 테스트 앱이 기기에 설치되고 최소 한 번 열렸는지 확인
- 기기 식별자가 SDK에서 사용하는 식별자 유형과 일치하는지 확인 (iOS의 경우 IDFA vs IDFV)
- 앱 실행 후 5~10분 기다린 후 귀인 재확인
- 테스팅 콘솔 을 사용하여 SDK 연동 확인
가능한 원인
- 귀인 윈도우 초과: 설정된 귀인 윈도우 이후 설치 발생
- 일치하는 터치포인트 없음: 기기와 일치하는 클릭 없음
- 핑거프린트 불일치: 클릭과 설치 사이에 기기 핑거프린트 변경됨
- 링크 미클릭: 트래킹 링크 클릭 없이 스토어에서 직접 앱 설치
해결 단계
- 앱 설치 전 트래킹 링크를 클릭했는지 확인
- 귀인 윈도우 설정이 설치에 충분한 시간을 허용하는지 확인
- 안정적인 테스트를 위해 트래킹 링크에 기기 ID 사용 (결정적 귀인)
- 클릭 및 설치 중 안정적인 네트워크 연결 확인
- 다른 기기에서 테스트하거나 식별자를 재설정하고 재시도
방법 2: Attribution Details API
연동 테스트 및 CI/CD 파이프라인을 위한 자동화된 귀인 검증이 가능한 프로그래밍 방식 API 엔드포인트.
베타 기능 안내: Attribution Details API 엔드포인트는 베타 기능입니다. 테스트 목적으로만 사용하세요 — 프로덕션 앱이나 대용량 환경에서는 호출하지 마세요.
API 엔드포인트 사양
요청 형식
엔드포인트 URL:
https://api.singular.net/api/attribution/attribution_details
요청 방식: GET
전체 요청 예시:
https://api.singular.net/api/attribution/attribution_details?keyspace=idfa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here
쿼리 파라미터
필수 파라미터
| 파라미터 | 유형 | 설명 |
|---|---|---|
api_key
|
문자열 |
플랫폼의 Singular 리포팅 API 키. 위치: 대시보드 → 개발자 도구 → API 키 → 리포팅 API 키 중요: SDK 키가 아닌 리포팅 API 키를 사용하세요. 두 키는 서로 다른 용도로 사용됩니다. |
device_id
|
문자열 |
기기의 광고 식별자 값.
|
keyspace
|
문자열 (열거형) |
|
API 응답
응답 형식
API는 요청된 기기의 귀인 세부 정보를 포함하는 JSON 배열을 반환합니다.
응답 샘플
[
{
"app_long_name": "com.example.myapp",
"app_name": "My App",
"install_info": {
"install_time": "2020-06-10 11:58:46",
"network": "Network 1",
"additional_parameters": {
"kw": "my keyword",
"pcid": "1234"
},
"campaign_name": "Campaign Name",
"view_through_attribution": false
},
"re_engagement_info": {
"notes": "Attributions from Self-Attributing networks including: Twitter, Facebook, Google Ads, Snapchat, etc are redacted and always show as 'Unattributed'",
"install_time": "2020-06-15 15:27:12",
"network": "Unattributed"
},
"uninstall_pre_requisites": {
"gcm_token": "enE8iQR10RI:APA91bERgfA_xm8T7zgqH9OW_1s05SFFmKnle1zIm0cMrDfuaSxEmC_3j72dj4qN36vh5V8TAEnrXa3Pq3SmLW-XNOHP7daMwcBrBTibdkv_pKMJbN9SbefV6_9nuEfIeI5Zhtz0nlLY"
},
"events": [
{
"event_name": "Session",
"first_event_time": "2020-04-02 00:09:55",
"last_event_time": "2020-04-07 20:59:55",
"event_count": 2
},
{
"event_name": "Save New Transaction",
"first_event_time": "2020-04-02 00:11:51",
"last_event_time": "2020-04-02 00:11:51",
"event_count": 1
}
]
}
]
응답 파라미터
JSON 응답 필드
| 필드 | 설명 |
|---|---|
app_long_name
|
앱 번들 식별자 (예: com.example.myapp) |
app_name
|
Singular 플랫폼에 설정된 앱 표시 이름 |
install_info
|
설치 귀인 세부 정보 및 결정 정보를 포함하는 객체:
|
re_engagement_info
|
리인게이지먼트 귀인에 대해
자세히 알아보기: 리인게이지먼트 귀인 FAQ 개인 정보 보호 참고: 자기 귀인 매체 (Facebook, Google Ads, Twitter, Snapchat)의 리인게이지먼트 귀인은 개인 정보 보호 준수를 위해 "Unattributed"로 표시됩니다. |
events
|
SDK가 트래킹한 인앱 이벤트 요약을 포함하는 객체 배열:
|
uninstall_pre_requisites
|
앱 삭제 트래킹 설정을 포함하는 객체:
|
API 사용 예시
구현 예시
iOS 기기 (IDFA)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=idfa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here"
Android 기기 (GAID)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=aifa&device_id=12345678-1234-1234-1234-123456789012&api_key=your_api_key_here"
웹 트래킹 (SDID)
curl -X GET "https://api.singular.net/api/attribution/attribution_details?keyspace=sdid&device_id=singular_device_id_value&api_key=your_api_key_here"
Python 구현
import requests
import json
def check_attribution(keyspace, device_id, api_key):
"""
Check device attribution using Singular API
Args:
keyspace: Device identifier type (idfa, idfv, aifa, sdid)
device_id: Device identifier value
api_key: Singular Reporting API key
Returns:
Attribution data as JSON or None if error
"""
url = "https://api.singular.net/api/attribution/attribution_details"
params = {
'keyspace': keyspace,
'device_id': device_id,
'api_key': api_key
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error checking attribution: {e}")
return None
# Example usage
attribution_data = check_attribution(
keyspace='idfa',
device_id='12345678-1234-1234-1234-123456789012',
api_key='your_api_key_here'
)
if attribution_data:
print(json.dumps(attribution_data, indent=2))
# Extract install info
if attribution_data and len(attribution_data) 0:
install_info = attribution_data[0].get('install_info', {})
print(f"\nInstall Network: {install_info.get('network')}")
print(f"Campaign: {install_info.get('campaign_name')}")
print(f"Install Time: {install_info.get('install_time')}")
JavaScript 구현
/**
* Check device attribution using Singular API
*
* @param {string} keyspace - Device identifier type (idfa, idfv, aifa, sdid)
* @param {string} deviceId - Device identifier value
* @param {string} apiKey - Singular Reporting API key
* @returns {Promise} Attribution data or error
*/
async function checkAttribution(keyspace, deviceId, apiKey) {
const url = 'https://api.singular.net/api/attribution/attribution_details';
const params = new URLSearchParams({
keyspace: keyspace,
device_id: deviceId,
api_key: apiKey
});
try {
const response = await fetch(`${url}?${params.toString()}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Error checking attribution:', error);
throw error;
}
}
// Example usage
checkAttribution(
'idfa',
'12345678-1234-1234-1234-123456789012',
'your_api_key_here'
)
.then(data = {
console.log('Attribution Data:', JSON.stringify(data, null, 2));
// Extract install info
if (data && data.length 0) {
const installInfo = data[0].install_info || {};
console.log('\nInstall Network:', installInfo.network);
console.log('Campaign:', installInfo.campaign_name);
console.log('Install Time:', installInfo.install_time);
}
})
.catch(error = {
console.error('Failed to check attribution:', error);
});
API 문제 해결
일반적인 API 문제
문제
API가 귀인 데이터 대신 빈 배열
[]
을 반환합니다.
가능한 원인
- 귀인 데이터 없음: 기기에 앱이 설치된 적 없거나 세션이 트래킹되지 않음
- 잘못된 식별자: 기기 ID 또는 keyspace가 올바르지 않음
- 처리 시간 문제: 귀인 데이터가 아직 처리되지 않음 (설치 후 일반적으로 1~5분 소요)
해결 단계
- 기기 ID가 공백 없이 올바르게 복사되었는지 확인
- keyspace가 식별자 유형과 일치하는지 확인 (iOS의 경우 idfa vs idfv)
- 앱 설치 후 5~10분 기다린 후 쿼리 재시도
- Device Assist 앱을 사용하여 앱이 설치되고 트래킹되는지 확인
문제
API가 인증 오류 또는 401 Unauthorized 응답을 반환합니다.
가능한 원인
- 잘못된 API 키: API 키가 올바르지 않거나 제공되지 않음
- 잘못된 키 유형: 리포팅 API 키 대신 SDK 키 사용
- 키 만료: API 키가 취소되었거나 재생성됨
해결 단계
- 대시보드 → 개발자 도구 → API 키 → 리포팅 API 키로 이동
- 리포팅 API 키 복사 (SDK 키 아님)
- API 키가 요청에 올바르게 붙여넣기 되었는지 확인
- 키가 최근 재생성된 경우 새 키 값을 사용하는지 확인
보안 중요: API 키를 버전 관리에 커밋하거나 클라이언트 측 코드에 노출하지 마세요. 환경 변수 또는 안전한 설정 관리를 사용하세요.
문제
API가 429 Too Many Requests 또는 속도 제한 오류를 반환합니다.
가능한 원인
- 과도한 요청: 짧은 시간 내 너무 많은 API 호출
- 프로덕션 사용: 프로덕션 환경에서 API 사용 (의도된 사용 사례 아님)
해결 단계
- 코드에 지수 백오프 및 재시도 로직 구현
- API 요청 간격 조정 (최소 1초 간격 권장)
- API 호출 감소를 위해 가능한 경우 귀인 데이터 캐싱
- 합법적인 테스트에 더 높은 속도 제한이 필요한 경우 Singular 지원팀에 문의
베타 제한: Attribution Details API는 테스트 전용으로 설계되었습니다. 대용량 요청이 발생하는 프로덕션 애플리케이션에서는 사용하지 마세요.
모범 사례
연동 테스트 및 캠페인 검증 중 효과적인 귀인 검증을 위한 권장 사항.
테스트 워크플로
권장 테스트 프로세스
- 새 기기 사용: 캐시된 귀인을 피하기 위해 초기화된 기기를 사용하거나 테스트 전 광고 식별자를 재설정하세요
- 즉시 확인: 테스트 중 빠른 피드백을 위해 설치 후 5~10분 내에 귀인을 확인하세요
- 다양한 시나리오 테스트: 다양한 소스 (오가닉, 유료 캠페인, 리인게이지먼트)에 대한 귀인을 검증하세요
- 결과 기록: 연동 검증 문서화를 위해 귀인 검증 결과를 기록하세요
- 가능한 경우 자동화: 지속적인 검증을 위해 자동화 테스트 스위트에서 Attribution Details API를 사용하세요
방법 선택 가이드
각 방법의 사용 시기
| 시나리오 | 권장 방법 |
|---|---|
| 빠른 수동 테스트 | Device Assist 앱 — 개발 중 가장 빠른 시각적 검증 |
| 자동화 테스트 | Attribution Details API — CI/CD 파이프라인의 프로그래밍 방식 검증 |
| 비기술적 테스트 | Device Assist 앱 — 코딩 또는 API 지식 불필요 |
| 다수 기기 일괄 검증 | Attribution Details API — 여러 기기 확인 스크립팅 |
| 이벤트 트래킹 검증 | 두 방법 모두 — Device Assist로 빠른 확인, API로 상세 이벤트 분석 |
연동 검증 체크리스트
귀인 검증 체크리스트
완전한 귀인 검증:
- 설치가 올바른 매체/소스에 귀인됨
- 캠페인 이름이 예상 캠페인과 일치함
- 귀인 타임스탬프가 합리적임 (예상 기간 내)
- 귀인 방식이 적절함 (클릭 vs 노출)
- 트래킹 링크를 통해 커스텀 파라미터가 올바르게 전달됨
- 세션 이벤트가 올바르게 트래킹됨
- 커스텀 이벤트가 올바른 이름으로 표시됨
- 매출 이벤트가 금액 및 통화를 캡처함
- 리인게이지먼트 귀인이 작동함 (해당하는 경우)
- 앱 삭제 트래킹이 설정됨 (구현된 경우)
추가 리소스
귀인 테스트, SDK 연동 및 트래킹 링크 설정에 대한 전체 문서.
관련 문서
- 테스팅 콘솔 사용 방법 — SDK 연동 테스트 전체 가이드
- 트래킹 링크 테스트 방법 — 트래킹 링크 검증 절차
- Singular 모바일 앱 귀인 이해하기 — 귀인 방법론 및 프로세스
- 트래킹 링크 파라미터 및 리포트 기준 — 전체 파라미터 참조
- 리인게이지먼트 귀인 FAQ — 리인게이지먼트 귀인 문서