Примеры использования методов

Инициализация библиотеки с расширенной конфигурацией

Чтобы инициализировать библиотеку с расширенной стартовой конфигурацией, передайте в метод
[YMMYandexMetrica activateWithConfiguration:(YMMYandexMetricaConfiguration *)configuration];
объект класса YMMYandexMetricaConfiguration с необходимыми настройками. С помощью расширенной конфигурации можно, например, включить/отключить логирование, установить тайм-аут сессии, передать параметры для отслеживания предустановленных приложений и т. д.

Настройки расширенной конфигурации применяются с момента инициализации библиотеки.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Creating an extended library configuration.
    YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
    // Setting up the configuration. For example, to enable logging.
    configuration.logs = YES;
    ...
    // Initializing the AppMetrica SDK.
    [YMMYandexMetrica activateWithConfiguration:configuration];
}

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

Отправка статистики на дополнительный API key

Отправка данных на дополнительный API key позволяет собирать для каждого API key свою статистику. Это можно использовать для управления доступом к информации. Например, чтобы предоставить доступ к статистике для аналитиков, можно продублировать отправку маркетинговых данных на дополнительный API key и предоставить им доступ к этой статистике. Так у них будет доступ только к той информации, которая им необходима.

Для отправки данных на дополнительный API key необходимо использовать репортеры. С помощью них можно отправлять события, сообщения об ошибках, профили и информацию о покупках в приложении. Репортеры могут работать без инициализации AppMetrica SDK.

Чтобы инициализировать репортер с расширенной конфигурацией, передайте в метод
[YMMYandexMetrica activateReporterWithConfiguration:(YMMReporterConfiguration *)configuration];
объект класса YMMReporterConfiguration с необходимыми настройками. Конфигурация применяется для репортера с указанным API key. Для каждого дополнительного API key можно настроить свою конфигурацию.
Внимание. Инициализацию репортера с расширенной конфигурацией необходимо проводить до первого обращения к репортеру. Иначе репортер будет инициализирован без конфигурации.
// Creating an extended library configuration.
// To create it, pass an API_key that is different from the app's API_key.
YMMReporterConfiguration *reporterConfiguration = [[YMMReporterConfiguration alloc] initWithApiKey:API_key];
// Setting up the configuration. For example, to enable logging.
reporterConfiguration.logs = YES;
...
// Initializing a reporter.
[YMMYandexMetrica activateReporterWithConfiguration:[reporterConfiguration copy]];

Для отправки данных с помощью репортера, необходимо получить объект, который реализует протокол YMMYandexMetricaReporting с помощью метода [YMMYandexMetrica reporterForApiKey:(NSString *)apiKey];

Если репортер не был инициализирован с расширенной конфигурацией, то вызов данного метода произведет инициализацию репортера для указанного API key.

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

Пример отправки события:

id<YMMYandexMetricaReporting> reporter = [YMMYandexMetrica reporterForApiKey:API_key];
[reporter reportEvent:@"Updates installed" onFailure:^(NSError *error) {
    NSLog(@"REPORT ERROR: %@", [error localizedDescription]);
}];

Для корректного отслеживания сессий взаимодействия пользователя с приложением необходимо вручную настроить отправку событий о начале и приостановке сессии для каждого репортера:

id<YMMYandexMetricaReporting> reporter = [YMMYandexMetrica reporterForApiKey:API_key];
[reporter resumeSession];
...
[reporter reportEvent:@"Updates installed" onFailure:^(NSError *error) {
    NSLog(@"REPORT ERROR: %@", [error localizedDescription]);
}];
...
[reporter pauseSession];
Примечание. При перезагрузке приложения сессия будет прервана.

Отслеживание аварийных остановок приложения

Отчеты об аварийных остановках приложения отправляются по умолчанию.

Чтобы отключить автоматическое отслеживание, инициализируйте библиотеку с конфигурацией, в которой отправка информации об аварийных остановках приложения отключена. Для этого установите значение NO для свойства BOOL crashReporting конфигурации YMMYandexMetricaConfiguration.

// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Disabling sending the information on crashes of the application.
configuration.crashReporting = NO;
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

Отправка местоположения устройства библиотекой

Местоположение устройства определяется библиотекой по умолчанию.
Внимание. AppMetrica SDK не запрашивает разрешение на получение данных о местоположении. Это необходимо сделать самостоятельно с помощью методов класса CLLocationManager в подходящее время.

AppMetrica позволяет управлять отправкой отчетов о местоположении устройства. Запрет отправки отключает все способы определения локации в AppMetrica. Пользователи с отключенной отправкой группируются и отображаются в отчетах по географии со значением «Не определено».

Отчеты о местоположении устройства отправляются по умолчанию.

Чтобы отключить отправку, инициализируйте библиотеку с конфигурацией, в которой отправка информации о местоположении устройства отключена. Для этого установите значение NO для свойства locationTracking конфигурации YMMYandexMetricaConfiguration.
// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Disabling sending information about the device location.
configuration.locationTracking = NO;
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

Чтобы отключить отправку в процессе работы приложения, используйте метод + (void)setLocationTracking:(BOOL)enabled класса YMMYandexMetrica.

[YMMYandexMetrica setTrackLocationEnabled:NO];

Установка местоположения устройства вручную

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

По умолчанию местоположение устройства определяется библиотекой. Чтобы отправить собственную информацию о местоположении устройства, передайте объект класса CLLocation в метод [YMMYandexMetrica setLocation:(CLLocation *)location];.

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
   [YMMYandexMetrica setLocation:newLocation];
}

Чтобы отправить собственную информацию о местоположении устройства с помощью стартовой конфигурации, передайте объект CLLocation в свойство CLLocation *location конфигурации YMMYandexMetricaConfiguration.

Отправка собственного события

Чтобы отправить собственное событие без вложенных параметров, передайте в метод

[YMMYandexMetrica reportEvent:(NSString *)message
                    onFailure:(void (^)(NSError *error))onFailure];
следующие параметры:
  • message — короткое название или описание события;
  • onFailure — блок, в который передается ошибка. Если вы не хотите отслеживать ошибку, то передайте в качестве блока значение nil.
[YMMYandexMetrica reportEvent:@"Updates installed" onFailure:^(NSError *error) {
    NSLog(@"DID FAIL REPORT EVENT: %@", message);
    NSLog(@"REPORT ERROR: %@", [error localizedDescription]);
}];

Отправка собственного события с вложенными параметрами

Чтобы отправить собственное событие с вложенными параметрами, передайте в метод
[YMMYandexMetrica reportEvent:(NSString *)message
                   parameters:(NSDictionary *)params
                    onFailure:(void (^)(NSError *error))onFailure];
следующие параметры:
  • message — короткое название или описание события;
  • params — вложенные параметры в виде пар «ключ-значение»;
  • onFailure — блок, в который передается ошибка. Если вы не хотите отслеживать ошибку, то передайте в качестве блока значение nil.
NSDictionary *params = @{@"key1": @"value1", @"key2": @"value2", @"key3": @{@"key4": @"value4"}};
[YMMYandexMetrica reportEvent:@"EVENT"
                   parameters:params
                    onFailure:^(NSError *error) {
                        NSLog(@"error: %@", [error localizedDescription]);
                    }];

Веб-интерфейс AppMetrica отображает до пяти уровней вложенности события. Если событие содержит шесть уровней и более, в отчете отобразятся пять верхних. С помощью API отчетов можно выгрузить до десяти уровней.

Подробнее о событиях в разделе Отправка собственных событий.

Отправка сообщения об ошибке

Чтобы отправить собственное сообщение об ошибке, передайте в метод
[YMMYandexMetrica reportError:(NSString *)message
                    exception:(NSException *)exception
                      failure:(NSError * __ autoreleasing *)onFailure];
следующие параметры:
  • message — короткое название или описание события;
  • exception — объект типа NSException, который требуется передать на сервер. Может принимать значение nil;
  • onFailure — блок, в который передается ошибка. Если вы не хотите отслеживать ошибку, то передайте в качестве блока значение nil.
@try {
    [self doWork];
}
@catch (NSException *exception) {
    [YMMYandexMetrica reportError:@"doWork failed"
                        exception:exception
                        onFailure:nil];
}

Отправка атрибутов профиля

Чтобы отправить атрибуты профиля, передайте в метод

[YMMYandexMetrica reportUserProfile:(YMMUserProfile *)userProfile
                          onFailure:(void (^)(NSError *error))onFailure];

следующие параметры:

  • userProfile — объект, который содержит массив обновлений атрибутов. Атрибуты профиля создаются с помощью методов класса YMMProfileAttribute.
  • onFailure — блок, в который передается ошибка. Если вы не хотите отслеживать ошибку, то передайте в качестве блока значение nil.
YMMMutableUserProfile *profile = [[YMMMutableUserProfile alloc] init];
// Updating a single user profile attribute.
id<YMMCustomCounterAttribute> timeLeftAttribute = [YMMProfileAttribute customCounter:@"time_left"];
[profile apply:[timeLeftAttribute withDelta:-4.42]];
// Updating multiple attributes.
[profile applyFromArray:@[
    // Updating predefined attributes.
    [[YMMProfileAttribute name] withValue:@"John"],
    [[YMMProfileAttribute gender] withValue:YMMGenderTypeMale],
    [[YMMProfileAttribute birthDate] withAge:24],
    [[YMMProfileAttribute notificationsEnabled] withValue:NO],
    // Updating custom attributes.
    [[YMMProfileAttribute customString:@"born_in"] withValueIfUndefined:@"Moscow"],
    [[YMMProfileAttribute customString:@"address"] withValueReset],
    [[YMMProfileAttribute customNumber:@"age"] withValue:24],
    [[YMMProfileAttribute customCounter:@"logins_count"] withDelta:1],
    [[YMMProfileAttribute customBool:@"has_premium"] withValue:YES]
]];
// ProfieID is set using the method of the YMMYandexMetrica class.
[YMMYandexMetrica setUserProfileID:@"id"];

// Sending profile attributes.
[YMMYandexMetrica reportUserProfile:[profile copy] onFailure:^(NSError *error) {
    NSLog(@"Error: %@", error);
}];

Отправка Revenue

AppMetrica поддерживает валидацию покупок, которые реализованы с помощью библиотеки StoreKit. Валидация позволяет фильтровать покупки, которые совершаются из взломанных приложений. Если валидация включена и покупка не проходит валидацию, она не отображается в отчетах.

Примечание. Чтобы покупки валидировались, включите валидацию в настройках. Подробнее в разделе Отправка информации о покупке на iOS.

Шаг 1. Протестируйте отправку Revenue

В AppMetrica нет возможности сегментировать Revenue на «тестовые» и «не тестовые». Если для отладки покупок вы используете основной API key, то тестовые покупки будут попадать в общую статистику. Поэтому, чтобы отладить работу отправки Revenue, используйте отправку статистики на дополнительный API key с помощью репортера.

Ниже описаны этапы отправки Revenue на дополнительный API key:

Чтобы покупки на iOS валидировались, в собственной реализации завершения транзакции настройте отправку поля transactionID и receiptData:
  1. Инициализируйте объект YMMMutableRevenueInfo.
  2. Для валидации покупки укажите transactionID и receiptData. Их необходимо получить до вызова [[SKPaymentQueue defaultQueue] finishTransaction:transaction].
  3. Отправьте объект YMMMutableRevenueInfo на тестовый API key с помощью репортера YMMYandexMetricaReporting. Подробнее о работе репортеров в разделе Примеры использования.
- (void)completeTransaction:(SKPaymentTransaction *)transaction
{
    ...
    NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:@"2100.5"];
    // Initializing the Revenue instance.
    YMMMutableRevenueInfo *revenueInfo = [[YMMMutableRevenueInfo alloc] initWithPriceDecimal:price currency:@"BYN"];
    revenueInfo.productID = @"TV soundbar";
    revenueInfo.quantity = 2;
    revenueInfo.payload = @{ @"source": @"AppStore" };
    // Set purchase information for validation.
    revenueInfo.transactionID = transaction.transactionIdentifier;
    revenueInfo.receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
    // Sending the Revenue instance using reporter.
    id<YMMYandexMetricaReporting> reporter = [YMMYandexMetrica reporterForApiKey:@"Testing API key"];
    [reporter reportRevenue:[revenueInfo copy] onFailure:^(NSError *error) {
        NSLog(@"Revenue error: %@", error);
    }];
    // Remove the transaction from the payment queue.
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

Шаг 2. Настройте отправку Revenue на основной API key

После успешного тестирования настройте отправку Revenue на основной API key.

Чтобы отправить объект YMMMutableRevenueInfo на основной API key, используйте метод +reportRevenue:onFailure: класса YMMYandexMetrica.

...
// Sending the Revenue instance.
[YMMYandexMetrica reportRevenue:[revenueInfo copy] onFailure:^(NSError *error) {
    NSLog(@"Revenue error: %@", error);
}];

Установка длительности тайм-аута сессии

По умолчанию длительность тайм-аута сессии равна 10 секундам. Это минимально допустимое значение свойства sessionTimeout.

Чтобы изменить длительность тайм-аута, передайте значение в секундах в свойство sessionTimeout конфигурации YMMYandexMetricaConfiguration.

// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Setting the session timeout.
configuration.sessionTimeout = 15;
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

Установка версии приложения

По умолчанию версия приложения задается в файле Info.plist (CFBundleShortVersionString).

Чтобы указать версию приложения из кода, передайте версию приложения в свойство NSString *appVersion конфигурации YMMYandexMetricaConfiguration.

// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Setting the app version.
configuration.appVersion = @"1.13.2";
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

где 1.13.2 — версия приложения.

Отслеживание открытий приложения с помощью deeplink

Отслеживание открытий необходимо для корректного трекинга ремаркетинг-кампаний.

Примечание. Для работы с Universal Links добавьте их поддержку в вашем приложении.

Отслеживать открытия приложения с помощью deeplink или Universal Links можно с помощью метода +handleOpenURL:

Чтобы отслеживать открытия приложения с помощью deeplink, необходимо в UIApplicationDelegate добавить следующие изменения:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [YMMYandexMetrica handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    return [YMMYandexMetrica handleOpenURL:url];
}

// Delegate for tracking Universal links.
- (BOOL)application:(UIApplication *)application
    continueUserActivity:(NSUserActivity *)userActivity
    restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        [YMMYandexMetrica handleOpenURL:userActivity.webpageURL];
    }
    return YES;
}

Учет новых пользователей

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

BOOL isFirstLaunch = NO;
// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Implement the logic for detecting whether the app is starting for the first time.
// For example, you can check for files (settings, databases, and so on),
// which the app creates on its first launch.
if (conditions) {
    isFirstLaunch = YES;
}
configuration.handleFirstActivationAsUpdateEnabled = !isFirstLaunch;
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

Отключение и включение отправки статистики

Если для отправки статистических данных требуется согласие пользователя, необходимо инициализировать библиотеку с отключенной опцией отправки статистики. Для этого установите значение NO для свойства BOOL statisticsSending конфигурации YMMYandexMetricaConfiguration.

// Creating an extended library configuration.
YMMYandexMetricaConfiguration *configuration = [[YMMYandexMetricaConfiguration alloc] initWithApiKey:API_key];
// Disabling sending statistics.
configuration.statisticsSending = NO;
// Initializing the AppMetrica SDK.
[YMMYandexMetrica activateWithConfiguration:configuration];

После того как пользователь дал согласие на отправку статистики (например, в настройках приложения или в соглашении при первом открытии), необходимо включить отправку с помощью метода + (void)setStatisticsSending:(BOOL)enabled класса YMMYandexMetrica.

// Checking the status of the boolean variable. It shows the user confirmation.
if (flag) {
    // Enabling sending statistics.
    [YMMYandexMetrica setStatisticsSending:YES];
}