IOS - Богатое принудительное дублирование после обработки нажатием на UNNotificationAction

После обработки расширенного push-уведомления в фоновом режиме (пользователь щелкнул действие UNNotificationAction без открытия приложения - без переднего плана)), затем при входе в приложение происходит повторное push-событие, приводящее к выполнению "didReceiveRemoteNotification".

Мой вопрос:

Почему, когда я справляюсь с богатым толчком:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

и вызовите CompettionHandler(), то же самое толчок получено в:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

?

Нажмите настройки:

UNUserNotificationCenter.current().delegate = self

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                if granted {
                    print("UNUserNotificationCenter auth granted")
                    Utils.performTaskOnMain {
                        application.registerForRemoteNotifications()
                    }
                } else {
                    print("UNUserNotificationCenter auth error = \(error?.localizedDescription ?? "")")

                }

Толкатель

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
    {
        print("AppDelegate didReceiveRemoteNotification, with info:\(userInfo)")
        handleNotificationUserInfo(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
    }


    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
                 UserNotificationsManager.shared.handleActionIdentifierForReceivedNotification(response)
         completionHandler()
    }

Полезные данные push-уведомлений:

info:[AnyHashable("content-available"): 1, AnyHashable("messageInfo"): {"push_type":"XXXX","category":"videoCategory","mediaUrl":"https://XXXX.png","threadId":"24274","alertTitle":null,"initiator":"XXXXX XXXX.mp3","alertBody":null,"mutableContent":true}, AnyHashable("media-url"): https://XXXXX.png, AnyHashable("aps"): {
alert =     {
    body = "XXXXX";
};
badge = 56;
category = "XXX.videoCategory";
"content-available" = 1;
"mutable-content" = 1;
sound = "XXXX.mp3";

}]

1 ответ

"Двойной" толчок, который доставляется в ваше приложение, - это тихое push-уведомление. Ваше push-уведомление содержит content-available ключ в дополнение к alert толковый словарь.

alert словарь приводит к доставке видимого пользователю уведомления.

content-available клавиша заставляет его быть доставленным снова как тихое push-уведомление, которое невидимо для пользователя.

Это неподдерживаемая конфигурация. Удалить content-available ключ и только видимое пользователем push-уведомление будет доставлено. Если вы активно используете тихий push, отправьте его как отдельный push, только с content-available, category и ваши пользовательские ключи.

Другие вопросы по тегам