Quiero usar UISwich en mi página de configuración, si el usuario lo apaga, desactivará temporalmente todas las notificaciones locales.

En rápido application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) para registrar notificaciones locales.

¿Hay alguna función en la que pueda anular el registro de las notificaciones locales, al igual que el usuario activa la notificación específica desde la página de configuración en iOS?

2
Iridescent330 28 ene. 2016 a las 23:12

2 respuestas

La mejor respuesta

Primer método

  1. Cuando el usuario cambia el valor del conmutador, puede almacenar su estado en NSUserDefaults.

  2. Cuando reciba una notificación a través de application(_:didReceiveLocalNotification:) o application:didReceiveRemoteNotification:, realice una verificación del cambio de estado mencionado anteriormente, y si el usuario ha desactivado las notificaciones, simplemente ignórelas.

Segundo método

Utilice unregisterForRemoteNotifications ()

Debe llamar a este método solo en circunstancias excepcionales, como cuando una nueva versión de la aplicación elimina la compatibilidad con todos los tipos de notificaciones remotas. Los usuarios pueden evitar temporalmente que las aplicaciones reciban notificaciones remotas a través de la sección Notificaciones de la aplicación Configuración. Las aplicaciones no registradas a través de este método siempre pueden volver a registrarse.

Tercer método

Cuando use notificaciones remotas , tendrá un código del lado del servidor que las enviará a APNS. En casos como este, cuando un usuario quiere detener las notificaciones, puede configurar un lado del servidor de banderas que le indique que ya no las envíe a APNS.

1
Community 20 jun. 2020 a las 09:12

Asegúrese de importar UIKit y UserNotifications El siguiente código está en 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)
        }
    }
}
1
Manish Manandhar 2 feb. 2017 a las 05:20