Ответ
Когда приложение находится в состоянии not running (закрыто или не запускалось после перезагрузки устройства), обработка push-уведомления зависит от действий пользователя.
Сценарий 1: Пользователь тапает по уведомлению
- Приложение запускается, проходя состояния:
not running→inactive→active. - В
AppDelegateвызывается методapplication(_:didFinishLaunchingWithOptions:). Полезная нагрузка (payload) уведомления доступна в словареlaunchOptionsпо ключуUIApplication.LaunchOptionsKey.remoteNotification. - После этого вызывается метод
application(_:didReceiveRemoteNotification:fetchCompletionHandler:).
Пример обработки:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let notificationPayload = launchOptions?[.remoteNotification] as? [String: Any] {
// Обработка данных уведомления при запуске
handleNotificationAtLaunch(payload: notificationPayload)
}
return true
}
Сценарий 2: Пользователь игнорирует уведомление
- Приложение остается в состоянии
not running. - Ни один из методов
AppDelegateдля обработки удаленных уведомлений не вызывается.
Важно: Для поддержки фонового обновления контента через push (Background Fetch) необходимо:
- Включить capability Background Modes и отметить Remote notifications.
- В payload уведомления добавить ключ
"content-available": 1. - Реализовать
fetchCompletionHandlerдля уведомления системы о завершении работы.