Как получать пуши из нескольких источников
Может потребоваться подключить к приложению несколько поставщиков пуш-уведомлений – например edna и Firebase. Статья описывает порядок действий для создания такой интеграции в мобильных приложениях iOS и Android.
Android
-
Наследуйте сервисы сторонних поставщиков от FcmPushService. Если используете пуш-сервисы Huawei и RuStore, пропишите наследование и для них тоже: HcmPushService (у Huawei две сигнатуры onNewToken) и RcmPushService.
-
При получении пуша определите источник получения пуша. Проверку можно делать по наличию какого-либо поля, либо по специальному флагу. На стороне edna можем добавить во все пуши от edna флаг origin=edna, для этого обратитесь в службу технической поддержки edna.
-
Для пушей от edna вызовите super в методах onMessageReceived и onNewToken.
{public void onNewToken(String s) {// Отправка пуш-токена другим поставщикам пушейsuper.onNewToken(s);}public void onMessageReceived(RemoteMessage message){// Если Push относится к ednaif (проверка что уведомление от edna){super.onMessageReceived(message);}else{//Обработка уведомления от других поставщиков пушей}}}
iOS
-
Пропишите следующие настройки для pushX в методе application DidFinishLaunchingWithOptions в AppDelegate:
let pushXSettings = ["auto_register": false //отключает автоматическую подписку на пуш-уведомления"proxy_mode": true //переносит регистрацию в пуш-сервисе на уровень приложения] -
Вызовите метод для подписки на пуши в AppDelegate:
self.registerForRemoteNotification()func registerForRemoteNotification(){let application = UIApplication.sharedUNUserNotificationCenter.current().delegate = selfapplication.registerForRemoteNotifications();UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert]) { (isOk, error) in}} -
Создайте расширение 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 используйте метод:
```json
@objc public static func isOriginPush(userInfo: [AnyHashable: Any]) -> Bool
Если по каким-то причинам не хотите передавать все пуши в этот метод, можете самостоятельно проверять и передавать пуш в PushX только при наличии параметра origin=edna.