la aplicación de iOS: cómo borrar las notificaciones?

Tengo una aplicación de iOS, donde algunos de Notificación de Inserción son enviados. Mi problema es, que los mensajes de notificaciones se queda en el Centro de Notificaciones en iOS después de, a continuación, están intervenidos. ¿Cómo puedo eliminar una notificación para mi aplicación en el Centro de Notificaciones próxima vez que la aplicación se abre?

Me llegó a través de mensajes donde la gente está llamando a setApplicationIconBadgeNumber a un valor cero para desactivar las notificaciones. Eso parece muy extraño para mí, así que creo que tal vez en otra solución existe?

EDIT1:

Estoy teniendo algunos problemas de compensación de las notificaciones. Por favor, ver mi código aquí:

- (void) clearNotifications {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);

            [self clearNotifications];
        }
    }

    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{    
    NSLog(@"Received notification: %@", userInfo);
    [self clearNotifications];
}

Estoy ejecutando la Aplicación a través de Xcode. Cuando la Aplicación se minimiza y me pongo a la Aplicación a través de la notificación en el Centro de Notificaciones, puedo ver en el registro, que el didReceiveRemoteNotification se llama y el uso de puntos de interrupción puedo ver, que el clearNotifications ha ejecutado. Pero todavía la notificación se cuelga en el Centro de Notificaciones. Por qué?

InformationsquelleAutor dhrm | 2011-12-30

12 Kommentare

  1. 156

    Más probable debido a que el Centro de Notificaciones es una característica relativamente nueva, Apple no necesariamente quiere empujar un nuevo paradigma para la limpieza de las notificaciones. En lugar de eso, ellos multi-función [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; para borrar dijo notificaciones. Podría parecer un poco extraño, y Apple podría proporcionar una manera más intuitiva para hacer esto en el futuro, pero por el momento es la manera oficial.

    A mí mismo, yo uso este fragmento de código:

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    que nunca falla para borrar todas las app de notificaciones desde el Centro de Notificaciones.

  2. 119

    Sólo para ampliar pcperini la respuesta. Como menciona usted tendrá que añadir el siguiente código a su application:didFinishLaunchingWithOptions: método;

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    Que También necesidad de incrementar, a continuación, disminuir la insignia en su application:didReceiveRemoteNotification: método si usted está tratando de borrar el mensaje desde el centro de mensajes, de modo que cuando un usuario introduce aplicación de pulsar una notificación del centro de mensajes, también clara, es decir;

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    • Creo que cancelAllLocalNotifications no es necesario.Trabajó para mí, sin que la línea de
    • tendría que dependen de usted el uso de local notificaciones o no…?
    • ACTUALIZACIÓN:: «cancelAllLocalNotifications’ está en desuso: la primera en desuso en iOS 10.0» Así que si tu versión de la aplicación es mayor que iOS10.0, entonces usted debe utilizar este UNUserNotificationCenter *centro = [UNUserNotificationCenter currentNotificationCenter]; [center removeAllDeliveredNotifications]; [center removeAllPendingNotificationRequests];
  3. 20

    También podría tener sentido para agregar una llamada a clearNotifications en applicationDidBecomeActive por lo que en caso de que la aplicación está en el fondo y vuelve también borrar las notificaciones.

    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        [self clearNotifications];
    }
  4. 15

    Actualización para iOS 10 (Swift 3)

    Con el fin de borrar todos los locales de notificaciones en iOS 10 aplicaciones, se debe usar el siguiente código:

    import UserNotifications
    
    ...
    
    if #available(iOS 10.0, *) {
        let center = UNUserNotificationCenter.current()
        center.removeAllPendingNotificationRequests() //To remove all pending notifications which are not delivered yet but scheduled.
        center.removeAllDeliveredNotifications() //To remove all delivered notifications
    } else {
        UIApplication.shared.cancelAllLocalNotifications()
    }

    Este código se encarga de la limpieza de locales de notificaciones para iOS 10.x y todas las versiones anteriores de iOS. Usted tendrá que import UserNotifications para el iOS 10.x código.

  5. 9

    Si usted tiene pendiente programado notificaciones locales y no desea utilizar cancelAllLocalNotifications para borrar los viejos en el Centro de Notificaciones, también puede hacer lo siguiente:

    [UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

    Parece que si se establece la scheduledLocalNotifications borra los antiguos en el Centro de Notificaciones, y a sí mismo, se conserva la pendiente de las notificaciones locales.

    • Esto funciona como un encanto para mí en iOS 9. Yo no quiero cancelar todas mis notificaciones porque se repiten en el tiempo (diario o semanal). Y de esta manera puedo borrar todas las cosas sin la eliminación de ellos.
    • La mejor solución que he visto hasta ahora. Alguien sabe si funciona en iOS 8?
    • la última vez que he probado en iOS 8 que estaba trabajando.
    • Donde dentro de la aplicación se podría llamar a esto?
    • Alex, usted debe llamar cada vez que usted necesita para borrar las notificaciones en el Centro de Notificaciones. Yo lo llamo tanto mi AppDelegate del applicationDidBecomeActive: y application:didReceiveLocalNotification: métodos.
    • Usted no puede llamar a este método inmediatamente después de recibir la notificación local ya que recibirá a decenas de cientos de notificación. Quizás en la misma notificación se aplican de nuevo, y ahora es el momento para disparar, por lo que mantener el fuego, aplicar de nuevo, el fuego, aplicar….
    • He estado usando este sin ningún problema por un tiempo y ahora sólo trató el caso de uso, y fue incapaz de reproducirse. Yo estaría muy interesado si usted tiene un proyecto de ejemplo que puede reproducir este.
    • Muy bonito! Pero es que esta funcionalidad documentada o ‘sólo’ un efecto secundario de la implementación actual, que puede cambiar en cualquier menor/mayor actualización de iOS?
    • Que yo sepa esto no está documentado y se puede cambiar en una actualización de iOS. Sin embargo, también como lo que yo sé no hay forma oficial de hacerlo. Si usted mira las otras respuestas todos ellos son sólo «hacks» para borrar rancio de notificaciones desde el centro de notificaciones. Por ejemplo, las principales respuestas tienen que limpiar la placa y terminar todos los pendientes de las notificaciones locales. Ni tiene nada que ver con la limpieza de edad/rancio notificaciones desde el centro de notificaciones. Esta respuesta particular solucionado el problema y me permitió mantener pendiente/notificaciones programadas.

  6. 3

    Si vas a venir aquí preguntándome lo contrario (como era mi caso), este post puede ser para usted.

    Yo no podía entender por qué mi notificaciones fueron de compensación cuando me abrió la insignia…yo manualmente incremento de la insignia y, a continuación, quiero aclarar que cuando el usuario entra en la aplicación. Eso no es motivo para borrar el centro de notificaciones, aunque, todavía puede que desee ver o actuar sobre esas notificaciones.

    Negativo 1 hace el truco, por suerte:

    [UIApplication sharedApplication].applicationIconBadgeNumber = -1;
    • Hace el trabajo para usted en iOS9? Yo no he notado ninguna diferencia con la configuración de una tarjeta de identificación a 0 o -1. Todavía borra todas remoto notificaciones en mi caso.
    • Ya, de hecho, empecé a notar que con mi aplicación de nuevo, no tengo idea de lo que ha cambiado.
    • Estoy dando desde que Apple, de alguna manera, se decidió que la aplicación sin número de placa no debería tener ningún tipo de notificación
  7. 2

    En Swift estoy usando el siguiente código dentro de mi AppDelegate:

    func applicationDidBecomeActive(application: UIApplication) {
        application.applicationIconBadgeNumber = 0
        application.cancelAllLocalNotifications()
    }
  8. 1

    Tal vez en el caso de que hay programados alarmas y liquidación de icono de la aplicación de las insignias.

    NSArray *scheduledLocalNotifications = [application scheduledLocalNotifications];
    NSInteger applicationIconBadgeNumber = [application applicationIconBadgeNumber];
    
    [application cancelAllLocalNotifications];
    [application setApplicationIconBadgeNumber:0];
    
    for (UILocalNotification* scheduledLocalNotification in scheduledLocalNotifications) {
        [application scheduleLocalNotification:scheduledLocalNotification];
    }
    [application setApplicationIconBadgeNumber:applicationIconBadgeNumber];
  9. 0

    Cuando tienes notificaciones repetidas en el futuro, usted no desea cancelar las notificaciones, puede borrar el elemento en el centro de notificaciones por:

    func clearNotificationCenter() {
        UIApplication.sharedApplication().applicationIconBadgeNumber = 1
        UIApplication.sharedApplication().applicationIconBadgeNumber = 0
    }

    Que no se puede borrar la notificación cuando la aplicación está abierta en primer plano llamando al método a continuación inmediatamente después de recibir la notificación local, de lo contrario recibirá a decenas de cientos de notificaciones. Tal vez porque la misma notificación se aplican de nuevo, y ahora es el momento para disparar, por lo que mantener el fuego, aplicar de nuevo, el fuego, aplicar….:

    [UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
  10. 0

    Cuando sale de su aplicación, en ese momento usted tiene que utilizar una debajo de la línea de código en el botón de cerrar sesión haga clic en el método.

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    y este funciona perfectamente en mi aplicación.

  11. 0

    Que usted necesita para añadir a continuación el código en el AppDelegate applicationDidBecomeActive método.

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
  12. -1

    Consiguió aquí. Funciona en iOS 9

    UIApplication *app = [UIApplication sharedApplication];
    NSArray *eventArray = [app scheduledLocalNotifications];
    for (int i=0; i<[eventArray count]; i++)
    {
        UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
        //Cancelling local notification
        [app cancelLocalNotification:oneEvent];
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea