Обновление до iOS SDK V6 и обновление плагинов

Краткий обзор. Обновите существующую интеграцию SDK/wrapper AppsFlyer для iOS до SDK iOS V6.

Об SDK iOS V6

В этой статье идет речь об SDK V6. 

SDK AppsFlyer для iOS V6:

  • Позволяет владельцам и разработчикам приложений подготовиться к выходу iOS 14.
  • Дает возможность запрашивать у пользователей разрешение на сбор IDFA.
  • Предоставляет функции для атрибуции приложений и отчетности о событиях для мобильных приложений iOS.
  • Включает значительные изменения методов API по сравнению с предыдущими версиями.

Для получения полной информации о SDK V6 и о том, как интегрировать его в новое приложение, не имеющее более ранней версии AppsFlyer SDK, читайте наше руководство по интеграции iOS SDK для маркетологов.

Обновление до iOS SDK V6

Чтобы обновить SDK до iOS SDK V6, выполните следующие процедуры (1-5). 

1. Обновление версии SDK

Загрузите и добавьте SDK V6 в свой Xcode. 

2. Внедрение SDK V6

Добавьте следующий код в инициализацию SDK:

Objective-CSwift

В файле AppDelegate.h выполните следующие действия:

#import "AppDelegate.h"
#import <AppsFlyerLib/AppsFlyerLib.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 1 - Get AppsFlyer preferences from .plist file
    NSString *path = [[NSBundle mainBundle] pathForResource:@"afdevkey_donotpush" ofType:@".plist"];
    NSDictionary* properties = [NSDictionary dictionaryWithContentsOfFile:path];
    if (properties == nil || path == nil) {
        [NSException raise:@"Error" format:@"Cannot find .plist file"];
    }
    NSString* appsFlyerDevKey = [properties objectForKey:@"appsFlyerDevKey"];
    NSString* appleAppID = [properties objectForKey:@"appleAppID"];
    if (appsFlyerDevKey == nil || appleAppID == nil) {
        [NSException raise:@"Error" format:@"Cannot find appsFlyerDevKey or appleAppID"];
    }
    // 2 - Replace 'appsFlyerDevKey', `appleAppID` with your DevKey, Apple App ID
    [[AppsFlyerLib shared] setAppsFlyerDevKey:appsFlyerDevKey];
    [[AppsFlyerLib shared] setAppleAppID:appleAppID];
    [AppsFlyerLib shared].delegate = self;
    //  Set isDebug to true to see AppsFlyer debug logs
    [AppsFlyerLib shared].isDebug = true;

    if (@available(iOS 10, *)) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[AppsFlyerLib shared] start];
}

// Deep linking
// Open URI-scheme for iOS 9 and above
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *) options {
    [[AppsFlyerLib shared] handleOpenUrl:url options:options];
    return YES;
}
// Open URI-scheme for iOS 8 and below
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
    [[AppsFlyerLib shared] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation];
    return YES;
}
// Open Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    [[AppsFlyerLib shared] continueUserActivity:userActivity restorationHandler:restorationHandler];
    return YES;
}
// Report Push Notification attribution data for re-engagements
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [[AppsFlyerLib shared] handlePushNotification:userInfo];
}
// AppsFlyerLib implementation
//Handle Conversion Data (Deferred Deep Link)
-(void)onConversionDataSuccess:(NSDictionary*) installData {
    id status = [installData objectForKey:@"af_status"];
    if([status isEqualToString:@"Non-organic"]) {
        id sourceID = [installData objectForKey:@"media_source"];
        id campaign = [installData objectForKey:@"campaign"];
        NSLog(@"This is a none organic install. Media source: %@  Campaign: %@",sourceID,campaign);
    } else if([status isEqualToString:@"Organic"]) {
        NSLog(@"This is an organic install.");
    }
}
-(void)onConversionDataFail:(NSError *) error {
    NSLog(@"%@",error);
}
//Handle Direct Deep Link
- (void) onAppOpenAttribution:(NSDictionary*) attributionData {
    NSLog(@"%@",attributionData);
}
- (void) onAppOpenAttributionFailure:(NSError *)error {
    NSLog(@"%@",error);
}
// support for scene delegate
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options API_AVAILABLE(ios(13)){
    // Called when a new scene session is being created.
    // Use this method to select a configuration to create the new scene with.
    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}
- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions  API_AVAILABLE(ios(13.0)){
    // Called when the user discards a scene session.
    // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
    // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
@end

3. Поддержка атрибуции в SKAdNetwork

SKAdNetwork — это класс, используемый в iOS для проверки установки приложений в результате просмотра рекламы. Для проверки установки нужны приложение-источник и рекламируемое приложения.

Приложение-источник — это приложение, которое участвует в рекламной кампании и показывает объявления, подписанные рекламной сетью. Настройка вашего приложения для показа рекламы не входит в задачи SDK AppsFlyer. Для настройки необходимо следовать инструкциям iOS.

Для настройки рекламируемого приложения решение SKAdNetwork от AppsFlyer использует SKAdNetwork, чтобы предоставить рекламодателям и рекламным сетям аналитику LTV, отчеты и постбэки, сохраняя при этом конфиденциальность пользователей. При первом запуске приложения платформа AppsFlyer, используя конфигурацию, заданную маркетологом, указывает SDK, как установить значение конверсии SKAdNetwork.

Чтобы использовать решение SKAdNetwork:

  • Разработчику не нужно что-либо делать.
  • SDK AppsFlyer автоматически вызывает необходимые API SKAdNetwork, то есть registerAppForAdNetworkAttribution() и updateConversionValue(). Разработчик не должен их вызывать. 
  • Не позволяйте другим SDK вызывать API SKAdNet. Это может привести к задержке отправки постбэков с iOS в AppsFlyer и изменению значения конверсии, которое мы используем для заполнения дэшборда SKAdNetwork данными измерения качества пользователей, настроенными маркетологом на дэшборде. 
  • Маркетолог должен настроить измерение SKAdNetwork в AppsFlyer

В магазине приложений не требуется каких-либо действий или регистраций со стороны разработчика или маркетолога. 

4. Изменение API

В SDK AppsFlyer для iOS V6 произошли некоторые изменения в названиях API. Чтобы изменить названия API из предыдущих версий SDK на текущие, смотрите следующую таблицу. 

Название API (до V6) Текущее название API (V6 и более поздние версии)
AppsFlyerTracker AppsFlyerLib
disableIAdTracking disableCollectASA
trackAppLaunchWithCompletionHandler

startWithCompletionHandler

trackLocation

logLocation

trackAppLaunch

начать

trackEvent

logEvent

disableAppleAdSupportTracking

disableAdvertisingIdentifier

validateAndTrackInAppPurchase

validateAndLogInAppPurchase

isStopTracking

isStopped

deviceTrackingDisabled/deviceLoggingDisabled

anonymizeUser

sharedTracker (Objective C) shared

5. Обеспечьте интеграцию push-уведомлений

Если интеграция push-уведомлений уже реализована, необходимо выполнить следующие действия.

Следуйте инструкциям по работе с push-уведомлениями, чтобы обеспечить интеграцию push-уведомлений с помощью метода handlePushNotificationData

Плагины

Доступны следующие плагины V6:

Unity

Плагин Unity V6 от AppsFlyer помогает владельцам и разработчикам приложений поддерживать iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях в мобильных приложениях для Android и iOS, созданных на платформе разработки Unity. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить свой плагин с более ранней версии, смотрите наши руководства по обновлению плагина до Unity V6:

React Native

Плагин React Native от AppsFlyer помогает владельцам и разработчикам приложений подготовиться к выходу iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях в мобильных приложениях для Android и iOS. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить плагин с более ранней версии: 

  1. Удалите предыдущий плагин и замените его, следуя инструкциям в нашем руководство на GitHub.
  2. Измените код интеграции, переименовав и удалив необходимые API.

Segment

Плагин Segment от AppsFlyer помогает владельцам и разработчикам приложений подготовиться к выходу iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях для мобильных приложений на Android и iOS. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить плагин с более ранней версии, удалите предыдущий плагин и замените его, следуя инструкциям в нашем руководстве на GitHub.

Cordova

Плагин Cordova от AppsFlyer помогает владельцам и разработчикам приложений подготовиться к выходу iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях для мобильных приложений на Android и iOS. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить плагин с более ранней версии, удалите предыдущий плагин и замените его, следуя инструкциям в нашем руководстве на GitHub.

Flutter

Плагин Flutter от AppsFlyer помогает владельцам и разработчикам приложений подготовиться к выходу iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях для мобильных приложений на Android и iOS. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить свой плагин с более ранней версии, удалите его и добавьте версию V6 в pubspec.yaml, следуя инструкциям в нашем руководстве pub.dev

Adobe AIR

Плагин Adobe AIR от AppsFlyer помогает владельцам и разработчикам приложений подготовиться к выходу iOS 14, предоставляя функции атрибуции приложений и отчетности о событиях для мобильных приложений на Android и iOS. По функциональности этот плагин эквивалентен SDK AppsFlyer для iOS и Android.

Чтобы обновить плагин с более ранней версии, удалите предыдущий плагин и замените его, следуя инструкциям в нашем руководстве на GitHub.