Шаг 1. Выберите канал push-уведомлений
- Перейдите в раздел Настройки → Каналы в личном кабинете edna Pulse.
- Выберите существующий канал push-уведомлений, в котором вы хотите разместить приложение, или подключите новый по инструкции.
В одном канале вы можете объединить несколько приложений, пользователям которых вы хотите отправлять push-уведомления в рамках одной рассылки.
- Убедитесь, что у вас есть:
- приложение iOS с минимальной поддерживаемой версией не ниже iOS 11;
- устройство iOS (iPhone, iPad, iPod Touch) для тестирования;
- компьютер Мас с последней версией Xcode;
- push-сертификат Production Apple Push Certificate;
- утилита CocoaPods или Swift Package Manage.
Шаг 2. Создайте AppGroup и добавьте production-сертификат Apple
- Авторизуйтесь в своём аккаунте Apple developer и выберите Certificates, Identifiers & Profiles.
- Откройте вкладку Identifiers в левом меню и проверьте, зарегистрирована ли AppGroup для вашего приложения.
Идентификатор группы должен соответствовать идентификатору приложения. Например для приложения com.edna.push.demoapp группа должна называться group.com.edna.push.demoapp.
Если группы ещё нет, нажмите справа от заголовка Identifiers и зарегистрируйте новую AppGroup. Запомните идентификатор, он потребуется в дальнейшем. - Получите в Apple сертификат Production Push Certificate (инструкция по получению сертификата).
- Перейдите в раздел Настройки → Каналы → Настройка приложения iOS в личном кабинете edna Pulse.
- Введите идентификатор приложения Bundle ID.
- Прикрепите файл production пуш-сертификата в формате .p12 и введите пароль от него (инструкция по выгрузке сертификата в формате p12).
- Нажмите Сохранить и продолжить.
Шаг 3. Создайте расширение Notification Service Extension
- В проекте приложения в Xcode добавьте новый target (File → New → Target):
- В окне Choose a template for your new target на вкладке iOS выберите тип расширения Notification Service Extension.
- Для основного приложения на вкладке Signing & Capabilities подключите созданную на предыдущем шаге AppGroup: добавьте capability Push Notifications и Background Modes → Remote notification.
- Для расширения Notification Service Extension на вкладке Signing & Capabilities подключите AppGroup и добавьте capability Push Notifications.
- В файлах Info.plist в параметре edna_app_group для приложения и расширения укажите имя AppGroup.
Шаг 4. Подключите библиотеки edna к проекту
Подключите библиотеки edna с помощью CocoaPods или SwiftPackageManager.
Подключение библиотеки для основного приложения:
- Подключение через Swift Package Manager:
https://github.com/edna-ru/push-x-ios
- Подключение через CocoaPods:
pod ednaPushX
Подключение библиотеки для расширения Notification Service Extension:
- Подключение через Swift Package Manager:
https://github.com/edna-ru/push-x-ne-ios
- Подключение через CocoaPods:
pod ednaPushXNE
Шаг 5. Интегрируйте библиотеку в коде приложения
- В файле AppDelegate проекта добавьте следующую строку для подключения библиотеки:
import EDNAPushX
#import <EDNAPushX/EDNAPushX.h>
- Вставьте уникальный ключ приложения appId и инициализируйте библиотеку в методе AppDelegate
applicationDidFinishLaunchingWithOptions
. Ваш ключ appId будет находиться в блоке кода на шаге 4.2 интерактивной инструкции по настройке приложения.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // appId – Уникальный ключ приложения let appId = "Вставьте appId вашего приложения из edna Pulse" // auto_register - Автоматически показывать диалог с запросом на показ пуш-уведомлений let pushXSettings = ["auto_register": true] EDNAPushX.initWithLaunchOptions(options: launchOptions, appId: appId, settings: pushXSettings) return true }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // appId – Уникальный ключ приложения NSString *appId = @"Вставьте appId вашего приложения из edna Pulse"; // auto_register - Автоматически показывать диалог с запросом на показ пуш-уведомлений NSDictionary<NSString *, id> *options = @{@"auto_register": @YES}; [EDNAPushX initWithLaunchOptionsWithOptions: launchOptions appId: appId settings: options]; return YES; }
- Передайте в библиотеку системные вызовы в методах AppDelegate
didRegisterForRemoteNotificationsWithDeviceToken
иdidReceiveRemoteNotification
:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { EDNAPushX.setNotificationDeviceToken(deviceToken) } func application(_ application: UIApplication, userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { EDNAPushX.didReceiveRemoteNotification(userInfo: userInfo, fetchCompletionHandler: completionHandler) }
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ [EDNAPushX setNotificationDeviceToken: deviceToken]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{ [EDNAPushX didReceiveRemoteNotificationWithUserInfo: userInfo fetchCompletionHandler: completionHandler]; }
- Замените код основного класса Notification Service Extension на следующий:
import UserNotifications import EDNAPushXNE class NotificationService: UNNotificationServiceExtension { override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { EDNAPushXNE.didReceive(request, withContentHandler: contentHandler) } override func serviceExtensionTimeWillExpire() { EDNAPushXNE.serviceExtensionTimeWillExpire() } }
#import <UserNotifications/UserNotifications.h> #import <EDNAPushXNE/EDNAPushXNE.h> @implementation NotificationService - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { [EDNAPushXNE didReceiveNotificationRequest: request withContentHandler: contentHandler]; } - (void)serviceExtensionTimeWillExpire { [EDNAPushXNE serviceExtensionTimeWillExpire]; }
- Если пользователь нажмёт на область или кнопки уведомления, будет запущено приложение. Чтобы получить от библиотеки информацию о том, что приложение было запущено по нажатию на уведомление, в метод
EDNAPushX.setOnPushAction
передайте замыкание:
EDNAPushX.setOnPushAction(block: { (action) in ... })
[EDNAPushX setOnPushActionWithBlock:^(EDNAPushXAction *action) { ... }];
Метод EDNAPushX.setOnPushAction
нужно вызвать до инициализации библиотеки — до вызова метода EDNAPushX.initWithLaunchOptions
.
Шаг 6. Поддержите регистрацию устройств пользователей в сервисе edna
- Выберите тип регистрации устройства на платформе.
Устройство пользователя появится в сервисе edna после регистрации. Сейчас доступен только автоматический способ регистрации. Скоро к нему будет добавлен ручной способ.- При автоматической регистрации библиотека edna самостоятельно регистрирует устройство в сервисе edna. Этот способ проще, не требует от вас управлять регистрацией, но не рекомендуется для отправки конфиденциальных данных.
- После появления ручного способа ваш бэкенд сможет самостоятельно регистрировать устройство в сервисе edna через специальный метод API.
- Для регистрации пользователя в сервисе вызовите метод
login
библиотеки, укажите идентификатор пользователя и тип идентификатораSubscriberIdType
.
Следует вызывать метод только после успешной авторизации пользователя в вашем приложении:
EDNAPushX.login(userIdType: .email, userId: "example@mail.com")
[EDNAPushX loginWithUserIdType: EDNAPushXUserIdTypeEmail userId: @"example@mail.com"];
Доступны следующие виды SubscriberIdType
:
- Номер телефона (
PhoneNumber
) - Адрес электронной почты (
Email
) - Идентификаторы Facebook*, Телеграм, Гугл, Эпл, Яндекс (
FacebookI
d*,TelegramId
,GoogleId
,AppleId
,YandexId
) - Внутренние идентификаторы пользователя (
ExtUserId
,CookieId
) - UTM-метка (
UTM
)
- В момент деавторизации пользователя в приложении, вызовите метод
logout
библиотеки, чтобы отключить устройство пользователя в сервисе edna:
EDNAPushX.logout()
[EDNAPushX logout];
* Деятельность компании Meta запрещена на территории Российской Федерации.
Шаг 7. Подключите Notification Content Extension
- В Xcode-проекте добавьте новый target, как и для Notification Service Extension. Далее в окне Choose a template for your new target на вкладке iOS выберите тип расширения Notification Content Extension.
- Подключите библиотеку для расширения Notification Content Extension с помощью Swift Package Manager или CocoaPods.
Подключение через Swift Package Manager:
https://github.com/edna-ru/push-x-ce-ios
Подключение через CocoaPods:
pod ednaPushXCE
- Замените код основного класса Notification Content Extension на следующий:
import UIKit import UserNotifications import UserNotificationsUI import EDNAPushXCE class NotificationViewController: EDNAPushCEController{ }
- Укажите название extension-категории ednaPushCategory в файле Info.plist расширения, в параметре NSExtension/NSExtensionAttributes/UNNotificationExtensionCategory.
Уведомления, требующие расширенной вёрстки, будут отправлены с extension-категорией ednaPushCategory. - В файле Info.plist в параметре edna_app_group для расширения Notification Content Extension укажите то же имя AppGroup, что и для приложения и расширения Notification Service Extension.
- Убедитесь, что для параметра NSExtension / NSExtensionAttributes / UNNotificationExtensionDefaultContentHidden указано значение YES (1). Данный параметр позволяет скрыть информацию из оригинального уведомления при отображении расширенного вида.
- Для расширения Notification Content Extension на вкладке Signing & Capabilities подключите тот же AppGroup, что и для приложения и расширения Notification Service Extension.
Перед загрузкой обновленной версии в магазин приложений не забудьте обновить декларацию о сборе данных.