ver recuperar pantalla notificaciones historial funciona como centro borradas bloqueada ios uilocalnotification

ios - recuperar - La aplicación perdió el control sobre las notificaciones locales después de haber sido actualizada desde App Store



recuperar notificaciones iphone (4)

Tengo una aplicación con notificación local en la App Store.

En las últimas 4 versiones de actualizaciones de mi aplicación, hubo clientes que experimentaron algo extraño: la aplicación perdió el control sobre las notificaciones previas, siguieron recibiendo todas las notificaciones programadas antes de la actualización, aunque deberían haber sido canceladas por [[UIApplication sharedApplication] cancelAllLocalNotifications] !

Mientras me comunicaba con estos clientes, les dije que desactivaran los avisos, algo que realiza cancelAllLocalNotifications , pero dicen que siguen recibiendo avisos.

Además, la reinstalación de la aplicación no elimina las notificaciones anteriores. Es como si iOS pensara que esta es una aplicación diferente.

No le sucede a la mayoría de mis clientes, solo a algunos pocos, pero aún así, ¡ocurre cada actualización!

¿Cómo puede ser?

Actualizar

3 años después y sigue sucediendo.

Cada actualización, algunos clientes siguen recibiendo notificaciones locales, pero la aplicación no puede verlas ni puede controlarlas.

¿Alguien puede resolver esto o probar que es un error de iOS?


¿ Comprobó cómo funciona UIApplication cancelAllLocalNotifications entre las actualizaciones de la aplicación? No tiene respuestas definitivas, pero tal vez sería útil.

Trate de averiguar qué tiene de especial el cliente que experimenta esto:

  • ¿Son siempre los mismos clientes que experimentan este comportamiento?
  • ¿Qué versión de iOS usan?
  • ¿Cómo están usando tu aplicación de manera diferente? ¿Tienes mucha notificación programada?
  • ¿Cómo están haciendo la actualización? (por aire, sincronización, etc.)

Agregue el siguiente código a su aplicación: método didFinishLaunchingWithOptions: para borrar toda la notificación.

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

Una vez hecho esto puedes agregar las nuevas notificaciones.


Oye, eso es lo que también está pasando con mi aplicación. Mis notificaciones locales se están disparando en los siguientes escenarios:
1. usuario ha eliminado la aplicación

  1. Usando la misma aplicación en el mismo dispositivo pero con un nombre de usuario diferente, reciben alertas para el último usuario que inició sesión.

-Actualmente su comportamiento UILocalNotification , tenemos que cancelarlos; de lo contrario, IOS los conservará durante al menos un tiempo (sin saber cuánto tiempo) cuando la aplicación se elimina y la aplicación los programó en el momento de la eliminación y no se cancelaron.

Así que siempre asegúrese de que, cuando se realice la instalación de su aplicación, mantenga un control y cancele todas las notificaciones programadas.

me gusta

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions if(//its a fresh install){ [[UIApplication sharedApplication] cancelAllLocalNotifications]; } }

cancelAllLocalNotifications cancelará todas las notificaciones existentes.

Espero que ayude.


Tuve problemas similares con las notificaciones. Mi solución para eliminar realmente fue establecer una fecha específica y notificar solo una vez. La línea applicationIconBadgeNumber = 0 elimina la notificación de la lista de notificaciones. El número de credencial solo se establece cuando el usuario ingresa a la aplicación. En el caso de que el usuario aún no haya visto el mensaje, solo puede agregar una verificación en applicationWillEnterForeground y mostrar un UIAlertView adecuado con el mismo mensaje que la notificación, y puede obtener la última notificación de manera similar utilizando notificationArray. Cuando necesite configurar una nueva notificación, "isNotified" necesita setValue: @ "0" y sincronizarse. Cuando uso múltiples notificaciones, guardo estados como este:

[userDefaults setValue:@"1" forKey:[NSString stringWithFormat:@"notification-%@", @"12"]]; NSInteger number = [[userDefaults objectForKey:[NSString stringWithFormat:@"notification-%@", @"12"]] integerValue];

En MainViewController.m

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSInteger alreadyNotified = [[userDefaults objectForKey:@"isNotified"] integerValue]; if (alreadyNotified == 0) { NSInteger seconds = 60; NSString *message = @"Just testing!"; UILocalNotification *notification = [[UILocalNotification alloc] init]; UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings]; BOOL allowNotif = (currentSettings.types != UIUserNotificationTypeNone); BOOL allowsSound = (currentSettings.types & UIUserNotificationTypeSound) != 0; BOOL allowsBadge = (currentSettings.types & UIUserNotificationTypeBadge) != 0; BOOL allowsAlert = (currentSettings.types & UIUserNotificationTypeAlert) != 0; if (notification) { if (allowNotif) { NSDate *now = [NSDate date]; if (seconds > 0) { now = [now dateByAddingTimeInterval:seconds]; } notification.fireDate = now; notification.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; notification.repeatInterval = 0; NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"id", message, @"message", nil]; notification.userInfo = userInfo; } if (allowsAlert) { notification.alertBody = message; } if (allowsBadge) { notification.applicationIconBadgeNumber = 1; } if (allowsSound) { notification.soundName = UILocalNotificationDefaultSoundName; } [[UIApplication sharedApplication] scheduleLocalNotification:notification]; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setValue:@"1" forKey:@"isNotified"]; [userDefaults synchronize]; } } else { UIApplication *app = [UIApplication sharedApplication]; NSArray *notificationArray = [app scheduledLocalNotifications]; for (int i=0; i<[notificationArray count]; i++) { UILocalNotification *notification = [notificationArray objectAtIndex:i]; [app cancelLocalNotification:notification]; } }

En AppDelegate.m

- (void)applicationWillEnterForeground:(UIApplication *)application { application.applicationIconBadgeNumber = 0; }