Я сделал приложение, которое отправляет уведомление через определенное время, когда вы нажимаете кнопку. Это уведомление было создано в ViewController. Как заставить приложение сделать что-то после того, как Пользователь нажмет на уведомление? Я использую swift 3 и не использую UILocalNotification.(ios10.2) (swift3) Как узнать, нажал ли пользователь локальное уведомление?
ответ
В делегате приложения настройте объект как центр UNUserNotificationCenterDelegate центра уведомлений пользователя и реализуйте userNotificationCenter(_:didReceive:withCompletionHandler:)
.
Обратите внимание, что если пользователь просто отклоняет предупреждение уведомления, этот метод будет не называться , если вы также сконфигурированной категорию (UNNotificationCategory), соответствующая это уведомление, с возможностью .customDismissAction
.
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)
}
}
}
Не используя UILocalNotification, вы имеете в виду, что используете UNNotification? – Simon