UNNotificationServiceExtension - скрыть, когда приложение активно
Я использую UNNotificationServiceExtension
добавить изображения в уведомления APNS для iOS. Он работает хорошо, за исключением того, что уведомление отображается, даже когда приложение активно (на переднем плане). Когда приложение активно, я хотел бы обрабатывать уведомления, используя тост, и не показывать стандартное уведомление iOS поверх активного приложения.
Вопрос: Есть ли способ обнаружить состояние приложения из расширения службы уведомлений и заблокировать отображение уведомления, когда приложение активно?
2 ответа
Основываясь на документации Apple, уведомления не должны появляться, когда приложение активно по умолчанию.
Если ваше приложение находится на переднем плане, когда приходит уведомление, центр уведомлений общего пользователя вызывает этот метод, чтобы доставить уведомление непосредственно в ваше приложение. Если вы реализуете этот метод, вы можете предпринять все необходимые действия для обработки уведомления и обновления вашего приложения. Когда вы закончите, вызовите блок завершение Handler и укажите, как вы хотите, чтобы система оповещала пользователя, если вообще.
Не имеет значения, используете ли вы расширение службы уведомлений - приложение всегда обрабатывает уведомление, хотя расширение может быть использовано для его изменения в первую очередь.
Попробуйте этот код (на самом деле, поскольку уведомления появляются, когда приложение активно, вы, вероятно, где-то реализовали этот метод - если он вам не нужен, вы можете просто удалить его).
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// Perform additional handling of the notification, if needed.
completionHandler([])
}
Призвание completionHandler(.newData)
внутри application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
является причиной, чтобы показать баннер внутри приложения. Вы можете избавиться от этого.
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// completionHandler(.newData) // <- Comment it out
}