Trovare l’elenco dei Locali di Notifica l’app ha già impostato

Mia app permette agli utenti di impostare un numero di promemoria in futuro. Quando l’applicazione si inaugura voglio sapere cosa promemoria (notifiche) sono già stati impostati.

Posso leggere le notifiche ho impostato o devo memorizzare nella mia app (ad esempio di Dati di base o Plist)?

  • C’è un modo per trovare la prossima notifiche? includere (che è quella che l’intervallo di ripetizione)

 

8 Replies
  1. 42

    UIApplication ha una proprietà chiamata scheduledLocalNotifications che è possibile utilizzare.

    • Ehi scott Berrevoests, si Prega di aiutarmi. Io non sono di ottenere il mio allarme dal secondo tempo, ma è già in sospeso elenco allarmi. stackoverflow.com/questions/44132879/…
    • Il metodo che viene eseguito quando l’app è in background e riceve UNUserNotification?
    • Solo una nota che scheduledLocalNotifications è deprecato
    • c’è un nuovo modo di fare questo? Ho difficoltà a trovare uno.
    • Mi piacerebbe usare il Frizzo di risposta per il modo migliore di fare questo – stackoverflow.com/a/39034576/810167
  2. 24

    Per Swift 3.0 e Swift 4.0

    non dimenticate di fare import UserNotifications

    Questo è il lavoro per iOS10+ e watchOS3+, in quanto la classe UNUserNotificationCenter non è disponibile per le versioni precedenti (link)

    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)
            }
        }
    }
    • Il metodo che viene eseguito quando l’app è in background e riceve UNUserNotification?
  3. 21

    Scott è corretto.

    UIApplicationdi proprietà di scheduledLocalNotifications

    Ecco il codice:

    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
    
        }
    
    }

    Per ulteriori informazioni, check out questo: scheduledLocalNotifications esempio UIApplication ios

    • Grazie questo anche aiutare con la mia prossima domanda per quanto riguarda la memorizzazione di un ID per ogni notifica – tutto fatto ora…
    • Questo è uno strano codice di esempio. L’OP chiede la quotazione delle notifiche locali e si sta mostrando un esempio di come annullare le notifiche locali
  4. 6

    @Scott Berrevoets ha dato la risposta corretta. Effettivamente li elenco, è semplice enumerare gli oggetti dell’array:

    [[[UIApplication sharedApplication] scheduledLocalNotifications] enumerateObjectsUsingBlock:^(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
        NSLog(@"Notification %lu: %@",(unsigned long)idx, notification);
    }];
  5. 2

    In iOS 10, utilizzando il nuovo UserNotifications quadro:

    UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in
    
            print("Requests: \(notificationRequest)")
    }
    • Il metodo che viene eseguito quando l’app è in background e riceve UNUserNotification?
  6. 2

    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.
    
            }
        }
    })

    Ho usato questo per la correzione di un bug per il quale lo stesso settimanale di notifica è stato già impostato e sta per essere impostato di nuovo quando l’app si aprono, quindi vorrei mantenere azzerare il timer di apparire, il che significa che non lo ha mai fatto apparire.

    • Se io uso questo all’inizio per verificare se ci sono le notifiche a tutti, non passare attraverso il loop a tutti.
    • Il metodo che viene eseguito quando l’app è in background e riceve UNUserNotification?
  7. 1

    In Swift, per vedere tutti i tuoi attualmente pianificata notifiche locali visualizzato nella console:

    print(UIApplication.sharedApplication().scheduledLocalNotifications)

Lascia un commento