фоновое выполнение не работает при получении уведомления pu sh в ios - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь передать данные в базовые данные, когда приложение получает уведомление pu sh, это работает нормально, когда приложение находится в рабочем состоянии с методом ниже

 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
    {
        if let userInfo = notification.request.content.userInfo as? [String : Any]
        {
            let aps = userInfo["aps"] as? NSDictionary
            let alert = aps?["alert"] as? NSDictionary

                let context = self.persistentContainer.viewContext

                let entity = NSEntityDescription.entity(forEntityName: "NotificationDetails", in: context)
                let NotificationDetail = NSManagedObject(entity: entity!, insertInto: context)
                NotificationDetail.setValue( incidentDetails.incidentNumber, forKey: "Number")

                do {
                    try context.save()
                } catch {
                    print("Failed saving")
                }
         }
        }

Но когда приложение не работает Я использую метод ниже, это не сохранение,

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
    {
        if let userInfo = notification.request.content.userInfo as? [String : Any]
        {
            let aps = userInfo["aps"] as? NSDictionary
            let alert = aps?["alert"] as? NSDictionary

                let context = self.persistentContainer.viewContext

                let entity = NSEntityDescription.entity(forEntityName: "NotificationDetails", in: context)
                let NotificationDetail = NSManagedObject(entity: entity!, insertInto: context)
                NotificationDetail.setValue( incidentDetails.incidentNumber, forKey: "Number")

                do {
                    try context.save()
                } catch {
                    print("Failed saving")
                }
         }


        completionHandler(.newData)
    }

Как я могу сохранить данные, когда приложение не работает?

1 Ответ

0 голосов
/ 09 января 2020

Вы должны убедиться, что ваша полезная нагрузка уведомлений имеет «контент-доступный»: 1; что-то вроде:

{
   "aps" : {
      "content-available" : 1
   },
   "acme1" : "bar",
   "acme2" : 42
}

И тогда вы получите обратный вызов:

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

...