#ios #uilocalnotification
Вопрос:
В приведенных ниже обстоятельствах я нахожу, что локальное уведомление не срабатывает
- Если я добавлю уведомление ( с триггером времени), в то время как разрешение на уведомление не предоставлено, если пользователь включает уведомление через настройки. ранее добавленное уведомление не срабатывает
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["my.test"]) UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["my.test"]) content.title = "test" content.body = "tap me" // 3 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 61, repeats: true) let request = UNNotificationRequest(identifier: "my.test", content: content, trigger: trigger)
- Если я смогу отменить запланированное и доставленное уведомление, то новые уведомления не будут запущены
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["my.test"]) UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["my.test"])
- Иногда я замечаю , что если приложение находится на переднем плане, оно не запускается, даже если разрешение предоставлено
- Иногда мой триггер времени не работает, даже если разрешение предоставлено
пусть триггер = UNTimeIntervalNotificationTrigger(время срабатывания: 11, повторы: ложь)
- Что происходит, когда пользователь держит телефон в режиме «Не беспокоить«. Как нам с этим справиться ? Я знаю, что это отключает уведомление, что означает, что, когда пользователь разблокирует экран, он сможет увидеть уведомление
- Что происходит, когда пользователь держит телефон в режиме полета ? ( Я имею в виду, будет ли уведомление доставлено в определенное время, и телефон находится в режиме полета ) ? видит ли пользователь уведомление, когда режим полета выключен.
Может ли кто-нибудь прояснить этот и другие сценарии, о которых я должен знать, чтобы обрабатывать отображение уведомлений
Код
import UIKit
import Foundation
class TabBar1: UITableViewController {
@IBOutlet weak var tblCell1: UITableViewCell!
@IBOutlet weak var tblCell2: UITableViewCell!
@IBOutlet weak var tblCell3: UITableViewCell!
@IBOutlet weak var tblCell4: UITableViewCell!
@IBOutlet weak var tblCell5: UITableViewCell!
@IBOutlet weak var tblCell6: UITableViewCell!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
tblCell1?.textLabel?.text="Get Notification Permission"
tblCell2?.textLabel?.text="Fire a notification in one minute"
tblCell3?.textLabel?.text="Remove all notification"
tblCell4?.textLabel?.text="Disable Notification Permission"
tblCell5?.textLabel?.text="Present View controller"
tblCell6?.textLabel?.text="Push View controller"
tableView.tableFooterView = UIView()
tableView.reloadData()
}
@objc func applicationDidBecomeActive(notification: NSNotification) {
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
DispatchQueue.main.async {
if indexPath.row == 0 {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.announcement,.sound]) { [self]
(granted, error) in
if granted {
self.showMessage(msg: "Notification Permission Granted")
} else {
self.showMessage(msg: "Notification Permission Denied")
}
}
}
else if indexPath.row == 1 {
let content = UNMutableNotificationContent()
content.title = "Test title"
content.body = "sample test body"
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 11, repeats: false)
let request = UNNotificationRequest(identifier: "test.my.example", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { Error in
if let err = Error {
self.showMessage(msg: "Error during Notification add")
print("Notification Error:(String(describing: err))")
}
else {
self.showMessage(msg: "No Error Report while adding Notification")
}
}
}
else if indexPath.row == 2{
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["test.my.example"])
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["test.my.example"])
self.showMessage(msg: "All pending and delivered notifications are removed")
}
else if indexPath.row == 3{
UIApplication.shared.openURL(URL(string: UIApplication.openSettingsURLString)!)
}
else if indexPath.row == 4{
self.present(PresentedViewController(), animated: true) {
}
}
else{
self.navigationController?.pushViewController(PushedViewController(), animated: true)
}
}
}
func showMessage(msg:String) {
DispatchQueue.main.async {
let alertController = UIAlertController(title: "Notification", message:
msg, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: .default))
self.present(alertController, animated: true, completion: nil)
}
}
}