Получать данные из полезной нагрузки, когда приходит удаленное 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)

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