[NEW] iOS SDK: SKAdNetwork 지원 추가

Singular iOS SDK
다운로드 Singular iOS SDK version 10.1.3
호환성 iOS 8+
샘플 앱

Singular SDK를 전체적으로 연동한 샘플 앱을 확인해주세요. 베스트 프랙티스에 기반하여 여러 연동 부분이 어떻게 결합될 수 있는지 확인하세요.

연동 가이드

 

소개: SKAdNetwork와 SKAN

SKAdNetwork는 유저의 개인 정보를 침해하지 않고 모바일 인스톨 어트리뷰션을 판정하기 위한 Apple의 신규 프레임워크입니다. SKAdNetwork를 사용하면 사용자의 개인 식별 정보를 공유하지 않는 방식으로 앱 마케팅 캠페인 성과를 측정할 수 있습니다.

Singular의 새로운 iOS SDK 버전을 통해 최소한의 개발 리소스로도 SKAdNetwork를 원할히 구현할 수 있습니다.

본 SKAdNetwork 구현은 Singular가 SKAdNetwork를 매끄럽게 구현할 수 있도록 고안한 SKAN 표준안을 따릅니다. SKAN에 대한 더 자세한 내용은 SKAN 2020년 7월에 발표된 SKAN 사양을 참조하세요.

주의: 추후 iOS 14 버전의 변화에 따라 SDK에 점진적인 변화가 있을 수 있습니다.

SKAdNetwork 트래킹 활성화

Singular 초기화 이전에 skAdNetworkEnabled 설정 옵션을 켜면 앱 내 SKAdNetwork 트래킹을 활성화할 수 있습니다.

// SingularConfig 인스턴트화
SingularConfig* config = [[SingularConfig alloc] initWithApiKey:apiKey andSecret:secretKey];
// skAdNetworkEnabled 옵션을 추가하고 YES로 설정
config.skAdNetworkEnabled = YES;
// 시작
[Singular start:config];

전환값(Conversion Value) 업데이트 처리

관리 모드(Managed Mode)

기본적으로 SKAdNetwork 구현은 Singular 서버 측에서 전환값을 직접 관리합니다.

이를 통해 클라이언트측 코드를 직접 변경하는 대신 Singular 웹앱 플랫폼에서 전환값을 설정하고 변경할 수 있어 보다 편리하고 유연하게 사용할 수 있습니다.

또한 서버측 관리 모드로 SKAdNetwork 타이머 관리 역시 도울 수 있습니다. SKAdNetwork의 전환값은 SKAdNetwork 등록 이후 24시간 이내에만 업데이트할 수 있습니다. 전환값 업데이트를 호출할 때마다 해당 타이머는 24시간 연장됩니다. 따라서 전환값을 선택할 때 해당 이벤트가 업데이트 윈도우 내에 일어나도록 관리해야 합니다. 관리 모드에서는 새로운 앱 버전을 업데이트하지 않고도 언제든 전환 이벤트 설정을 바꿀 수 있습니다.

매뉴얼 모드

관리 모드 사용 대신 앱 코드 내에서 직접 전환값을 수동 업데이트하고자 한다면 SDK 초기화시 manualSkanConversionManagement를 YES로 설정하세요.

SingularConfig* config = 
[[SingularConfig alloc] initWithApiKey:apiKey andSecret:secretKey];
// SKAdNetwork 활성화 config.skAdNetworkEnabled = YES;
// 매뉴얼 전환값 업데이트 활성화 config.manualSkanConversionManagement = YES;
[Singular start:config];

이후 앱의 생명주기에 맞춰 skanUpdateConversionValue 메서드를 사용해서 전환값을 업데이트할 수 있습니다.

skanUpdateConversionValue 메서드 (Objective-C)
정의 SKAdNetwork 전환값을 수동으로 업데이트
메서드 + (BOOL)skanUpdateConversionValue:(NSInteger)conversionValue;
사용예
// signup 이벤트 발생
[Singular event:@"SignUp"];
// 전환값을 7로 업데이트 [Singular skanUpdateConversionValue:7];

주의: 매뉴얼 업데이트 옵션을 “yes”로 설정하지 않으면 skanUpdateConversionValue 메서드가 동작하지 않습니다.

전환값 획득

현재의 전환값을 확인하려면 skanGetConversionValue 메서드를 사용하세요. 이 메서드는 관리 모드와 매뉴얼 모드 모두에서 사용할 수 있습니다.

skanGetConversionValue 메서드 (Objective-C)
정의 Singular SDK에서 트래킹된 현재 전환값 획득
메서드 + (NSNumber *)skanGetConversionValue;
사용예
NSNumber* conversionValue = [Singular skanGetConversionValue];

고급 옵션

SKAdNetwork 등록 지연

SKAdNetwork 트래킹 등록을 SDK 초기화 시점에 바로 하지 않고 앱 생명주기 내의 다른 시점에 하고자 한다면 SDK 초기화시에 skAdNetworkEnabled = "no"를 설정하고 이후 skanRegisterAppForAdNetworkAttribution 메서드를 통해 등록할 수 있습니다.

skanRegisterAppForAdNetworkAttribution 메서드 (Objective-C) 
정의 SKAdNetwork 트래킹 등록
메서드 + (void)skanRegisterAppForAdNetworkAttribution;
사용예
// SingularConfig 초기화
SingularConfig* config = [[SingularConfig
alloc] initWithApiKey:apiKey andSecret:secretKey];
// SKAdNetwork 등록 비활성화 config.skAdNetworkEnabled = NO;
// 시작 [Singular start:config];
// 추후 시점 - SKAdNetwork 등록 [Singular skanRegisterAppForAdNetworkAttribution];

기타 iOS 14 업데이트

AppTrackingTransparency 동의 처리

주의: 2020년 9월 3일, Apple은 발표를 통해 iOS 14의 특정 개인 정보 기능 도입의 지연을 안내했습니다. 특히 IDFA 사용을 위해 AppTrackingTransparency를 사용해야만 하는 요구 사항을 내년 초까지 지연하기로 했습니다. 이 변화 사항으로 iOS 14에서 IDFA가 사용 가능하므로 AppTrackingTransparency 팝업창을 구현하지 않기를 권장합니다. 더 많은 내용은 iOS 14 베타 7과 IDFA 사용 가능 포스팅에서 확인하세요.

이어지는 내용은 해당 지연 기간이 끝나고 iOS 14에서 아직 적용되지 않은 추후의 버전, 즉 IDFA 획득을 위해 AppTrackingTransparency가 필요하도록 요구되도록 변경되는 향후 시점에 적용되는 내용입니다.

iOS 14에서 예고된 또다른 변화는 디바이스의 IDFA 값을 포함한 유저 데이터 일부에 접근하려면 App Tracking Transparency 프레임워크를 통해 유저 동의를 받아야 한다는 것입니다.

Singular는 인스톨 어트리뷰션을 수행한 디바이스를 식별하기 위해 IDFA를 사용해 왔습니다. 디바이스의 IDFA를 얻을 수 없는 경우에는 확률론적 방법(더 알아보기)을 통해 어트리뷰션을 판정합니다. 하지만 ID 기반의 어트리뷰션이 보다 정확하므로 가급적 IDFA를 수집하는 것이 좋습니다.

이를 위해서는 IDFA 사용 동의를 얻고 Singular SDK가 유저 세션을 Singular 서버에 보내기 전에 IDFA를 수집할 수 있도록 하는 것이 좋습니다. 일단 SDK가 세션을 발생시킨 이후에는 해당 시점에 Singular가 얻을 수 있는 정보에 기반하여 인스톨 어트리뷰션 절차가 발동하게 되기 때문입니다.

SDK의 세션 발생을 지연하려면 Singular SDK 초기화시 waitForTrackingAuthorizationWithTimeoutInterval 옵션을 추가하세요. 아래 예제 코드에서 사용법을 확인할 수 있습니다.

  • SDK가 세션 및 유저 이벤트를 기록하지만 Singular 서버에는 보내지 않습니다.
  • App Tracking Transparency 동의가 수집되거나 거부되는 즉시, 혹은 타이머가 끝나는 시점에 SDK가 세션과 큐에 담긴 이벤트를 Singular 서버에 보냅니다. (해당 시점에 IDFA가 있으면 있는 상태로, 없으면 없는 상태로 보내집니다.)
  • Singular에서 어트리뷰션 절차를 진행합니다. IDFA가 수집 가능한 상태이면 ID 기반으로 어트리뷰션을, 가능하지 않다면 방법론적 어트리뷰션을 수행합니다.

예제 코드:

SingularConfig* config = 
[[SingularConfig alloc] initWithApiKey:apiKey andSecret:secretKey];
// SKAdNetwork 트래킹 등록 config.skAdNetworkEnabled = YES
// 이벤트를 보내기 전 트래킹 권한 획득을 5분간 기다립니다. config.waitForTrackingAuthorizationWithTimeoutInterval = 300
// 시작 [Singular start:config];
// 유저 동의 절차를 시작하기 위해
// ATTrackingManager로부터 requestTrackingAuthorizationWithCompletionHandler 호출 [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:
^(ATTrackingManagerAuthorizationStatus status){     // 권한 핸들러를 여기에 둡니다     // 주의: Singular SDK는 자동으로 권한 획득 혹은 거부 상태를 파악하고
// 초기화됩니다. }];

다음 표에서 본 연동시 발생 가능한 시나리오를 확인할 수 있습니다.

 

시나리오

IDFA 사용 가능 여부

유저가 동의 대화상자를 보고 타이머가 끝나기 전 동의 수행

IDFA 사용 가능

유저가 동의 대화상자를 보고 타이머가 끝나기 전 동의 거부

IDFA 사용 불가

타이머가 끝난 이후 유저가 동의 대화상자를 보고 동의 수행

동의를 획득한 이후 발생한 유저 이벤트에만 IDFA 사용 가능

타이머가 끝난 이후 유저가 동의 대화상자를 보고 동의 거부

IDFA 사용 불가

유저가 동의 대화상자를 보았지만 선택하지 않고 앱을 종료한 후 앱을 재실행해서 타이머가 끝난 이후 동의 수행

앱이 재실행될 때 큐에 담긴 모든 이벤트가 Singular 서버로 전송되며 IDFA는 해당 이벤트에 사용 불가. 동의 획득 이후 트래킹된 이벤트는 IDFA 사용 가능.

유저가 동의 대화상자를 보았지만 선택하지 않고 앱을 종료한 후 앱을 재실행해서 타이머가 끝난 이후 동의 거부

앱이 재실행될 때 큐에 담긴 모든 이벤트가 Singular 서버로 전송되며 해당 이벤트와 이후 트래킹된 모든 이벤트에서 IDFA 사용 불가

도움이 되었습니까?