Локальное уведомление в разные даты Swift 3

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

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        UIApplication.shared.statusBarStyle = .default
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (allowed, error) in
                UNUserNotificationCenter.current().delegate = self
        scheduleNotification()
        return true
    }



 func scheduleNotification() {

     var date = DateComponents()
     date.year = 2017
     date.month = 6
     date.day = 12
     date.hour = 22
     date.minute = 39

            let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: false)
            let content = UNMutableNotificationContent()
            content.title = "Schedule Notification"
            content.body = "Today is my Birthday"
            content.sound = UNNotificationSound.default()
            content.badge = 1
            let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
            UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
            UNUserNotificationCenter.current().add(request) {(error) in
                if let error = error {
                    print("error: \(error)")
                }
   }

Ценим и заранее благодарим


person King    schedule 14.06.2017    source источник
comment
Вам нужно запланировать несколько уведомлений; по одному на каждую требуемую дату. Если вы не хотите помечать значок приложения, не устанавливайте свойство badge.   -  person Paulw11    schedule 14.06.2017
comment
спасибо @Paulw11, так что ваш быстрый ответ ..   -  person King    schedule 14.06.2017


Ответы (2)


Для повторных уведомлений вы должны запланировать несколько уведомлений. Вы можете сделать так.

func scheduleNotification(_ title:String, body:String, dateComponents :DateComponents) {        
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
    let content = UNMutableNotificationContent()
    content.title = title
    content.body = body
    content.sound = UNNotificationSound.default()
    content.badge = 1
    let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)
    UNUserNotificationCenter.current().add(request) {(error) in
        if let error = error {
            print("error: \(error)")
        }
    }
}

И используйте вышеуказанную функцию, чтобы запланировать несколько уведомлений, подобных этому.

var date = DateComponents()
date.year = 2017
date.month = 6
date.day = 12
date.hour = 22
date.minute = 39    

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
scheduleNotification("Schedule Notification", body: "Today is my Birthday", dateComponents: date)
scheduleNotification("Schedule Notification 2", body: "Today is my Birthday 2", dateComponents: date2)
scheduleNotification("Schedule Notification 3", body: "Today is my Birthday 3", dateComponents: date3)

Вторая часть вашего вопроса, как убрать значок значка. Добавьте следующий код куда-нибудь в свой applicationDidFinishLaunching или applicationDidBecomeActive.

UIApplication.shared.applicationIconBadgeNumber = 0;
person Bilal    schedule 14.06.2017
comment
это не работает, я создаю новую функцию с именемnotificationLauncher(), и в этой функции я создаю три разных компонента даты, а затем я вызываю функцию scheduleNotification с параметрами заголовка, тела и компонентов, а затем я вызываю эту функцию в делегате приложения applicationDidFinisgLaunchingWithOptions :( - person King; 15.06.2017
comment
работает только одно уведомление, а не несколько, даже когда я пытаюсь использовать несколько функций для вызова нескольких уведомлений, я даже не получаю одно уведомление :( - person King; 15.06.2017
comment
вы получаете первое уведомление или третье ?? - person Bilal; 15.06.2017
comment
Я не получаю никаких уведомлений, когда пытаюсь получить несколько уведомлений, но когда я пытаюсь получить одно уведомление, я могу его получить... - person King; 15.06.2017
comment
Приведенный выше код не работает, он работает только для последней даты расписания (час, минута) - person ArgaPK; 05.03.2018

Установка другого идентификатора для каждого уведомления дает требуемый результат.

notificationType — это любая строка, которую вы можете передать при планировании уведомления.

let request = UNNotificationRequest(identifier: "Medicine Local Notification\(notificationType)", content: content, trigger: trigger)

person BuddinDev    schedule 07.08.2020