Получать данные из полезной нагрузки, когда приходит удаленное push-уведомление, когда мое приложение находится в фоновом режиме или закрыто
Мне нужно захватить данные из полезной нагрузки при получении удаленного push-уведомления, в IOS 9 я сделал это с помощью функции: didReceiveRemoteNotification В IOS 10 с использованием swift 3.0 я реализовал эти 2 функции.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
print("\(notification.request.content.userInfo)")
completionHandler([.alert, .badge, .sound])
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
{
print("User Info = ",response.notification.request.content.userInfo)
completionHandler()
}
вторая функция выполняется только тогда, когда пользователь касается нажатия
мне нужно захватить данные, когда приходит push-уведомление, когда мое приложение находится в фоновом режиме или даже закрыто.
С уважением. Привет
3 ответа
Когда push-уведомление получено, а ваше приложение не запущено, вам необходимо реализовать логику уведомлений в didFinishLaunchingWithOptions:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Called when a notification is tapped and the app wasn't running, not in foreground neither in background.
if let userInfo = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject]{
// your logic here!
}
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Capture payload here something like:
let appState = userInfo["appState"] as? String
print(appState!)
// Do something for every state
if (application.applicationState == UIApplicationState.active){
print("Active")
}else if (application.applicationState == UIApplicationState.background){
print("Background")
}else if (application.applicationState == UIApplicationState.inactive){
print("Inactive")
}
completionHandler(.noData)
}
Попробуйте использовать функцию didReceiveRemoteNotification в iOS10:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print(userInfo)
}