How can I store Push Notification alert message in UserDefault?

后端 未结 2 1491
迷失自我
迷失自我 2020-12-20 20:14

I want to build an app that I can receive push notification and save inside client device for limit 25 Notification. If application running and may not running. How can I st

相关标签:
2条回答
  • 2020-12-20 20:19

    In my opinion you can use NSUserDefaults to store user related information. Push Notifications in your case. However, just a thought, you can simple append the notifications to local storage or a txt file on user device and remove the element as user accesses it.

    But this will only work when user is using the app. In case you want to make this work even when the app is not working, you need to make a backend and store these data in some kind of cloud database. You can extract the records from data and push again to NSUserDefaults or local txt file when the app is turned on again.

    0 讨论(0)
  • 2020-12-20 20:36

    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: TO check saved data on Other 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()
            }
    }
    
    0 讨论(0)
提交回复
热议问题