STEP 1:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestUserPermissions(application: application) if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] { let info : NSDictionary! = notification as NSDictionary if info != nil { getDataFromNotification(userInfo: info as! [AnyHashable : Any]) Alert.showAlert((self.window?.rootViewController)!, message: "App is terminated", strtitle: "Notification") } } return true }
STEP 2:
func requestUserPermissions(application: UIApplication) { if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.delegate = self center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if( !(error != nil) ) { application.registerForRemoteNotifications() } // Enable or disable features based on authorization. } } else { // Fallback on earlier versions if (!application.isRegisteredForRemoteNotifications) { application.applicationIconBadgeNumber = 0 application.registerForRemoteNotifications() } }
STEP 3:
@objc(userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:) @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Userinfo1 \(response.notification.request.content.userInfo)") getDataFromNotification(userInfo: response.notification.request.content.userInfo) Alert.showAlert((self.window?.rootViewController)!, message: "I am in Background", strtitle: "Notification") } @objc(userNotificationCenter:willPresentNotification:withCompletionHandler:) @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Userinfo2 \(notification.request.content.userInfo)") getDataFromNotification(userInfo: notification.request.content.userInfo) Alert.showAlert((self.window?.rootViewController)!, message: "I am in forground", strtitle: "Notification") }
STEP 4:
func getDataFromNotification(userInfo: [AnyHashable : Any]) { let info : NSDictionary! = userInfo as NSDictionary if info != nil { if let aps = info["aps"] as? NSDictionary { if let resultsDict = aps as? [String:AnyObject] { for _ in resultsDict { let str = dictCleanData.value(forKey: "alert")! let time = dictCleanData.value(forKey: "day")! let dict = ["msg" : str, "time": time] UserDefaults.standard.set(dict, forKey: "dict") UserDefaults.standard.synchronize() } } } } }
STEP 5: Checking Saved Data on Another View Controller
override func viewDidLoad() { super.viewDidLoad() if UserDefaults.standard.value(forKey: "dict") != nil { let dict : NSDictionary = UserDefaults.standard.value(forKey: "dict") as! NSDictionary arr_Veges.add(dict) if UserDefaults.standard.value(forKey: "arr_Veges") != nil { let arr = UserDefaults.standard.value(forKey: "arr_Veges") as! NSArray for oldObj in arr { arr_Veges.add(oldObj) } } UserDefaults.standard.set(arr_Veges, forKey: "arr_Veges") UserDefaults.standard.synchronize() } }
source share