AppsFlyer SDK 연동 - iOS

ios.pngSDK 버전: 4.8.3 (릴리스 노트)

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를 가져옵니다:

Swift Objective-C
import AppsFlyerLib

3. SDK 초기화

iTunes Connect에서 받은 앱 ID와 AppsFlyer dev key로 didFinishLaunchingWithOptions 방법에서 SDK를 초기화합니다: 

Swift Objective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "aSikdJAsaAJS123ad23"
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
#ifdef DEBUG
AppsFlyerTracker.shared().isDebug = true
#endif

 참고

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

 

  • applicationDidBecomeActive 기능에 다음의 코드를 추가합니다:
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, 유저 생애 가치)를 트래킹하기 위해서는 충분히 시간을 들여서 어떤 이벤트를 측정할 것인지 정의하기를 권장합니다.

인앱이벤트 트래킹은 trackEvent를 이벤트명과 값 파라미터와 함께 호출하여 수행됩니다. 더 자세한 내용은 인앱이벤트 문서에서 찾아볼 수 있습니다.

인앱이벤트 이름은 45자 이상이 될 수 없습니다. 45자 이상의 이벤트 이름은 대시보드에 나타나지 않고 로데이터나 Pull/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에서 표준 영문자가 아닌 문자도 사용할 수 있도록 지원합니다.

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. 수익 트래킹

인앱이벤트의 한 부분으로서 AFEventParamRevenue 이벤트 파라미터를 사용하여 수익을 계산하세요. 양수 또는 음수의 어떤 숫자라도 입력할 수 있습니다.

 참고

AFEventParamRevenue(af_revenue 사용과 동일)는 AppsFlyer가 로데이터와 대시보드에서 실제 수익으로 계산하는 유일한 이벤트 파라미터입니다. 더 자세한 내용을 보려면 여기를 클릭하세요.


예: 수익 인앱이벤트

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventLevelAchieved, 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"

 중요 사항

customerUserID는 trackAppLaunch 보다 먼저 설정되어야 합니다. 고객 사용자 ID는 설정 후에 유일하게 이벤트에 연결되므로 가능한 한 빨리 설정하는 것을 권장합니다. 또한 고객 사용자 ID는 MixpanelSwrve와 같은 어낼리틱스 플랫폼과 연동할 때 사용될 수 있습니다.고객 사용자 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

 

 

[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifier price:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
               NSLog(@"Purcahse 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로 설정하고 호출하면, 트래킹이 다시 시작됩니다.

  경고

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

AppsFlyer가 두개의 별도 세션을 계산하기 위해서는 각 세션 간의 기본 시간은 적어도 5초 이상이어야 합니다.  세션은 사용자가 앱을 열었을 때 시작됩니다.  세션간 시간을 다르게 설정하려면 다음 API를 사용하세요:

Swift Objective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <your_custom_time_in_seconds>
유틸리티 앱을 위한 백그라운드 세션
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 상에서 구현하는 것이 아닙니다.)

옵트아웃

심각한 경우에는 법률 및 개인 정보 보호 준수를 위해서 모든 SDK 트래킹을 중지해야 하는 경우도 있을 수 있습니다. 이 때에는 isStopTracking API를 사용합니다. 이 API를 호출하면 SDK는 더이상 서버와 통신하지 않고 기능을 정지시킬 것입니다.

Swift Objective-C
AppsFlyerTracker.shared().isStopTracking = true
기기 이름 수집

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

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

 중요

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

10. SDK 연동 테스트

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

11. App Store에 앱 제출하기

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

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

댓글

댓글 0개

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