Swift 4 Повторять локальные уведомления - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь сделать уведомление, которое будет срабатывать каждый день в одно и то же время (7:00 утра).Я могу получить уведомление для запуска, если я использую UNTimeIntervalNotificationTrigger, но не UNCalendarNotificationTrigger, что я действительно хочу.Это то, что у меня сейчас:

В AppDelegate.swift у меня есть:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (didAllow, error) in
        if error != nil {
            print(error as Any)
        }
    }

    return true
}

И я вспомнил, как импортировать UserNotifications тоже

Когда пользователь нажимает кнопкув ViewController.swift это выполняется:

let content = UNMutableNotificationContent()
    content.title = "Do your daily review"
    content.badge = 1

    let triggerTime = DateComponents.init(hour: 7, minute: 0, second: 0)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)

    let request = UNNotificationRequest(identifier: "dailyNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil

Не могли бы вы объяснить мне, что здесь не так и почему UNTimeIntervalNotificationTrigger работает, а UNCalendarNotificationTrigger нет?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Мой оригинальный код работает нормально, мне просто нужно было провести тестирование по-другому.По какой-то причине, если я установил время в своем коде на 7:00 утра, а затем смоделировал это время на моем Mac, это не сработало, но если время, которое я установил, было реальным временем дня + 1 мин., и я жду настоящую минуту, не меняя время моего компьютера, это работает.Возможно, Apple прекращает уведомления, которые приходят вскоре после скачка времени, чтобы люди не имели проблем с уведомлениями при смене часовых поясов.

0 голосов
/ 04 января 2019

Я не уверен, что это решит вашу проблему, но вы устанавливаете DateComponent непосредственно из init.Я бы предложил вам сделать это путем инициализации пустого DateComponent и установить только часы, как вы хотите.

Итак, не могли бы вы попытаться сделать это:

let content = UNMutableNotificationContent()
content.title = "Do your daily review"
content.badge = 1

var triggerTime = DateComponents()
triggerTime.hour = 7

let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)

let request = UNNotificationRequest(identifier: "dailyNotification", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

Я сделал это из своегособственная сторона, и это работает.

Я надеюсь, что это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...