Может потребоваться подключить к приложению несколько поставщиков пуш-уведомлений – например edna и Firebase. Статья описывает порядок действий для создания такой интеграции в мобильных приложениях iOS и Android.
Android
- Наследуйте сервисы сторонних поставщиков от FcmPushService. Если используете пуш-сервисы Huawei и RuStore, пропишите наследование и для них тоже: HcmPushService (у Huawei две сигнатуры onNewToken) и RcmPushService.
- При получении пуша определите источник получения пуша. Проверку можно делать по наличию какого-либо поля, либо по специальному флагу. На стороне edna можем добавить во все пуши от edna флаг origin=edna, для этого обратитесь в службу технической поддержки.
- Для пушей от 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
- Пропишите следующие настройки для 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 используйте метод:
@objc public static func isOriginPush(userInfo: [AnyHashable: Any]) -> Bool
Если по каким-то причинам не хотите передавать все пуши в этот метод, можете самостоятельно проверять и передавать пуш в PushX только при наличии параметра origin=edna.