Как в iOS 13 переодически проверять базу и отправлять User Notification?

В iOS 13 можно периодически проверять базу данных и отправлять пользовательские уведомления с помощью функциональности, предоставляемой iOS в рамках Background App Refresh и Local Notifications.

1. Запрос разрешений: Прежде всего, вам потребуется запросить у пользователя разрешение на отправку уведомлений. Вы можете использовать класс UNUserNotificationCenter для запроса разрешений и настройки центра уведомлений:

import UserNotifications

// Запрос разрешений для отправки уведомлений
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
   if granted {
      // Разрешение получено
   } else {
      // Разрешение не получено
   }
}

2. Проверка базы данных: Чтобы периодически проверять базу данных, вы можете использовать Background App Refresh. Включите его в настройках вашего приложения и добавьте следующий код, чтобы указать, когда ваше приложение должно запускаться в фоновом режиме:

UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)

3. Реализация метода Background Fetch: Добавьте метод приложения didFinishLaunchingWithOptions, чтобы установить делегат для выполнения фоновых запросов:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {  
   UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
   return true
}

После этого реализуйте метод backgroundFetchCompletionHandler, который будет вызываться, когда ваше приложение выполняет фоновый запрос:

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
   // Здесь можно выполнять проверку базы данных и отправку уведомлений
   // Если операции выполнены успешно, вызывайте completionHandler(.newData)
   // Если операции не выполнены или нет обновлений, вызывайте completionHandler(.noData)
}

4. Отправка User Notification: Для отправки пользовательского уведомления используйте класс UNUserNotificationCenter. Вам потребуется создать экземпляр класса UNMutableNotificationContent, заполнить его контентом уведомления и передать его в метод add, чтобы отправить уведомление:

let content = UNMutableNotificationContent()
content.title = "Название уведомления"
content.body = "Текст уведомления"
content.sound = UNNotificationSound.default

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "Уникальный идентификатор", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request) { error in
   if let error = error {
      print("Ошибка отправки уведомления: (error.localizedDescription)")
   }
}

Теперь ваше приложение будет периодически проверять базу данных и отправлять пользовательские уведомления при необходимости. Обязательно учтите правила и ограничения, установленные для Background App Refresh и Local Notifications, чтобы ваше приложение успешно прошло ревью и работало корректно на устройствах iOS 13.