Добавить локальное уведомление в iOS 10 - Swift 3

Поэтому я пытался добавить уведомление в новый центр UNUserNotificationCenter, но, похоже, я его не получил.

У моего контроллера просмотра есть действие:

@IBAction func sendPressed(_ sender: AnyObject) {
    let content = UNMutableNotificationContent()

    content.title = "Hello"
    content.body = "What up?"
    content.sound = UNNotificationSound.default()

    // Deliver the notification in five seconds.
    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
    let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)

    // Schedule the notification.
    let center = UNUserNotificationCenter.current()
    center.add(request) { (error) in
        print(error)
    }
    print("should have been added")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let center = UNUserNotificationCenter.current()
    center.requestAuthorization([.alert, .sound]) { (granted, error) in
    }
}

И у меня естьNotification Content Extension в проекте также, но это, кажется, не вызвано вообще, какие-либо идеи, которые я пропускаю? Я пытаюсь пример из пользовательской документации, но это не говорит мне больше, или я пропустил это.

Вот:https://developer.apple.com/reference/usernotifications/unmutablenotificationcontent

Также:https://developer.apple.com/reference/usernotificationsui https://developer.apple.com/reference/usernotifications

Редактировать:

Так что приложение в фоновом режиме сделало свое дело.

 Jayprakash Dubey31 июл. 2016 г., 12:36
Вы можете ссылаться на эту ссылку для подробного использованияjayprakashdubey.blogspot.in/2016/07/...
 ArgaPK05 мар. 2018 г., 09:48
как установить разные компоненты даты или как вызывать локальные уведомления несколько раз?

Ответы на вопрос(5)

Я решил свою проблему следующим образом (Firebase, Swift 3):

Найдите этот метод в вашем AppDelegate:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

Найдите эту строку:

completionHandler()

Конечный набор:

completionHandler([.alert,.sound,.badge])

уведомления не запускаются, если вы не передаете параметры презентации методу завершение.

 TempDev06 авг. 2017 г., 20:52
Apple или Firebase?
 Liam Bolling07 нояб. 2017 г., 18:21
Это действительно должно быть использовано без фреймворка. Это очень просто сделать
 Bjarte04 янв. 2017 г., 19:18
Не вижу смысла в огромной структуре, чтобы сделать что-то такое простое.

Убедитесь, что у вас естьразрешение, Если нет, используйтеUNUserNotificationCenter.current (). RequestAuthorization чтобы получить это. Или следуйтеответ если вы хотите показать запрос всплывающим более одного раза.

Если вы хотите показать уведомлениепередний план, чтобы назначитьUNUserNotificationCenterDelegate куда-то

Покажи мне код

@IBAction func sendPressed(_ sender: AnyObject) {
    let content = UNMutableNotificationContent()
    content.title = "Hello"
    content.body = "What up?"
    content.sound = UNNotificationSound.default()

    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
    let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)

    let center = UNUserNotificationCenter.current()
    center.add(request) { (error) in
        print(error)
    }
}

override func viewDidLoad(_ animated: Bool) {
    super.viewDidLoad(animated)

    // Assign the delegate
    UNUserNotificationCenter.current().delegate = self

    // Ask the permission
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization([.alert, .sound]) { (granted, error) in
        if granted {
            // do something
        }
    }
}
// Remember to add UNUserNotificationCenterDelegate to your view controller
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    print("Got the msg...")
    completionHandler([.badge, .sound, .alert])
}
 Julian Silvestri25 мар. 2019 г., 21:22
Невозможно присвоить значение типа «MainScreen» типу «UNUserNotificationCenterDelegate?», Когда при использовании в представлении загружалась UNUserNotificationCenter.current (). Делегат = self
 Allen26 мар. 2019 г., 11:00
Возможно, вы захотите добавить UNUserNotificationCenterDelegate на ваш экран (ViewController)

Я написал демо-проект здесь:iOS10AdaptationTips .

импортировать уведомления пользователя

///Notification become independent from Foundation
@import UserNotifications;

запросить авторизацию для localNotification

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                      completionHandler:^(BOOL granted, NSError * _Nullable error) {
                          if (!error) {
                              NSLog(@"request authorization succeeded!");
                              [self showAlert];
                          }
                      }];

Запрос авторизации:

график локальных уведомлений

обновить номер значка приложения

    //        //Deliver the notification at 08:30 everyday
    //        NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    //        dateComponents.hour = 8;
    //        dateComponents.minute = 30;
    //        UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:dateComponents repeats:YES];

    UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
    content.title = [NSString localizedUserNotificationStringForKey:@"Elon said:" arguments:nil];
    content.body = [NSString localizedUserNotificationStringForKey:@"Hello Tom!Get up, let's play with Jerry!"
                                                         arguments:nil];
    content.sound = [UNNotificationSound defaultSound];

    /// 4. update application icon badge number
    content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
    // Deliver the notification in five seconds.
    UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger
                                                  triggerWithTimeInterval:5.f repeats:NO];
    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
                                                                          content:content trigger:trigger];
    /// 3. schedule localNotification
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"add NotificationRequest succeeded!");
        }
    }];

тогда это будет выглядеть так:

На заднем плане:Экран блокировки:

Если повтор по умолчанию показывает только одинвместо того, чтобы показывать много на экране блокировки на iOS9:http://i67.tinypic.com/98t75s.jpg а также поддержка 3D Touch автоматическиhttp://a67.tinypic.com/dorw3b.jpg

Я пишу демо здесь:iOS10AdaptationTips .

 Ramakrishna14 дек. 2016 г., 08:37
Привет, я попробовал демо. но он не показывает никаких уведомлений.
 ElonChan26 окт. 2016 г., 06:20
@EktaPadaliya Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «интервал времени должен быть не менее 60 при повторении»
 CMash27 сент. 2016 г., 23:24
Потому что он может;)
 Azik Abdullah19 окт. 2016 г., 09:14
Локальные уведомления не стреляют .... Pl проверкамой пост
 Nik04 нояб. 2016 г., 12:07
@ElonChan Привет Элон, я добавил локальное уведомление, которое ты упомянул здесь для iOS 10. Я также проверил, что с iOS 10 мы можем показывать уведомления также и на переднем плане, но я не могу успешно реализовать это. не могли бы вы помочь мне с этим?
 Ekta Padaliya05 сент. 2016 г., 09:43
Привет, я показал вам демо, но это дает мне исключениеОшибка подтверждения в - [UNTimeIntervalNotificationTrigger _initWithTimeInterval: repeat:] во время выполненияUNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval: 5.f повторения: ДА];.
 4thSpace18 сент. 2016 г., 07:53
Почему ты пишешь в Objective-C?

которая может помочь, вы можете проверить это здесь:https://stackoverflow.com/a/45381380/2296630

Решение Вопроса

и это работает.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization([.alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }
        return true
    }

Редактировать: Вам не нужно помещать свое приложение в фоновом режиме, чтобы представить уведомление от iOS 10 и выше.

Используйте обратный вызов ниже, чтобы настроить уведомление для представления на переднем плане.

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

Вот это пример проекта.

 LC 웃30 дек. 2016 г., 11:14
@SunilLama Нет проблем, братан :)
 Bjarte14 июн. 2016 г., 13:42
Да, у меня есть, до сих пор не повезло. У вас есть полный пример приложения, чтобы я мог увидеть, пропустил ли я что-нибудь?
 LC 웃07 нояб. 2016 г., 08:12
Ааа ... демонстрационный проект был в бета-версии Xcode 8 ... Я обновил пример для Xcode 8 ...
 Bjarte15 июн. 2016 г., 06:46
аааа, в фоновом режиме все получилось!
 ArgaPK05 мар. 2018 г., 09:31
как установить разные компоненты даты или как вызывать локальные уведомления несколько раз?
 rOrlig16 окт. 2016 г., 21:25
Привет @anish Я скачал приложение и запустил на симуляторе. Я не вижу уведомления?
 LC 웃14 июн. 2016 г., 18:40
пожалуйста, посмотрите обновленный ответ ...
 Sunil Lama30 дек. 2016 г., 09:36
@ Anish 웃 спасибо, это очень помогло: D
 LC 웃15 июн. 2016 г., 07:01
@Bjarte в ios10 .. мы можем отображать уведомления, пока приложение находится на переднем плане, как на Android ... см. Пример проекта ....

Ваш ответ на вопрос