Интеграция AppsFlyer SDK — iOS

ios.pngSDK Version: 4.8.3 (Release notes)

1. Обзор

Это руководство содержит подробные инструкции по интеграции AppsFlyer SDK в приложение для iOS. Вы можете отслеживать установки приложения, обновления и сессии, а также другие внутренние события приложения (в том числе покупки из приложения, уровни игры и т. п.), что позволяет оценить ROI и уровень вовлеченности пользователей. SDK для iOS совместим со всеми устройствами на iOS (iPhone, iPod, iPad), на которых используется iOS версии 6 или более поздних.

 Примечание

AppsFlyer SDK полностью совместим с сетями Apple с поддержкой протоколов IPv6 и DNS64/NAT64. Подробные сведения см. здесь.

 Important!

В AppsFlyer SDK используется класс NSUserDefaults. Не удаляйте из NSUserDefaults все значения — это может привести к проблемам при атрибуции.

2. Начало работы

2.1 Загрузите AppsFlyer SDK и добавьте его в Xcode.

CocoaPods Carthage Static Framework Static Lib
  • Обязательно загрузите и установите последнюю версию CocoaPods.
  • Add the following row to your Podfile:
    pod 'AppsFlyerFramework'
  • Запустите pod install
  • Всегда используйте для открытия своего проекта в Xcode только файл .xcworkspace, вместо .xcodeproj.

AppsFlyer SDK использует следующие структуры из основного набора:

AdSupport.framework
This framework is required to collect the IDFA from devices.
Without IDFA you cannot track Facebook Ads, Twitter, Google ads and other networks.
iAd.framework
Эта структура предназначена для отслеживания в приложении кампаний Apple Search Ads.

2.2 Настройка интеграции в App Delegate

Откройте файл AppDelegate.m своего приложения и выполните импорт SDKAppsFlyer:

Swift Objective-C
import AppsFlyerLib

3. Инициализация SDK

Initialize the SDK in the didFinishLaunchingWithOptions method with your app ID taken from iTunes Connect and your AppsFlyer dev key

Note that you need to set the app ID here with digits only, without the "id" prefix.

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 такой код:
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 (окупаемость инвестиций) и LTV (пожизненная ценность пользователя).

Для отслеживания внутренних событий приложения используется вызов trackEvent с именем события и значениями. Подробные сведения см. в статье "Внутренние события приложения".

Имя внутреннего события приложения должно содержать не более 45 символов. Имена событий, в которых более 45 символов, не отображаются на панели управления. Их можно увидеть только в необработанных данных, полученных с помощью Push и Pull API.

Пример: событие достижения уровня в приложении

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

В этом примере создается событие типа af_level_achieved (с использованием константы AFEventLevelAchieved) со следующими значениями: {af_level: 9 , af_score: 100} 

 Примечание

AppsFlyer supports non-English characters with in-app events, or with any other SDK API, starting from iOS SDK version 4.8.1.

Do not to add any currency symbol or decimal points to the figures, as these are not recognized

 Usage Example

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

5. Отслеживание диплинков

 Совет

Настоятельно рекомендуется включать в приложения диплинкинг.

При использовании приложения для iOS 9 или более поздних версий необходимо предусмотреть в нем поддержку универсальных ссылок. Подробные сведения см. здесь.


To report such launches, add the following code to the 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 (AFInAppEventParameterName.REVENUE) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 Примечание

AFEventParamRevenue (равносильно использованию af_revenue) — это ЕДИНСТВЕННЫЙ параметр события, который учитывается в AppsFlyer как реальный доход и отображается в необработанных данных и на панели управления. Подробные сведения см. здесь.


Example: Revenue In-App Event

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

7. Получение данных о конверсиях

AppsFlyer предоставляет доступ к данным атрибуции пользователей для каждой новой установки в реальном времени непосредственно на уровне SDK. Таким образом, можно предоставлять пользователям персонализированный контент или направлять их на определенные действия в приложении, что может значительно увеличить их взаимодействие с вашим приложением. 

Подробные сведения об этих дополнительных функциях см.здесь.

8. Идентификаторы пользователя

Существует несколько способов получения идентификаторов пользователей:

Получение AppsFlyer Device ID

Для каждой новой установки приложения AppsFlyer создает уникальный ID устройства. Его можно запросить с помощью такого кода:

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

Установка Customer User ID

Установка собственного ID клиента позволяет создать перекрестные ссылки между своим уникальным ID и уникальным ID AppsFlyer, а также с ID других устройств. Этот идентификатор можно посмотреть в отчетах AppsFlyer в формате CSV, а также получить с помощью API обратной передачи для перекрестных ссылок между внутренними идентификаторами.

Для установки собственного Customer User ID используйте такой код:

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

 Важное замечание

The customerUserID SHOULD be set before the trackAppLaunch. It is recommended to set your Customer User ID as soon as possible as it is only associated with events reported after its setup. Customer User ID can also be used to complete integrations with Analytics platforms such as Mixpanel and Swrve.

For more information about the Customer User ID, click here.

Установка User Email

AppsFlyer позволяет включать в отчеты один или несколько адресов электронной почты пользователя, если ваше приложение выполняет сбор таких данных. Для шифрования адресов электронной почты можно использовать такие методы: Sha1, MD5 и прямое шифрование.

Пример: сбор адресов электронной почты пользователей

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

 Примечание

AppsFlyer не сохраняет персональные данные (например, адреса электронной почты), и они не отображаются в отчетах. Их сбор данных проводится исключительно для обратной передачи медиа-источнику.

IDFA и IDFV

Если в приложение включен файл AdSupport.framework, то AppsFlyer автоматически выполняет сбор данных IDFA (ID для рекламодателей) и IDFV (ID для продавцов).

9. Дополнительные возможности

Отслеживание удалений

Для отслеживания удалений необходимо включить в своем приложении удаленные push-уведомления. Подробные сведения см.в документе Apple Руководство по программированию удаленных уведомлений.

См. указания по настройке отслеживания удалений в инструкции по интеграции SDK для iOS .

Отслеживание Push-уведомлений

Чтобы включить отслеживание запуска приложений из push-уведомлений, добавьте в делегат своего приложение такой код:

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

Рush-уведомление должно содержать параметр af с параметрами отслеживания AppsFlyer.

Пример сообщения:

{
"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 позволяет отслеживать и атрибутировать установки, источником которых являются приглашения пользователя из вашего приложения. С их помощью уже имеющиеся пользователи могут приглашать своих друзей и знакомых в качестве новых пользователей вашего приложения, что может стать ключевым фактором продвижения. 
 
Подробные сведения см. в статье Отслеживание приглашений пользователя.

Установка кода валюты

You can set a global currency code using the API below, in addition to specific currency codes that can be used as part of each in-app event sent to AppsFlyer. The global currency code is used when AFEventParamCurrency is not sent as part of an in-app event.

По умолчанию используется код USD (американский доллар). Коды валют по стандарту ISO см. здесь.

Чтобы установить код валюты, используйте этот API:

public void currencyCode(String currencyCode);

Пример использования:

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

Валидация покупок в приложении

 Примечание

Эта функция поддерживается для iOS7 и более новых версий.

AppsFlyer’s SDK can provide in‐app purchase server verification. To set receipt validation tracking you need to call the validateAndTrackInAppPurchase method inside the SKStoreKit’s completeTransaction: callback. This call automatically generates an af_purchase in‐app event.

- (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;

 Примечание

Параметр цены должен содержать полную сумму выручки, связанную с проверяемым событием покупки.


This call has two callback blocks, one for ‘success’ and one for ‘failure’ (for any reason, including validation fail). On success, a dictionary is returned with the receipt validation data provided by Apple’s servers.  

 Важно

Для тестирования рекомендуется установить значение YES для флага useReceiptValidationSandbox , чтобы перенаправлять запросы на изолированные серверы 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 по этой ссылке.

Anonymize

AppsFlyer provides you with a method to annonymize specific user identifiers in AppsFlyer analytics. This method complies with the latest privacy requirements and complies with Facebook data and privacy policies. Default is NO, meaning no anonymization is performed by default.

Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions:

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

Чтобы снова запустить отслеживание, еще раз вызовите метод deviceTrackingDisabled со значением "false" (ложь).

 Предупреждение

Anonymizing users SEVERELY impacts your attribution information.
Use this option ONLY for regions which legally prevent you from collecting your users' information.

Настройка временного интервала между сеансами

Чтобы AppsFlyer мог учитывать отдельные сеансы, интервал между сеансами должен быть не меньше 5 секунд (значение по умолчанию).  Начало сеанса — это момент открытия приложения пользователем.  Если нужно установить другой интервал между сеансами, используйте этот API:

Swift Objective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <ваш_временной_интервал_в_секундах>

Фоновые сеансы для служебных приложений

Недоступно в 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.

Отказ

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 will no longer communicate with our servers and stop functioning.

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

Collect Device Name

AppsFlyer SDK allows you to collect Device Name for your internal analysis. By default, this capability is turned off. To turn it on use the following API:

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

 Важно

Device Name might be considered Personal Data in certain regions. Only collect this information if you know you are legally allowed to and have received the user's explicit consent to do so.

Setting Additional Data

The setAdditionalData API is required to integrate on the SDK level with several external partner platforms, including Segment, Adobe and Urban Airship. Use this API only if the integration article of the platform specifically states setAdditionalData API is needed.
The following is a code example for implementing setAdditionalData on iOS for Objective-C or Swift

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

10. Тестирование результатов интеграции

Подробное описание процедуры тестирования см. здесь.

11. Отправка приложения в магазин

Инструкции по отправке приложения в магазин приложений см. здесь.

show
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 8 из 12

Комментарии

0 комментариев

Войдите в службу, чтобы оставить комментарий.