我想在我的设置页面中使用UISwich,如果用户将其关闭,它将暂时禁用所有本地通知。
在swift application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
注册本地通知。
是否有可以取消注册本地通知的功能,就像用户从iOS设置页面中转换特定通知一样?
答案 0 :(得分:1)
第一种方法
当用户更改交换机的值时,您可以将其状态存储在NSUserDefaults中。
通过application(_:didReceiveLocalNotification:)
或application:didReceiveRemoteNotification:
收到通知时,请检查上述状态更改,如果用户已关闭通知,请忽略它们。
第二种方法
使用unregisterForRemoteNotifications()
您应该在极少数情况下调用此方法,例如a 新版本的应用程序删除了对所有类型的遥控器的支持 通知。用户可以暂时阻止应用程序接收 通过“设置”的“通知”部分进行远程通知 应用程序。通过此方法取消注册的应用程序始终可以重新注册。
第三种方法
使用远程通知时,您将有服务器端代码将这些通知推送到APNS。在这种情况下,当用户想要停止通知时,您可以设置标记服务器端,告知它不再将它们发送到APNS。
答案 1 :(得分:1)
确保导入UIKit和UserNotifications 以下代码位于swift 3
中func removeLocalNotifications() {
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: {requests -> () in
print("\(requests.count) requests -------")
for request in requests{
let notifIdentifier: String = request.identifier as String
print("notifIdentifier deleted: \(notifIdentifier)")
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [notifIdentifier])
}
})
UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: {deliveredNotifications -> () in
print("\(deliveredNotifications.count) Delivered notifications-------")
for notification in deliveredNotifications{
let notifIdentifier: String = notification.request.identifier as String
print("notifIdentifier deleted: \(notifIdentifier)")
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [notifIdentifier])
}
})
} else { ///for iOS < 10
let app: UIApplication = UIApplication.shared
for oneEvent in app.scheduledLocalNotifications! {
print("oneEvent Deleted ======================= \(oneEvent)")
let notification = oneEvent as UILocalNotification
app.cancelLocalNotification(notification)
}
}
}