SWIFT отправить локальное уведомление - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь отправить локальное уведомление после этого урока: https://useyourloaf.com/blog/local-notifications-with-ios-10/

Я добавил этот код к своему viewDidLoad():

    let center = UNUserNotificationCenter.current()
    let options: UNAuthorizationOptions = [.alert, .sound];
    center.requestAuthorization(options: options) {
        (granted, error) in
        if !granted {
            print("Something went wrong")
        }
    }
    let content = UNMutableNotificationContent()
    content.title = "Don't forget"
    content.body = "Buy some milk"
    content.sound = UNNotificationSound.default()
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5,
                                                    repeats: false)

    let identifier = "UYLLocalNotification"
    let request = UNNotificationRequest(identifier: identifier,
                                        content: content, trigger: trigger)
    center.add(request, withCompletionHandler: { (error) in
        if let error = error {
            print("error")
        }
    })

, но 5 секунд проходят без какого-либо уведомления. CompletionHandler вызывается с error, являющимся nil

1 Ответ

0 голосов
/ 28 июня 2018

Если вы хотите получать уведомления, когда приложение находится на переднем плане, вам придется добавить еще немного кода в свой контроллер,

  • Добавьте следующую строку в конце viewDidLoad()

    center.delegate = self

    Это делает ваш ViewController делегатом, которому уведомление может вызывать обратный вызов при его обращении.

  • Подтвердите ваш контроллер представления делегату, (Добавить UNUserNotificationCenterDelegate)

    class ViewController: UIViewController, UNUserNotificationCenterDelegate {

    Теперь вы можете писать методы обратного вызова в вашем ViewController.

  • Напишите обратный вызов для представления вашего уведомления, вы можете добавить этот метод сразу после viewDidLoad()

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .badge, .sound]) }

    Это сделает ваше уведомление всплывающим, даже если приложение находится на переднем плане.

ПРИМЕЧАНИЕ : Настоятельно рекомендуется регистрировать уведомления (локальные / удаленные) в AppDelegate, а не в ViewController.

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