2012-12-08 5 views
22

Esperti, ho uno scenario in cui ho bisogno di informare l'utente tre volte al giorno (mattina, pomeriggio, sera). E i tempi per queste notifiche saranno diversi per ogni giorno, in base ai valori del database per ogni data.Come posso pianificare una notifica locale per il seguente scenario?

Queste tre notifiche sono configurabili. Significa che l'utente potrebbe semplicemente scegliere di impostare il pomeriggio e la sera mentre si spegne la notifica del mattino sotto le impostazioni.

Secondo la mia comprensione, posso ottenere ciò utilizzando le notifiche locali.

Posso fare quanto segue: - prima che l'applicazione si chiuda, all'interno di didFinishLaunchingWithOptions, posso controllare quale è la prossima notifica dovuta, è impostata (on/off). Se è impostato, lo programma. Se no, passo al prossimo tipo di notifica e faccio la stessa cosa. Se tutte le notifiche sono disattivate, ovviamente, nessuna notifica verrà programmata.

Ora, quando la notifica viene visualizzata, riesco a visualizzare l'avviso con due pulsanti "Chiudi" e "Visualizza". Se l'utente seleziona "Visualizza" La mia app è tornata attiva e prima che l'utente esca è programmata la prossima notifica.

Fin qui tutto bene.

Ora se l'utente sceglie di selezionare "Chiudi" Che cosa devo fare? Non avvierà la mia app e di conseguenza la prossima notifica non sarà programmata?

Come ottengo questo? C'è un modo migliore per farlo?

Help! Aiuto! Aiuto!

+0

Non sembra che ciò che si vuole fare sia molto fattibile o utilizzabile. Raccomando di riconsiderare le tue esigenze e cercare di affrontare il problema in un modo diverso. –

risposta

37

Si può semplicemente programmare tutte (o molte) notifiche contemporaneamente. Non è necessario attendere l'utente per Visualizza l'app per pianificare la prossima notifica.

Da the docs on UILocalNotification,

Un'applicazione può avere solo un numero limitato di linea notifiche; il sistema mantiene il più presto-firing 64 notifiche (con le notifiche riprogrammate automaticamente a contare come un unico notifica) e scarta il resto

Quindi, se si dispone di 3 notifiche al giorno, è possibile pre-programmare 3 settimane di notifiche contemporaneamente. Suppongo che avresti ancora un problema se l'utente non apre la tua app per un mese, ma devi preoccuparti di quello scenario?

In ogni caso, volevo solo assicurarmi che fosse chiaro che non è necessario pianificare queste notifiche una alla volta.

Esempio:

UILocalNotification* n1 = [[UILocalNotification alloc] init]; 
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60]; 
n1.alertBody = @"one"; 
UILocalNotification* n2 = [[UILocalNotification alloc] init]; 
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90]; 
n2.alertBody = @"two"; 
[[UIApplication sharedApplication] scheduleLocalNotification: n1]; 
[[UIApplication sharedApplication] scheduleLocalNotification: n2]; 

Quindi, anche se l'utente sceglie Chiudi quando appare la prima notifica, la seconda sarà ancora consegnati.

A proposito, il metodo didFinishLaunchingWithOptions viene chiamato subito dopo l'avvio dell'applicazione, non prima che si chiuda. Detto questo, puoi programmare nuove notifiche ogni volta che vuoi.

+0

Grazie Nate. Ci avevo pensato ma non ero sicuro se fosse la strada giusta. –

3

È anche possibile utilizzare la proprietà repeatInterval in modo da riprogrammare se stessi indefinitamente. Tuttavia, si è limitati alle unità in NSCalendarUnit. Vedere lo docs per ulteriori informazioni