Документация
Интеграция SDK

Подключение AppMetrica Push SDK

Перед началом работы с AppMetrica Push SDK необходимо подключить и инициализировать AppMetrica SDK не ниже версии 2.6.2.

Шаг 1. Библиотека адаптирована для работы с системой управления зависимостями CocoaPods. Для подключения библиотеки добавьте в Podfile проекта зависимость:

 pod 'YandexMobileMetricaPush', '0.5.0'
Если вы не используете CocoaPods
  1. Загрузите библиотеку AppMetrica Push.
  2. Добавьте YandexMobileMetricaPush.framework в проект.
Примечание. Библиотеки AppMetrica SDK и AppMetrica Push SDK должны быть подключены одним из этих способов.

Шаг 2. Зарегистрируйте приложение в APNs. Это необходимо для подготовки приложения к работе с push-уведомлениями. Для отправки уведомлений на устройства с iOS версии 7 и выше добавьте следующие изменения в код приложения:

if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
    if (NSClassFromString(@"UNUserNotificationCenter") != Nil) {
        // iOS 10.0 and above
        UNAuthorizationOptions options =
            UNAuthorizationOptionAlert |
            UNAuthorizationOptionBadge |
            UNAuthorizationOptionSound;
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError *error) {
            // Enable or disable features based on authorization.
        }];
     }
     else {
        // iOS 8 and iOS 9
        UIUserNotificationType userNotificationTypes =
            UIUserNotificationTypeAlert |
            UIUserNotificationTypeBadge |
            UIUserNotificationTypeSound;
        UIUserNotificationSettings *settings =
            [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
        [application registerUserNotificationSettings:settings];
    }
    [application registerForRemoteNotifications];
}

Как правило, эти данные передаются в методе - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions.

Подробно об используемых методах в документации на developer.apple.com:

Шаг 3. Для отправки push-уведомления с помощью AppMetrica необходим device token вашего приложения. Чтобы зарегистрировать его, добавьте следующий код в вашу реализацию UIApplicationDelegate:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // Если до этого шага не была инициализирована библиотека AppMetrica SDK, вызов метода приведет к аварийной остановке приложения.
    [YMPYandexMetricaPush setDeviceTokenFromData:deviceToken];
}

Чтобы зарегистрировать device token и отправить окружение APNs, используйте следующий код:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // Если до этого шага не была инициализирована библиотека AppMetrica SDK, вызов метода приведет к аварийной остановке приложения.
    #ifdef DEBUG
        YMPYandexMetricaPushEnvironment pushEnvironment = YMPYandexMetricaPushEnvironmentDevelopment;
    #else
        YMPYandexMetricaPushEnvironment pushEnvironment = YMPYandexMetricaPushEnvironmentProduction;
    #endif
    [YMPYandexMetricaPush setDeviceTokenFromData:deviceToken pushEnvironment:pushEnvironment];
}

Шаг 4. Настройте обработку открытия push-уведомления, добавив следующий код в соответствующие методы UIApplicationDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [YMPYandexMetricaPush handleApplicationDidFinishLaunchingWithOptions:launchOptions];
    return YES;
}
- (void)application:(UIApplication *)application
     didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [YMPYandexMetricaPush handleRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    [YMPYandexMetricaPush handleRemoteNotification:userInfo];
}

Для интеграции в iOS версии 10 и выше внесите следующие изменения в код:

#import <UserNotifications/UserNotifications.h>

// В методе "- (BOOL)application:(UIApplication *)application 
//         didFinishLaunchingWithOptions:(NSDictionary *)launchOptions":
if ([UNUserNotificationCenter class] != Nil) {
    [UNUserNotificationCenter currentNotificationCenter].delegate =
        [YMPYandexMetricaPush userNotificationCenterDelegate];
}

Если у вас уже установлен другой делегат в [UNUserNotificationCenter currentNotificationCenter].delegate, укажите делегат в качестве проксируемого следующим образом:

[YMPYandexMetricaPush userNotificationCenterDelegate].nextDelegate = yourDelegate;

Отправка дополнительной информации

При необходимости вы можете передавать вместе с push-уведомлением дополнительную информацию. Эти данные указываются в веб-интерфейсе AppMetrica при настройке push-кампании. Чтобы получать эту информацию, используйте метод:

NSString *userData = [YMPYandexMetricaPush userDataForNotification:userInfo];

где userInfo содержит данные о push-уведомлении.

Определение получателя уведомления

AppMetrica позволяет определить "свои" push-сообщения, если в приложение были встроены несколько Push SDK.

Чтобы определить, является ли AppMetrica получателем сообщения, используйте следующий метод:

BOOL isRelatedToAppMetricaSDK = [YMPYandexMetricaPush isNotificationRelatedToSDK:userInfo];