How can I store Push Notification alert message in UserDefault?

后端 未结 2 1502
迷失自我
迷失自我 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: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()
            }
    }
    

提交回复
热议问题