2016-12-08 7 views
5

私はプッシュ通知を受信し、クライアントデバイス内に制限25の通知を保存できるアプリを構築したいと考えています。アプリケーションが実行中で、実行されていない可能性があります。 PushNotification警告メッセージを保存するにはどうしたらいいですか?その時間を実行しているアプリが到着した場合通知のアラートメッセージがUserDefaultに保存されていますが、アプリがバックグラウンドまたは非アクティブの状態で保存されていない場合UserDefaultの通知アラートメッセージ。 UserDefaultまたはCoreDataを使用してクライアントアプリケーション内にプッシュ通知メッセージを格納する必要があるかどうかを知りたいですか?そうでない場合、私は何を使うべきですか?私は本当に私を迎える手が必要です。UserDefaultにプッシュ通知アラートメッセージを保存するにはどうすればよいですか?

お願いします。ありがとう。

+5

プッシュ通知を開くことなく処理することはできません。私のアドバイスは、あなたのサーバー上の各デバイスに通知を送信し続ける代わりに – xmhafiz

+0

@ h44f33z他の方法で私はUserDefualtまたはCoreDateに届いた通知を保存できますか? – iParesh

+0

私にとって、「どこで」保存するのではなく、受け取った通知を開くまでプッシュ通知をチェックすることはできません。また、3つの通知のうちの1つを開くと、開いたものだけを取得できます。残りのものは内容を取得しません。 – xmhafiz

答えて

1

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 
    } 

ステップ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() 
      } 
     } 

ステップ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") 
     } 

ステップ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:他のビューコントローラあなたが店の利用者に関する情報にNSUserDefaultsを使用することができます私の意見で

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

アプリケーションが実行されていません。通知データがUserDefaultに保存されていません。 – iParesh

+0

あなたは何を言おうとしていますか?説明してください。データを保存するには、アプリケーションを実行する必要があります。 UserDefaultはデータを格納するために使用されます。つまりUserDefaultsを使用すると、以前のデータと現在のデータを見ることができます。 – Amanpreet

+0

または、アプリがバックグラウンドにあるか終了しているかをあなたが理解している場合は、それは...ですか? – Amanpreet

1

に保存したデータを確認すること。あなたのケースでプッシュ通知。しかし、ユーザーのデバイス上のローカルストレージまたはtxtファイルに簡単に通知を追加して、ユーザーがアクセスするときにその要素を削除することができます。

これは、ユーザーがアプリを使用している場合にのみ機能します。アプリが機能していなくてもこの作業をしたい場合は、バックエンドを作成してこれらのデータを何らかのクラウドデータベースに保存する必要があります。データを元にレコードを抽出し、アプリを再度オンにすると、NSUserDefaultsまたはローカルtxtファイルに再度プッシュできます。

関連する問題