Skip to main content

Как получать пуши из нескольких источников

Обновлено: 25 мая 2023

Может потребоваться подключить к приложению несколько поставщиков пуш-уведомлений – например edna и Firebase. Статья описывает порядок действий для создания такой интеграции в мобильных приложениях iOS и Android.

Android

  1. Наследуйте сервисы сторонних поставщиков от FcmPushService. Если используете пуш-сервисы Huawei и RuStore, пропишите наследование и для них тоже: HcmPushService (у Huawei две сигнатуры onNewToken) и RcmPushService.

  2. При получении пуша определите источник получения пуша. Проверку можно делать по наличию какого-либо поля, либо по специальному флагу. На стороне edna можем добавить во все пуши от edna флаг origin=edna, для этого обратитесь в службу технической поддержки edna.

  3. Для пушей от edna вызовите super в методах onMessageReceived и onNewToken.


    {
    public void onNewToken(String s) {
    // Отправка пуш-токена другим поставщикам пушей
    super.onNewToken(s);
    }
    public void onMessageReceived(RemoteMessage message)
    {
    // Если Push относится к edna
    if (проверка что уведомление от edna)
    {
    super.onMessageReceived(message);
    }
    else
    {
    //Обработка уведомления от других поставщиков пушей
    }
    }
    }

iOS

  1. Пропишите следующие настройки для pushX в методе application DidFinishLaunchingWithOptions в AppDelegate:


    let pushXSettings = [
    "auto_register": false //отключает автоматическую подписку на пуш-уведомления
    "proxy_mode": true //переносит регистрацию в пуш-сервисе на уровень приложения
    ]

  2. Вызовите метод для подписки на пуши в AppDelegate:


    self.registerForRemoteNotification()

    func registerForRemoteNotification(){
    let application = UIApplication.shared

    UNUserNotificationCenter.current().delegate = self
    application.registerForRemoteNotifications();

    UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert]) { (isOk, error) in
    }
    }

  3. Создайте расширение AppDelegate, подпишитесь на получение пушей и, если пуш от edna, передайте его на обработку в EDNAPushX:


    extension AppDelegate: UNUserNotificationCenterDelegate{
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
    {
    if EDNAPushX.isOriginPush(userInfo://проверка источника пуша notification.request.content.userInfo){
    EDNAPushX.userNotificationCenter(center, willPresent: notification, withCompletionHandler: completionHandler)
    }
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
    {
    if EDNAPushX.isOriginPush(userInfo: //проверка источника пуша response.notification.request.content.userInfo){
    EDNAPushX.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
    }
    }
    }

4. Для проверки принадлежности пуша к edna используйте метод:

```bash

@objc public static func isOriginPush(userInfo: [AnyHashable: Any]) -> Bool

Если по каким-то причинам не хотите передавать все пуши в этот метод, можете самостоятельно проверять и передавать пуш в PushX только при наличии параметра origin=edna.