2017-02-04 16 views
0

Я сделал приложение, которое отправляет уведомление через определенное время, когда вы нажимаете кнопку. Это уведомление было создано в ViewController. Как заставить приложение сделать что-то после того, как Пользователь нажмет на уведомление? Я использую swift 3 и не использую UILocalNotification.(ios10.2) (swift3) Как узнать, нажал ли пользователь локальное уведомление?

+1

Не используя UILocalNotification, вы имеете в виду, что используете UNNotification? – Simon

ответ

1

В делегате приложения настройте объект как центр UNUserNotificationCenterDelegate центра уведомлений пользователя и реализуйте userNotificationCenter(_:didReceive:withCompletionHandler:).

Обратите внимание, что если пользователь просто отклоняет предупреждение уведомления, этот метод будет не называться , если вы также сконфигурированной категорию (UNNotificationCategory), соответствующая это уведомление, с возможностью .customDismissAction.

1

UILocalNotification устарела в iOS 10. Вместо этого вы должны использовать структуру UserNotifications.

Прежде всего, не забывайте import UserNotifications

Сначала вы должны настроить UNUserNotificationCenterDelegate.

extension AppDelegate: UNUserNotificationCenterDelegate { 
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
     // - Handle notification 
    } 
} 

Than set UNUserNotificationCenter Делегат.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     UNUserNotificationCenter.current().delegate = self 
     UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { (accepted, _) in 
      if !accepted { 
       print("Notification access denied.") 
      } 
     } 
     return true 
    } 

Теперь вы можете настроить свое уведомление.

func setup(at: Date) { 
     let calendar = Calendar.current 
     let components = calendar.dateComponents(in: .current, from: date) 
     let newComponents = DateComponents(calendar: calendar, timeZone: .current, 
     month: components.month, day: components.day, hour: components.hour, minute: components.minute) 

     let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false) 

     let content = UNMutableNotificationContent() 
     content.title = "Reminder" 
     content.body = "Just a reminder" 
     content.sound = UNNotificationSound.default() 

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

     UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 
     UNUserNotificationCenter.current().add(request) {(error) in 
      if let error = error { 
       print("Uh oh! We had an error: \(error)") 
      } 
     } 
    } 

И, наконец, обработай!

extension AppDelegate: UNUserNotificationCenterDelegate { 
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
     if response.notification.request.identifier == "textNotification" { 
      let appDelegate = UIApplication.shared.delegate as! AppDelegate 
      guard let rootVc = appDelegate.window?.rootViewController else { return } 
      let alert = UIAlertController(title: "Notification", message: "It's my notification", preferredStyle: .alert) 
      let action = UIAlertAction(title: "OK", style: .cancel, handler: nil) 
      alert.addAction(action) 
      rootVc.present(alert, animated: true, completion: nil) 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^