ios - pantalla - recuperar notificaciones iphone
Encuentra la lista de notificaciones locales que la aplicaciĆ³n ya ha establecido. (8)
Mi aplicación permite a los usuarios configurar una serie de recordatorios en el futuro. Cuando la aplicación aparezca, quiero saber qué recordatorios (notificaciones) ya se han establecido.
¿Puedo volver a leer las notificaciones que he configurado o debo almacenar en mi aplicación (por ejemplo, Core Data o Plist)?
@Scott Berrevoets dio la respuesta correcta. Para enumerarlos realmente, es sencillo enumerar los objetos en la matriz:
[[[UIApplication sharedApplication] scheduledLocalNotifications] enumerateObjectsUsingBlock:^(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
NSLog(@"Notification %lu: %@",(unsigned long)idx, notification);
}];
En iOS 10
, usando el nuevo framework UserNotifications
:
UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in
print("Requests: /(notificationRequest)")
}
En Swift, para ver todas las notificaciones locales programadas actualmente impresas en la consola:
print(UIApplication.sharedApplication().scheduledLocalNotifications)
Para Swift 3.0 y Swift 4.0
No olvides import UserNotifications
let center = UNUserNotificationCenter.current()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
center.getPendingNotificationRequests { (notifications) in
print("Count: /(notifications.count)")
for item in notifications {
print(item.content)
}
}
}
Scott tiene razón.
UIApplication
de UIApplication
scheduledLocalNotifications
Aquí está el código:
NSMutableArray *notifications = [[NSMutableArray alloc] init];
[notifications addObject:notification];
app.scheduledLocalNotifications = notifications;
//Equivalent: [app setScheduledLocalNotifications:notifications];
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];
if ([uid isEqualToString:uidtodelete])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
NSArray *arrayOfLocalNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications] ;
for (UILocalNotification *localNotification in arrayOfLocalNotifications) {
if ([localNotification.alertBody isEqualToString:savedTitle]) {
NSLog(@"the notification this is canceld is %@", localNotification.alertBody);
[[UIApplication sharedApplication] cancelLocalNotification:localNotification] ; // delete the notification from the system
}
}
Para obtener más información, echa un vistazo a esto: Ejemplo de programación de notificaciones locales UIA UIA aplicación
Swift 3.0.2:
UIApplication.shared.scheduledLocalNotifications
Swift 4
UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: { (requests) in
for request in requests {
if request.identifier == "IDENTIFIER YOU''RE CHECKING IF EXISTS" {
//Notification already exists. Do stuff.
} else if request === requests.last {
//All requests have already been checked and notification with identifier wasn''t found. Do stuff.
}
}
})
Utilicé esto para corregir un error donde la misma notificación semanal ya estaba configurada y se estaba configurando de nuevo cuando la aplicación se abriría, por lo que seguiría reiniciando el temporizador para que apareciera, lo que significa que nunca apareció.
UIApplication
tiene una propiedad llamada scheduledLocalNotifications
que puede usar.