Skip to main content

Как подключить push-уведомления для iOS

Обновлено: 20 декабря 2024

Выберите канал push-уведомлений

  1. Перейдите в раздел Настройки → Каналы в личном кабинете edna Pulse.

  2. Выберите существующий канал push-уведомлений, в котором вы хотите разместить приложение, или подключите новый.

    info

    В одном канале вы можете объединить несколько приложений, пользователям которых вы хотите отправлять push-уведомления в рамках одной рассылки

    File IconКак подключить канал Push
  3. Убедитесь, что у вас есть:

    • приложение iOS с минимальной поддерживаемой версией не ниже iOS 11;
    • устройство iOS (iPhone, iPad, iPod Touch) для тестирования;
    • компьютер Мас с последней версией Xcode;
    • push-сертификат Production Apple Push Certificate;
    • утилита CocoaPods или Swift Package Manage.
    File IconКак получить пуш-сертификат в Apple и выгрузить его в формате P12

Создайте AppGroup и добавьте production-сертификат Apple

  1. Авторизуйтесь в своём аккаунте Apple developer и выберите Certificates, Identifiers & Profiles.

    Apple Developer

  2. Откройте вкладку Identifiers в левом меню и проверьте, зарегистрирована ли AppGroup для вашего приложения.

    Sign In - Apple

    Идентификатор группы должен соответствовать идентификатору приложения. Например для приложения com.edna.push.demoapp группа должна называться group.com.edna.push.demoapp.

    alt text

  3. Если группы ещё нет, нажмите 

     справа от заголовка Identifiers и зарегистрируйте новую AppGroup. Запишите или запомните идентификатор — он потребуется в дальнейшем.

    alt text

  4. Получите в Apple сертификат Production Push Certificate.

    File IconКак получить пуш-сертификат в Apple и выгрузить его в формате P12
  5. Перейдите в раздел Настройки → Каналы → Настройка приложения iOS в личном кабинете edna Pulse.

  6. Введите идентификатор приложения Bundle ID.

  7. Прикрепите файл production пуш-сертификата в формате .p12 и введите пароль от него.

    alt text

    File IconКак получить пуш-сертификат в Apple и выгрузить его в формате P12
  8. Нажмите Сохранить и продолжить.

Создайте расширение Notification Service Extension

  1. В проекте приложения в Xcode добавьте новый target (FileNewTarget):

    alt text

  2. В окне Choose a template for your new target на вкладке iOS выберите тип расширения Notification Service Extension.

    alt text

  3. Для основного приложения на вкладке Signing & Capabilities подключите созданную на предыдущем шаге AppGroup: добавьте capability Push Notifications и Background ModesRemote notification.

    alt text

  4. Для расширения Notification Service Extension на вкладке Signing & Capabilities подключите AppGroup и добавьте capability Push Notifications.

    alt text

  5. В файлах Info.plist в параметре edna_app_group для приложения и расширения укажите имя AppGroup.

    alt text

Подключите библиотеки edna к проекту

Подключите библиотеки edna с помощью CocoaPods или SwiftPackageManager

Подключение библиотеки для основного приложения

https://github.com/edna-ru/push-x-ios

Подключение библиотеки для расширения Notification Service Extension

https://github.com/edna-ru/push-x-ne-ios

Интегрируйте библиотеку в коде приложения

  1. В файле AppDelegate проекта добавьте следующую строку для подключения библиотеки:

    import EDNAPushX
  2. Вставьте уникальный ключ приложения 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
    }
  3. Передайте в библиотеку системные вызовы в методах 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)
    }
  4. Замените код основного класса 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()
    }
    }
  5. Если пользователь нажмёт на область или кнопки уведомления, будет запущено приложение. Чтобы получить от библиотеки информацию о том, что приложение было запущено по нажатию на уведомление, в метод EDNAPushX.setOnPushAction передайте замыкание:

    EDNAPushX.setOnPushAction(block: { (action) in
    ...
    })

Метод EDNAPushX.setOnPushAction нужно вызвать до инициализации библиотеки — до вызова метода EDNAPushX.initWithLaunchOptions.

Поддержите регистрацию устройств пользователей в сервисе edna

info

Устройство пользователя появится в edna Pulse после регистрации. Сейчас доступен только автоматический способ регистрации. Скоро будет добавлен ручной способ.

  1. Выберите тип регистрации устройства на платформе.

    • При автоматической регистрации библиотека edna самостоятельно регистрирует устройство в сервисе edna. Этот способ проще, не требует от вас управлять регистрацией, но не рекомендуется для отправки конфиденциальных данных.
    • После появления ручного способа ваш бэкенд сможет самостоятельно регистрировать устройство в сервисе edna через специальный метод API.
  2. Для регистрации пользователя в сервисе вызовите метод login библиотеки, укажите идентификатор пользователя и тип идентификатора SubscriberIdType.

    Вызовите метод после успешной авторизации пользователя в вашем приложении:

    EDNAPushX.login(userIdType: .email, userId: "example@mail.com")

    Доступны следующие виды SubscriberIdType:

    • Номер телефона (PhoneNumber)
    • Адрес электронной почты (Email)
    • идентификаторы FacebookId*, TelegramId, GoogleId, AppleId, YandexId;
    • Внутренние идентификаторы пользователя (ExtUserId, CookieId)
    • UTM-метка (UTM)
  3. В момент деавторизации пользователя в приложении, вызовите метод logout библиотеки, чтобы отключить устройство пользователя в сервисе edna:

    EDNAPushX.logout()

Подключите Notification Content Extension

  1. В Xcode-проекте добавьте новый target, как и для Notification Service Extension. Далее в окне Choose a template for your new target на вкладке iOS выберите тип расширения Notification Content Extension.

    alt text

  2. Подключите библиотеку для расширения Notification Content Extension с помощью Swift Package Manager или CocoaPods.

    https://github.com/edna-io/push-x-ce-ios
  3. Замените код основного класса Notification Content Extension на следующий:

    NotificationViewController.swift
        import UIKit
    import UserNotifications
    import UserNotificationsUI
    import EDNAPushXCE

    class NotificationViewController: EDNAPushCEController{

    }
  4. Укажите название extension-категории ednaPushCategory в параметре NSExtension/NSExtensionAttributes/UNNotificationExtensionCategory файла расширения Info.plist. Уведомления, требующие расширенной вёрстки, будут отправлены с extension-категорией ednaPushCategory.

  5. В файле Info.plist в параметре edna_app_group для расширения Notification Content Extension укажите то же имя AppGroup, что и для приложения и расширения Notification Service Extension.

  6. Убедитесь, что для параметра NSExtension/NSExtensionAttributes/UNNotificationExtensionDefaultContentHidden указано значение YES (1). Данный параметр позволяет скрыть информацию из оригинального уведомления при отображении расширенного вида.

    alt text

  7. Для расширения Notification Content Extension на вкладке Signing & Capabilities подключите тот же AppGroup, что и для приложения и расширения Notification Service Extension.

  8. Перед загрузкой обновленной версии в магазин приложений не забудьте обновить декларацию о сборе данных.

    File IconЗаполнение декларации о сборе данных

 
 
 
 
 


danger

*Деятельность компании Meta запрещена на территории Российской Федерации