iOS SDK 고급 옵션

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

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

연동 가이드

 

언인스톨 트래킹

주의: 언인스톨 트래킹 기능은 엔터프라이즈 고객사에만 제공됩니다.

앱에서 언인스톨 트래킹을 활성화하려면 다음 단계를 따르세요.

  • Singular 내의 앱 설정에서 언인스톨 트래킹이 활성화되었는지 확인합니다. 자세한 내용은  Setting Up iOS Install Tracking 문서를 참조하세요.
  • 앱 내에서 registerDeviceTokenForUninstall이나 registerDeviceToken 메서드를 사용하여 Apple 푸시 노티피케이션 서비스(APNS)에서 반환된 디바이스 토큰을 전달합니다. 이 코드는 반드시 Singular의 StartSession 호출 전에 불려야 합니다.

앱이 현재 푸시 노티피케이션을 지원하지 않는 경우 Apple의 가이드를 참조하세요.

주의:

  • 이미 기존의 푸시 노티피케이션 구현을 통해 디바이스 토큰을 받았다면 이 값을 사용하세요.
  • APNS 토큰은 주로 binary 데이터로 APNS에서 받은 토큰을 전달하세요. 혹시 앱 내에서 다음처럼 64자의 문자열 형태(b0adf7c9730763f88e1a048e28c68a9f806ed032fb522debff5bfba010a9b052)로 변환해서 쓰고 있다면 NSData로 변환해서 전달하세요.
registerDeviceTokenForUninstall 메서드 (Objective-C)
정의 APNS에서 받은 디바이스 토큰 전달
메서드 + (void)registerDeviceTokenForUninstall:(NSData*)deviceToken;
사용예

Objective-C:

- (void)application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {
[Singular registerDeviceTokenForUninstall:deviceToken];
}

Swift:

func application(_ application: UIApplication, 
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Singular.registerDeviceToken(forUninstall: deviceToken)
}

[신규] 글로벌 프로퍼티 추가

Singular SDK로 추가 프로퍼티를 커스텀으로 정의하고 앱에서 발생하는 모든 세션과 이벤트에 포함해서 Singular 서버에 전송할 수 있습니다. 이 프로퍼티는 유저 관련, 앱 모드, 앱 상태 등 어떤 정보이든 될 수 있습니다. 프로퍼티를 설정하면 추후 리포트에서 데이터를 분류하는 디멘션으로 사용할 수 있습니다.

예를 들어 게임 앱이라면 “Level”이라는 프로퍼티를 정의하고 “0”으로 초기화할 수 있습니다. 이 경우 앱에서 보내는 세션과 이벤트에 "Level": "0"이라는 프로퍼티가 포함됩니다. 유저의 레벨이 상승하면 해당 프로퍼티를 “1”로 업데이트하는 것처럼 값은 계속 변경할 수 있습니다. 이렇게 설정하면 플레이어의 게임 레벨에 따른 세션, 이벤트 및 매출 데이터 등을 확인할 수 있습니다.

  • 글로벌 프로퍼티는 최대 5개까지 설정할 수 있습니다.
  • 앱 실행 간에도 최신 값이 유지되며 설정을 해제하거나 유저가 앱을 언언스톨하기 전에는 유지됩니다.
  • 각 프로퍼티 이름과 값은 영문 200자까지 설정할 수 있습니다. 더 긴 이름과 값을 전달하면 200자까지만 확인됩니다.
  • 글로벌 프로퍼티는 현재 Singular의 유저 레벨 이벤트 로그(어트리뷰션 로그 추출 가이드 참조)와 포스트백에서 확인할 수 있습니다. Singular의 집계 리포트 (리포팅 페이지나 리포팅 API)에서의 지원은 추후 추가될 예정입니다. 기능에 대한 질문이 있거나 글로벌 프로퍼티 지원에 관심이 있다면 담당 고객 성공 매니저와 상의하세요.

SingularConfig를 통한 글로벌 프로퍼티 설정

SingularConfig 내의 setGlobalProperty 메서드를 사용하면 SDK 초기화 이전에 글로벌 프로퍼티를 설정할 수 있습니다.

글로벌 프로퍼티와 값이 앱 실행 사이에도 유지되므로 프로퍼티가 이미 다른 값으로 설정되었을 가능성이 있습니다. SDK에 기존 프로퍼티를 신규 값으로 오버라이딩하려면 overrideExisting 파라미터를 사용하세요.

setGlobalProperty 메서드
정의 글로벌 프로퍼티 설정
메서드 setGlobalProperty:(NSString*)key withValue:(NSString*)value overrideExisting:(BOOL)overrideExisting
사용예

Objective-C:

SingularConfig* config = [[SingularConfig
alloc] initWithApiKey:apiKey andSecret:secretKey];
[config setGlobalProperty:@“example_key” withValue:@“example_value”
overrideExisting:NO];
[config setGlobalProperty:@“test_key” withValue:@“test_value” overrideExisting:YES]; [Singular start:config];

Swift:

var config = SingularConfig(
    apiKey: apiKey,
    andSecret: secretKey)
 
config.setGlobalProperty(
    "example_key"),
    withValue: "example_value",
    overrideExisting: false)
config.setGlobalProperty( "test_key", withValue: "test_value", overrideExisting: true)

초기화 이후 글로벌 프로퍼티 설정

앱 실행 중 언제든 다음 메서드를 통해 글로벌 프로퍼티의 설정, 설정 해제 및 값 획득이 가능합니다.

setGlobalProperty 메서드
정의

글로벌 프로퍼티를 지정한 값으로 설정

주의:

  • 아직 존재하지 않는 프로퍼티를 설정하였으나 이미 5개의 글로벌 프로퍼티가 존재한다면 프로퍼티가 추가되지 않음
  • 프로퍼티가 이미 설정된 경우 overrideExisting 파라미터를 통해 현재 값을 오버라이드할지 결정
  • 프로퍼티가 정상 설정되면 true, 설정되지 않으면 false 값 반환
메서드 (BOOL) setGlobalProperty:(NSString*)key andValue:(NSString*)value overrideExisting:(BOOL)overrideExisting
사용예
BOOL result = [Singular setGlobalProperty:@“test_key” 
withValue:@“test_value” overrideExisting:YES];
getGlobalProperties 메서드
정의 모든 글로벌 프로퍼티를 획득하고 맵 형태로 현재 값 반환
메서드 (NSDictionary*) getGlobalProperties
사용예
NSDictionary* props = [Singular getGlobalProperties];
unsetGlobalProperty 메서드
정의 하나의 글로벌 프로퍼티 삭제
메서드 (void) unsetGlobalProperty:(NSString*)key
사용예
[Singular unsetGlobalProperty:“@test_key”];
clearGlobalProperties 메서드
정의 모든 글로벌 프로퍼티 삭제
메서드 (void) clearGlobalProperties
사용예
[Singular clearGlobalProperties];

Singular SDK JavaScript 인터페이스

앱 내의 javaScript 코드에서 Singular를 호출해야 하는 경우 JavaScript 인터페이스를 사용할 수 있습니다.

예를 들어 JavaScript 인터페이스를 설정한다면 다음처럼 JavaScript 코드에서 Singular에 이벤트를 전송할 수 있습니다.

Singular.event('event'); 
Singular.event('test', JSON.stringify({"a1":"bar",
"a2":"boo", "a3":"baz"}));

이 인터페이스는 다음과 같은 SDK 메서드를 지원합니다.

  • setCustomUserID
  • unsetCustomUserID
  • event
  • revenue

JavaScript 인터페이스 활성화

주의: Apple은 iOS 8.0 이상부터 앱에 웹 컨텐츠를 추가할 때 WKWebView를 사용하도록 권장하고 있으므로 UIWebViewWebView 사용은 권장하지 않습니다. 자세한 내용은 Apple의 WKWebView 문서를 참조하세요.

WKWebView를 사용시 JavaScript 인터페이스를 사용하려면 WKNavigationDelegate 프로토콜의 webView 메서드에 몇 가지 코드를 추가해야 합니다. 이 프로토콜은 웹뷰가 내비게이션 요청을 처리할 때 커스텀 행동을 발동하도록 구현하는데 도움을 주는 프로토콜입니다.

Swift:

extension ViewController: WKNavigationDelegate { 
 func webView(_: WKWebView, decidePolicyFor: WKNavigationAction, 
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { // Singular 핸들러 let js = "typeof(Singular)" webView.evaluateJavaScript(js) { (result, error) -> Void in if let resultString = result as? String { if resultString.isEqual("undefined") { do { let contents = try String(contentsOfFile:
Bundle.main.path(forResource: "Singular", ofType: "js")!) self.webView.evaluateJavaScript(contents,
completionHandler: nil) } catch { } } else { print(decidePolicyFor.request) Singular.processJSRequestWK(self.webView,
withURL:decidePolicyFor.request) } } } // 다른 코드는 아래에 추가하세요.  }

iOS 8.0 부터 사용이 중단된 이전 UIWebView를 사용하는 경우 다음처럼 UIWebViewDelegate 파일의 webView:shouldStartLoadWithRequest:navigationType: 메서드를 업데이트하세요.

Objective-C:

- (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType{ if([[webView stringByEvaluatingJavaScriptFromString:@"typeof(Singular)"] isEqualToString:@"undefined"]) { // HTML에 Singular.js 주입  [webView stringByEvaluatingJavaScriptFromString:[NSString
stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"Singular" ofType:@"js"] usedEncoding:nil error:nil]]; } else { // Singular.js에서 요청 처리 [Singular processJSRequest:webView withURL:request]; } // 다른 코드는 아래에 추가하세요. return true; }

데이터 개인정보 보호 법률 준수

Singular는 개인정보 보호를 준수하는 기능을 제공하여 GDPR나 CCPA (California Consumer Privacy Act)와 같이 소비자 개인 정보 보호 법률을 준수하고자 하는 고객사를 지원하고 있습니다.   만약 유저가 개인 정보를 공유하도록 동의한 경우 파트너들은 해당 사항에 대해 알림 수신을 원할 수 있습니다.

유저의 정보 공유 동의를 획득하는 방법을 구현했다면 limitDataSharing 메서드를 사용해서 유저의 동의 여부에 대해 알릴 수 있습니다.

  • 유저가 정보 공유를 동의한 경우 limitDataSharing:NO를 사용하세요.
  • 유저가 정보 공유를 거부한 경우 limitDataSharing:YES를 사용하세요.

Singular는 관련 규정을 준수하기 위해 이 정보를 관련 파트너에게 전달합니다.

주의: 본 메서드 사용은 선택 사항이나, 동의를 얻은 유저임을 구체적으로 알리는 경우에만 파트너가 Singular에게 공유하는 어트리뷰션 정보가 존재할 수 있습니다.

limitDataSharing 메서드
정의 CCPA에 따라 Singular에 유저의 개인 정보 공유 동의를 고지
메서드 limitDataSharing:(BOOL) shouldLimitDataSharing
사용예
// User has opted into sharing data
[Singular limitDataSharing:NO];

GDPR 규정 준수를 위한 추가 메서드

Singular SDK는 고객사가 GDPR 규정을 준수하고 사용자의 트래킹 동의 및 비동의 사항을 Singular에 알리는데 필요한 여러 메서드를 제공합니다.

trackingOptIn 메서드
정의 Singular에 유저의 트래킹 동의(옵트인)를 고지
사용예 Objective-C:
[Singular trackingOptIn];

Swift:

Singular.trackingOptIn()
trackingUnder13 메서드
정의 Singular에 유저가 미성년(13세 미만)임을 고지
사용예

Objective-C:

[Singular trackingUnder13];

Swift:

Singular.trackingUnder13()
stopAllTracking 메서드
정의 해당 앱에서 해당 유저를 트래킹하는 모든 행위를 중단
주의: 이 메서드를 호출하면 SDK가 비활성화되며 앱의 재시작 이후에도 상태 값이 보존됩니다. 트래킹을 재개하려면 resumeAllTracking() 메서드를 명시적으로 호출해야 합니다.
사용예

Objective-C:

[Singular stopAllTracking];

Swift:

Singular.stopAllTracking()
resumeAllTracking 메서드
정의 해당 앱에서 해당 유저의 트래킹을 재개
사용예

Objective-C:

[Singular resumeAllTracking];

Swift:

Singular.resumeAllTracking()
isAllTrackingStopped 메서드
정의 해당 앱에서 해당 유저의 트래킹 중단 상태를 확인. StopAllTracking() 메서드를 통해 현재 트래킹이 중단되어 재개되지 않은 상태인 경우 true 값 반환
사용예

Objective-C:

[Singular isAllTrackingStopped]; // 반환값: true/false

Swift:

Singular.isAllTrackingStopped() // 반환값: true/false
도움이 되었습니까?