AppsFlyer SDK 연동 - iOS

ios.pngSDK Version: 4.8.9(Release notes)

1. 개요

이 가이드는 AppsFlyer의 SDK를 iOS 앱에 연동하는 방법을 자세히 설명합니다. 설치, 업데이트, 세션을 트래킹할 수 있고, 또한 앱 설치를 넘어 인앱 구매나 게임 레벨과 같은 부가적인 인앱이벤트도 트래킹하여 ROI 및 사용자 인게이지먼트 수준을 평가할 수 있습니다. iOS SDK는 iOS 버전 6 이상의 모든 iOS 기기(iPhone, iPod, iPad)와 호환됩니다.

 참고

AppsFlyer의 SDK Apple의 IPv6 DNS64/NAT64 네트워크와 완전히 호환됩니다. 더 자세한 정보는 여기를 클릭하여 볼 수 있습니다.

 중요!

AppsFlyer의 SDK는 NSUserDefaults 클래스를 이용합니다. NSUserDefaults의 모든 값을 제거하면 어트리뷰션 문제를 야기할 수 있습니다.

2. 빠른 시작

2.1 AppsFlyer의 SDK 다운로드 및 Xcode로의 추가

CocoaPods Carthage Static Framework Static Lib
  • CocoaPods의 최신 버전을 다운로드 및 설치하는지 확인합니다.
  • 다음의 행을 Podfile 에 추가합니다:
    pod 'AppsFlyerFramework'
  • pod install을 실행합니다
  • .xcworkspace 파일을 사용하여 Xcode에 있는 프로젝트를 여는지( .xcodeproj 파일이 아님) 확인합니다.

AppsFlyer의 SDK는 다음의 네이티브 프레임워크를 사용합니다:

AdSupport.framework
이 프레임워크는 기기에서 IDFA를 수집할 때 필요합니다.
IDFA가 없으면 Facebook 광고, Twitter, Google 광고 및 기타 네트워크를 트래킹할 수 없습니다
iAd.framework
이 프레임워크는 앱에서 Apple Search Ads를 트래킹할 때 필요합니다

2.2 App Delegate에서 연동 설정

앱의 AppDelegate.m 파일을 열고 AppsFlyer의 SDK를 import 해옵니다:

Swift Objective-C
import AppsFlyerLib

3. SDK Initialization

didFinishLaunchingWithOptions 메서드 내에서, iTunes Connect에서 받은 앱 IDAppsFlyer dev key로 SDK를 초기화합니다. 

여기서 iOS 앱 ID는 "id" 프리픽스 없이 숫자만으로 설정해야 합니다.

Swift Objective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "<your-appsflyer-dev-key>";
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
#ifdef DEBUG AppsFlyerTracker.shared().isDebug = true
#endif

 참고

isDebug=true로 설정된 경우, AppsFlyer SDK 로그가 xCode Console에 표시됩니다

 

  • applicationDidBecomeActive function에 다음의 코드를 추가합니다:
Swift Objective-C
func applicationDidBecomeActive(application: UIApplication) { 
// Track Installs, updates & sessions(app opens) (You must include this API to enable tracking) 
AppsFlyerTracker.shared().trackAppLaunch() 
// your other code here.... }

4. 인앱이벤트 트래킹

인앱이벤트는 앱에서 일어나는 것들에 대한 통찰을 제공합니다. ROI(Return on Investment, 투자 대비 이익)와 LTV(Lifetime Value, 유저 생애 가치)를 트래킹하기 위해서는 충분히 시간을 들여서 어떤 이벤트를 측정할 것인지 정의하기를 권장합니다.

Tracking in-app events is performed by calling trackEvent with event name and value parameters. See In-App Events for more details.

인앱이벤트 이름은 45자 이상이 될 수 없습니다. 45자 이상의 이벤트 이름은 대시보드에 나타나지 않고 로데이터, Pull API, Push API에서만 표시됩니다.

예: 레벨 도달 인앱이벤트

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventLevelAchieved, 
withValues: [
	AFEventParamLevel: 9,
	AFEventParamScore : 100
]);

이로써 af_level_achieved 이벤트 유형(AFEventLevelAchieved 상수를 사용하는)이 다음의 이벤트 값과 함께 생성됩니다: {af_level: 9 , af_score: 100} 

 참고

AppsFlyer는 iOS SDK 버전 4.8.1부터 인앱이벤트나 다른 SDK API에서 표준 영문자가 아닌 문자도 사용할 수 있도록 지원합니다.

통화 기호나 소수점은 인식하지 못하므로, 이 기호들을 숫자와 함께 사용하지 마세요.

 사용 예

Swift Objective C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
    AFEventParamRevenue: @1200,
    AFEventParamCurrency : @"JPY"
]); 

5. 딥링킹 트래킹

 

앱에 딥링킹을 연동시킬 것을 강력히 권장합니다.  딥 링킹은 리타게팅 캠페인의 중요한 부분이며, 리타게팅 캠페인을 실시할 때에 반드시 사용하도록 권장합니다.

iOS9 이상에서는 앱이 유니버설 링크를 지원해야 합니다. 더 자세한 내용은 여기를 클릭하여 볼 수 있습니다.


이러한 실행을 보고하려면, app delegate에 다음의 코드를 추가합니다:

Swift Objective-C
// iOS 9 이상 버전용 유니버설 링크에서의 앱 실행 보고
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
        return true
    }

    // 유니버설 링크(Twitter)를 지원하지 않는 앱 및 iOS 8 이하 버전용 앱의 딥링크에서의 앱 실행 보고
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
        return true
    }

    // iOS 10 이상 버전용 딥링크에서의 앱 실행 보고
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        AppsFlyerTracker.shared().handleOpen(url, options: options)
        return true
    }

6. 수익 트래킹

Use the af_revenue (AFEventParamRevenue) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 참고

AFEventParamRevenue (equivalent to using af_revenue) is the ONLY event parameter that is counted on AppsFlyer as real revenue on the raw data and dashboard. For more details please click here.


예: 수익 인앱이벤트

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase, 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: 1.99,
	AFEventParamCurrency:"USD"
]);

7. 전환 데이터 획득

AppsFlyer는 모든 신규 설치에 대해서 SDK 레벨에서 직접 실시간으로 사용자 어트리뷰션 데이터에 접근할 수 있도록 합니다. 이를 통해서 사용자에게 개인별 콘텐츠를 제공하거나 앱 안에서 특정한 액티비티를 보내어 앱에 대한 사용자의 인게이지먼트를 높일 수 있습니다. 

이 고급 기능에 대해 더 자세히 알아보려면 여기를 클릭하세요.

8. 사용자 식별자

다음은 사용자 식별자 추출을 위한 여러 가지 옵션들입니다.

AppsFlyer 기기 ID 가져오기

앱의 모든 신규 설치에 대해서 AppsFlyer 고유 기기 ID가 생성됩니다. 다음의 코드를 사용하여 이를 획득할 수 있습니다:

Swift Objective-C
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()

고객 사용자 ID 설정하기

고객 ID를 설정하면, 고유 ID를 AppsFlyer의 고유 ID 및 다른 장치의 ID와 서로 비교할 수 있게됩니다. 이 ID는 내부 ID와 상호 비교할 수 있도록 포스트백 API와 AppsFlyer CSV 보고서에 보여집니다.

다음을 통해 고객 사용자 ID를 설정하세요:

Swift Objective-C
AppsFlyerTracker.shared().customerUserID = "my user id"

 중요 사항

It is recommended to set your Customer User ID as soon as possible as it is only associated to events reported after its setup. If setCustomerUserId is called before calling trackAppLaunch, the Customer User ID is visible in the raw export for installs and for events. If it is set after, only the value only for events tracked is visible after calling this method.

Customer User ID can also be used to complete integrations with Analytics platforms such as Mixpanel and Swrve.

고객 사용자 ID 가져오기:

첫 번째 실행 후 고객 사용자 ID 값이 다시 설정되지 않도록 하기 위해 다음 구문을 사용하여 값이 비어 있는지 여부를 확인할 수 있습니다. 

[AppsFlyerTracker sharedTracker].customerUserID

고객 사용자 ID에 대해 더 자세히 알아보려면 여기를 클릭하세요.

사용자 이메일 설정

앱에 이메일 주소를 수집한다면, AppsFlyer가 한 개 이상의 사용자 이메일 주소를 보고할 수 있습니다. 이메일 값은 다음의 암호화 방법으로 암호화할 수 있습니다: Sha1, MD5, 평문.

예: 사용자 이메일 수집

Swift Objective-C
AppsFlyerTracker.shared().setUserEmails( ["email1@domain.com", "email2@domain.com"], 
with: EmailCryptTypeSHA1)

 참고

이메일 주소와 같은 개인 식별 정보(Personally Identifiable Information, PII)는 AppsFlyer에 저장되지 않고, 어떤 보고서에도 표시되지 않습니다. 이 정보는 미디어 소스로 포스트백을 하기 위한 목적으로만 수집됩니다.

IDFA 및 IDFV

AdSupport.framework가 앱에 포함된 경우, AppsFlyer가 자동으로 IDFA (광고주용 ID) 및 IDFV (벤더용 ID)를 수집합니다.

9. 옵션 기능

앱삭제 측정

앱삭제 측정을 위해서 앱의 원격 푸쉬 알림을 활성화하세요. 더 자세한 내용은 Apple의 Remote Notification Programming Guide에서 볼 수 있습니다.

앱삭제 측정 기능 설정을 완료하려면 iOS SDK 연동 지침을 따르세요.

푸쉬 알림 트래킹

푸쉬 알림에서 앱 트래킹이 실행될 수 있게 하려면, 다음의 코드를 app delegate에 추가하세요.

Swift Objective-C
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
	AppsFlyerTracker.shared().handlePushNotification(userInfo)
}

푸쉬 메시지는 AppsFlyer 트래킹 파라미터들과 함께 af 파라미터가 있어야 합니다.

메시지 예:

{
   "aps":{
      "alert":"Push text",
      "sound":"default",
      "category":"REMINDER_CATEGORY"
   },
   "_p":123456,
   "payloadKey":"payloadValue",
   "af":{
      "pid":"swrve_int",
      "is_retargeting":"true",
      "c":"test_campaign"
   }
}

크로스 프로모션 트래킹

AppsFlyer는 사용자가 가지고 있는 기존 앱 중 하나의 크로스 프로모션으로부터 발생하는 설치를 트래킹하고 어트리뷰션을 측정할 수 있습니다.크로스 프로모션 앱은 앱의 추가 설치를 이끄는 주된 성장 요소가 될 수 있습니다.

자세한 내용은 여기의 크로스 프로모션 트래킹 글을 확인하세요.

사용자 초대 트래킹

AppsFlyer는 앱에서 초대한 사용자로부터의 설치를 트래킹하고 어트리뷰션을 측정할 수 있습니다. 기존 사용자가 친구와 아는 사람을 앱의 신규 사용자로 초대하도록 하는 것은 앱의 추가 설치를 이끄는 핵심 성장 요소가 될 수 있습니다.
 
자세한 내용은 여기의 사용자 초대 트래킹 글을 확인하세요.

통화 코드 설정

다음 API를 사용하여 국제 통화 코드를 설정할 수 있고, AppsFlyer로 전송되는 인앱이벤트를 사용하여 특정 통화 코드를 설정할 수도 있습니다. 인앱이벤트로 AFEventParamCurrency가 전송되지 않으면 국제 통화 코드가 사용됩니다.

USD가 기본값입니다. 여기에서 허용 가능한 ISO 통화 코드를 찾아볼 수 있습니다.

통화 코드를 설정하려면 다음의 API를 사용하세요:

public void currencyCode(String currencyCode);

사용 예:

Swift Objective-C
AppsFlyerTracker.shared().currencyCode = "USD"

인앱 구매 검증

 참고

이 기능은 iOS 7 이상에서 지원됩니다.

AppsFlyer의 SDK는 인앱 구매의 서버 검증 기능을 제공합니다. 영수증 검증 트래킹을 설정하려면 SKStoreKit의 completeTransaction: 콜백에서validateAndTrackInAppPurchase 메소드를 호출해야 합니다. 이 호출은 자동으로 af_purchase 인앱이벤트를 생성합니다.

- (void) validateAndTrackInAppPurchase:(NSString *) productIdentifier
price:(NSString *) price
currency:(NSString *) currency
transactionId:(NSString *) tranactionId
additionalParameters:(NSDictionary *) params
success:(void (^)(NSDictionary *response)) successBlock
failure:(void (^)(NSError *error, id reponse)) failedBlock;

 참고

가격 파라미터는 검증된 구매 이벤트가 연계된 총 수익을 포함해야 합니다.


이 호출은 '성공'한 경우와 검증 실패 등의 원인으로 '실패'한 경우에 대한 두 개의 콜백 블록을 가집니다. 성공시 Apple의 서버에서 제공한 영수증 검증 데이터가 딕셔너리와 함께 반환됩니다. 

 중요

테스트용으로, useReceiptValidationSandbox 플래그를 YES(예)로 설정할 것을 권장합니다. 이것이 Apple 샌드박스 서버로 요청을 리다이렉션하기 때문입니다.

#ifdef DEBUG
    [AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;
#endif

 

 

Objective-C Swift
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifier price:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
  NSLog(@"Purchase succeeded And verified!!! response: %@", result[@"receipt"]);
} failure:^(NSError *error, id response) {
  NSLog(@"response = %@", response);
}];

영수증 검증을 통해 가능한 반환값 목록에 대해서는 Apple의 문서를 여기에서 참조하세요.

익명 처리

Appsflyer에는 특정 사용자의 식별자를 AppsFlyer 분석에서 익명 처리하는 메소드가 있습니다. 이 메소드는 최신 개인 정보 보호 요구 사항을 준수하며 Facebook 데이터 및 개인 정보 보호 정책을 준수합니다. 디폴트값은 익명 처리를 하지 않는 No입니다.

사용자의 설치, 이벤트, 세션의 익명 처리를 확실하게 하기 위해서는 SDK를 초기화할 때 다음 API를 사용하세요.

Swift Objective-C
AppsFlyerTracker.shared().deviceTrackingDisabled = true

deviceTrackingDisabled를 false로 설정하고 호출하면, 트래킹이 다시 시작됩니다.

  경고

사용자를 익명 처리하면 어트리뷰션 정보에 심각한 영향을 줄 수 있습니다.
사용자 정보 수집이 법적으로 금지된 지역에서만 이 옵션을 사용하세요.

세션간 사용자정의 시간

By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions (more about counting sessions). 
However, you can use the following API to set your custom value for the minimum required time between sessions:

Swift Objective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <your_custom_time_in_seconds>

Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.

유틸리티 앱을 위한 백그라운드 세션

iOS에서는 사용할 수 없습니다. 
 

iOS 앱 익스텐션 및 WatchKit

앱 익스텐션에는 인터넷을 사용할 수 있는 권한이 필요합니다:

  1. 앱 익스텐션의 info.plist 파일로 이동합니다.
  2. NSExtension / NSExtensionAttributes에서 RequestsOpenAccess 플래그를 YES로 설정하세요.

앱 익스텐션의 UIViewController viewDidLoad에 다음의 코드를 추가합니다:

Swift Objective-C
override func viewDidLoad() {    
        super.viewDidLoad()
        AppsFlyerTracker.shared().appsFlyerDevKey = "MY_APPSFLYER_KEY"

        // MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
        AppsFlyerTracker.shared().appleAppID = "MY_APP_ID"
                
        AppsFlyerTracker.sharedTracker().trackAppLaunch()
    }

앱 익스텐션에서 어트리뷰션 데이터를 받으려면, 여기에 있는 지침을 따라 이를 앱의 UIViewController 상에서 구현하세요. (AppDelegate 상에서 구현하는 것이 아닙니다.)

Opt-Out

In some extreme cases you might want to shut down all SDK tracking due to legal and privacy compliance. This can be achieved with the isStopTracking API. Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.

There are several different scenarios for user opt-out. We highly recommend following the exact instructions for the scenario, that is relevant for your app.

  경고

Use this API only in cases where you want to fully ignore this user from any and all tracking. Using this API SEVERELY impacts your reporting and attribution.

Swift Objective-C
AppsFlyerTracker.shared().isStopTracking = true

 중요

isStopTrackingtrue로 설정된 경우 trackAppLaunch를 호출하지 마십시오.

기기 이름 수집

AppsFlyer SDK에서 내부 분석용으로 기기 이름을 수집할 수 있습니다. 기본값으로는 이 기능이 꺼져있습니다. 이 기능을 사용하려면 다음 API를 사용하세요.

Swift Objective-C
>AppsFlyerTracker.shared().shouldCollectDeviceName = false`

 중요

특정 지역에서는 기기 이름이 개인 정보로 간주될 수 있습니다. 이 정보는 법에서 허용하고, 사용자로 부터 명시적 동의를 받은 경우에만 수집할 수 있습니다.

추가 사용자 정의 데이터 설정

setAdditionalData API는 SDK 수준에서 Segment, Adobe 및 Urban Airship과 같은 몇몇 외부 파트너 플랫폼과 연동할 때 필요합니다. 이 API는 해당 플랫폼의 연동 관련 문서에서 setAdditionalData API가 필요하다고 특별히 명시된 경우에만 사용하세요.다음은 iOS에서 Objective-C나 Swift로 setAdditionalData를 구현하는 예시 코드입니다.

Objective-C Swift
NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
 
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];

10. SDK 연동 테스트

연동 테스트 방법에 대한 더 자세한 정보는 여기에서 볼 수 있습니다.

11. App Store에 앱 제출하기

App Store에 앱을 제출하는 방법에 대한 더 자세한 정보은 여기에서 볼 수 있습니다.

도움이 되었습니까?
12명 중 8명이 도움이 되었다고 했습니다.

댓글

댓글 0개

댓글을 남기려면 로그인하세요.