2016-01-12 11 views
11

Quindi ho un'app attualmente nell'app store che pianifica 10 notifiche in anticipo, supponendo che manchi una, avrai ancora una seconda possibilità o dieci. Ora, prima che tu pensi che infastidirò la persona, la notifica è molto importante per la funzionalità dell'app ed è davvero lo scopo principale. L'app è stata creata per iOS 7, quindi all'epoca non esisteva "handleActionWithIdentifier" che, a mio avviso, completa le azioni per l'app anche se è chiusa a seconda della risposta degli utenti alla notifica. Questo aggiornamento è stato molto utile per l'app in quanto elimina una parte del mio problema di dover aprire l'app per rispondere alla notifica (le notifiche fanno una domanda all'utente e, in base alla risposta, completano qualcosa).Pianificazione di una seconda notifica se prima viene ignorata in swift (o se si completa un'azione se la notifica viene ignorata)

Il problema che rimane è quello di rilevare se la notifica è stata persa, come farò apparire un'altra notifica, ad esempio il giorno successivo, se la notifica viene ignorata o ignorata. Ho cercato questo su google e stack overflow e dalla mia comprensione tutte le domande precedenti hanno chiesto come rilevare se mancava la notifica di apertura dell'app che non ho bisogno.

A questo punto, posso fare funzionare correttamente il codice, se l'utente risponde alla notifica premendo una delle opzioni relative alla notifica da questo:

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler:() -> Void) { 
     var userInfo = [NSObject: AnyObject]() 
     userInfo["text"] = responseInfo[UIUserNotificationActionResponseTypedTextKey] 
     NSNotificationCenter.defaultCenter().postNotificationName("text", object: nil, userInfo: userInfo) 

     print(userInfo) 

     completionHandler() 
    } 

che fin da oggi, sto solo prendendo in ingresso textfield e stampandolo ma potrei lanciare una seconda notifica se volessi. Esiste un metodo per rilevare quando viene mancata una notifica e pianificare un'altra notifica?

C'è sempre una possibilità che non è ancora possibile fare ciò che voglio e vorrei solo programmare 10 notifiche in anticipo che sembra sciatto e non mi permette di rendere la risposta come iterativa.

TLDR; Come faccio a rilevare ed eseguire il codice se una notifica locale è perso senza aprire l'applicazione

BTW: se avete risposte, Swift è la lingua preferita

+0

potresti dirci quale approccio (passaggi) hai intrapreso per risolvere questo problema? anche io ho affrontato questo problema. –

risposta

6

È possibile utilizzare una miscela di Background Fetch e Alcuni tipo di prova timestamp.

Per esempio:

Quando si pianifica una notifica è possibile mantenere una certa logica che avrebbe permesso di tenere traccia, se la notifica è stata ignorata o meno. Forse conservare alcuni dati nella holding NSUserDefaults che era l'ultima notifica inviata e quando deve essere avviata dagli O.S.

Un modo potrebbe essere quello di verificare la presenza di che timestamp:

Se si avvia il test dopo il momento in cui avrebbe dovuto lanciare (e forse un po 'in ritardo, solo nel caso in cui l'utente vede, ma non è ancora pronto a rispondere) e non si è ancora segnato come non ignorato, quindi l'utente può hanno ignorato o dimenticato la sua notifica.

Questo test deve poter essere utilizzato in AppDelegate.

Poi, abilitare Background Fetch capacità in modalità Sfondo.

questo vi darà un po 'di tempo di CPU per la vostra applicazione (quando iOS pensa sia un buon momento per che) e si può cogliere l'opportunità ;-).

Per essere in grado di fare questo è necessario aggiungere il corretto funzionamento nel vostro AppDelegate implementazione:

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
     // your code 
    } 

nel corpo di questa funzione, eseguire la vostra "test per la notifica ignorato" e programmare nuove notifiche se necessario.

Non dimenticare di chiamare completionHandler non appena hai finito il test!

+0

Penso che funzionerà, l'unico problema che ho è dire al dispositivo quando passare un "controllo". Come, ad esempio, chiederei al dispositivo di controllare la mancata notifica in 10 minuti circa. Sono un po 'confuso su quanto spesso o come controllare i feticci funziona. – TekShock

+0

benvenuto su iOS World! : D Spetta al sistema decidere, puoi solo dire quanto spesso ti piacerebbe farlo. Ma non c'è alcuna garanzia che farà un recupero in background in quel momento. Per quanto ne so, l'unica opzione sarebbe quella di fare affidamento su questo meccanismo, o farlo al contrario: programmare diverse notifiche e rimuovere quelle in sospeso se l'utente ha inserito la tua app. –

+0

Sì, penso che questa sia la mia unica opzione, quindi ho deciso di fare una combinazione di entrambi. Avevo programmato un paio di notifiche in anticipo e poi ho fatto un recupero per programmare di più se fossero mancate, quindi è diventato un po 'più affidabile. Grazie per la risposta! – TekShock

Problemi correlati