当用户使用UISwitch禁用所有本地通知时,如何临时禁用所有本地通知?

时间:2016-01-28 20:12:10

标签: ios swift swift2 apple-push-notifications

我想在我的设置页面中使用UISwich,如果用户将其关闭,它将暂时禁用所有本地通知。

在swift application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))注册本地通知。

是否有可以取消注册本地通知的功能,就像用户从iOS设置页面中转换特定通知一样?

2 个答案:

答案 0 :(得分:1)

第一种方法

  1. 当用户更改交换机的值时,您可以将其状态存储在NSUserDefaults中。

  2. 通过application(_:didReceiveLocalNotification:)application:didReceiveRemoteNotification:收到通知时,请检查上述状态更改,如果用户已关闭通知,请忽略它们。

  3. 第二种方法

    使用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)
        }
    }
}