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

Я пытаюсь запланировать уведомления в моем проекте. Я не получаю никаких ошибок или сбоев во время выполнения, однако по какой-то причине я не получаю никаких уведомлений на симуляторе при планировании. Я не уверен, где именно я иду не так, как я был успешным в предыдущем проекте.

У кого-нибудь есть предложения?

import UserNotifications

func addNotification(title: String, category: String, UI: String, date: Date) {

    // Remove Notification

    removeNotifcation(UI: UI)

    // Create Notification
    // iOS 10 Notification

    if #available(iOS 10.0, *) {

        let notif = UNMutableNotificationContent()

        notif.title = title
        notif.subtitle = "Reminder for \(title)"
        notif.body = "Your Reminder for \(title) set for \(date)"
        notif.sound = UNNotificationSound.default()
        notif.categoryIdentifier = UI

        let today = Date()

        let interval = date.timeIntervalSince(today as Date)

        let notifTrigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: false)

        let request = UNNotificationRequest(identifier: title, content: notif, trigger: notifTrigger)

        UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in
            if error != nil {
                print(error as Any)
                // completion(Success: false)
            } else {
                //completion(Sucess: true)
            }
        })
    } else {
        let newNotification:UILocalNotification = UILocalNotification()

        newNotification.category = category
        newNotification.userInfo = [ "UUID"  : UI]
        newNotification.alertBody = "Your reminder for \(title)"
        newNotification.fireDate = date
        //notification.repeatInterval = nil
        newNotification.soundName = UILocalNotificationDefaultSoundName

        UIApplication.shared.scheduleLocalNotification(newNotification)

    }

}

func removeNotifcation(UI: String) {

    //Remove Notif
    //iOS 10 Notification
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [UI])
    } else {
        //Remove Notif

        let app:UIApplication = UIApplication.shared
        for oneEvent in app.scheduledLocalNotifications! {
            let notification = oneEvent as UILocalNotification
            let userInfoCurrent = notification.userInfo!
            let uuid = userInfoCurrent["UUID"] as! String
            if uuid == UI {
                //Cancelling local notification
                app.cancelLocalNotification(notification)
                break;
            }
        }
    }

}

Вот как я называю методы

dataManager.addNotification(title: "String", category: "001", UI: uuid, date: datePicker.date)

1 Ответ

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

Уведомления не появляются, когда приложение находится на переднем плане, только если вы внедрили willPresent метод делегата и из-за

 let today = Date()

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

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

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        print("granted: (\(granted)")
    }

  return true
}

Также вы можете посмотреть этот учебник

//

Редактировать: , чтобы убедиться, что он в любом случае запускает реализацию

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

      print("handling notifications with the TestIdentifier Identifier")

     completionHandler()

}

и установите делегата на ВК

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