How to save push notification message in userdefault?

I want to create an application in which I can receive a push notification and save it inside a client device to limit notification 25. If the application works and may not work. How can I save a PushNotification message ?. If the application is running at this time, a warning message appears with a notification stored in UserDefault, but when the application is in the background or inactive, that time the alert message was not saved in UserDefault. I want to know that I need to use UserDefault or CoreData to store the Push Notification message inside the client application or not? If it is not, what should I use? I really need a hand to pick me up.

Please, help. Thanks.

+5
source share
2 answers

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() } } 
+1
source

In my opinion, you can use NSUserDefaults to store information related to the user. Push notifications in your case. However, just a thought, you can simply add notifications to the local storage or txt file on the user device and delete the item when the user accesses it.

But this will only work when the user uses the application. If you want to do this work, even when the application does not work, you need to make a backend and save this data in some kind of cloud database. You can extract the records from the data and click on NSUserDefaults or the local txt file again when the application is turned on again.

+1
source

Source: https://habr.com/ru/post/1260977/


All Articles