UNNotificationServiceExtension - скрыть, когда приложение активно - PullRequest
0 голосов
/ 10 февраля 2019

Я использую UNNotificationServiceExtension для добавления изображений в уведомления APNS для iOS.Он работает хорошо, за исключением того, что уведомление отображается, даже когда приложение активно (на переднем плане).Когда приложение активно, я бы хотел обрабатывать уведомления с помощью тоста и не показывать стандартное уведомление iOS поверх активного приложения.

В: Есть ли способ определения состояния приложения изнутриРасширение службы уведомлений и заблокировать отображение уведомлений, когда приложение активно?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

На основе документации Apple уведомления не должны появляться, когда приложение по умолчанию активно.

Если ваше приложение находится на переднем плане, когда приходит уведомление, общий пользовательЦентр уведомлений вызывает этот метод, чтобы доставить уведомление непосредственно в ваше приложение.Если вы реализуете этот метод, вы можете предпринять все необходимые действия для обработки уведомления и обновления вашего приложения.Когда вы закончите, вызовите блок завершениеHandler и укажите, как вы хотите, чтобы система оповещала пользователя, если вообще.

Не имеет значения, используете ли вы расширение службы уведомлений - уведомление всегдаобработанное приложением в конце, расширение может быть использовано для его изменения в первую очередь.

Попробуйте этот код (на самом деле, поскольку уведомления появляются, когда приложение активно, вы, вероятно, где-то реализовали этот метод - есливам это не нужно, вы можете просто удалить его).

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    // Perform additional handling of the notification, if needed.

    completionHandler([])
}
0 голосов
/ 10 февраля 2019

Вызов completionHandler(.newData) внутри application(_:didReceiveRemoteNotification:fetchCompletionHandler:) является причиной показа баннера внутри приложения.Вы можете избавиться от этого.

func application(_ application: UIApplication,
                   didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
   // completionHandler(.newData) // <- Comment it out
}
...