Christian Gonzalez
Christian Gonzalez

Reputation: 135

Get data from payload when remote push notification arrive while my app is in background or closed

I need to capture data from payload when recive a remote push notification, on IOS 9 i did this using the func: didReceiveRemoteNotification On IOS 10 using swift 3.0 i've implemented this 2 functions.

@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()
}

the second fuction only executes when the user touch the push

i need capture data when a push notification arrives while my app is in background or even closed.

Regards. greetings

Upvotes: 8

Views: 4013

Answers (3)

Marie Amida
Marie Amida

Reputation: 556

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)

}

Upvotes: 1

user3546621
user3546621

Reputation: 377

When a push notification is received and your app isn't running, you need to implement your notification logic in 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!
    }
}

Upvotes: 2

Lorenzo Lacchiana
Lorenzo Lacchiana

Reputation: 1

try with the didReceiveRemoteNotification function in iOS10:

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

                   print(userInfo)

             }

Upvotes: 0

Related Questions