2015-11-13 25 views
6

Sto tentando di inviare una notifica locale all'ora pianificata. Ma le notifiche non vengono visualizzate sullo schermo, ma vengono visualizzate nel centro notifiche quando scorro verso il basso.

Questo è quello che sto cercando di raggiungere       Questo è quello che ottengo.
        iOS Swift Notifica locale non "spuntando"

Questo codice da didFinishLaunchingWithOptions di mio AppDelegate().

// Setup local push notifications 
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound], categories: nil)) 
    scheduleNotifications() 

E questo è il codice per scheduleNotifications()

func scheduleNotifications() { 
    // create a corresponding local notification 
    let notification = UILocalNotification() 

    // Get today's date, time and year 
    let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month, NSCalendarUnit.Year], fromDate: NSDate()) 
    // Sets the fire time to 2pm/1400 hours to anticipate user for lunch time 
    components.hour = 19 
    components.minute = 13 
    components.second = 00 

    notification.fireDate = components.date    // Sets the fire date 
    notification.alertBody = "Enjoyed your lunch? Don't forget to track your expenses!" 
    notification.alertAction = "Add expense" 
    notification.repeatInterval = NSCalendarUnit.Day // Repeats the notifications daily 

    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
} 

Qualsiasi aiuto sarebbe apprezzato. Grazie!

+0

In Impostazioni iOS> La tua app è impostata correttamente? In particolare, controlla le impostazioni per 'Mostra su Blocca schermo'. Inoltre, puoi pubblicare il carico utile che stai inviando con la notifica push. – JoGoFo

+0

Sì, è impostato per essere visualizzato sulla schermata di blocco. E cosa intendi per carico utile? Questo è tutto il codice che ho scritto per le notifiche. –

+0

Scusa, stavo pensando a una notifica push anziché a una notifica locale, che ha un payload. Stai pianificando abbastanza nel futuro in modo che la notifica venga ricevuta _dopo_ il dispositivo viene bloccato? – JoGoFo

risposta

4

Il problema è il modo in cui si converte l'oggetto NSDateComponents in un NSDate.

Basta chiamare components.date senza impostare un calendar per l'oggetto NSDateComponents restituirà nil.

Provare a utilizzare questo, invece:

notification.fireDate = calendar.dateFromComponents(components) 

In alternativa, è possibile impostare la proprietà calendar sui componenti oggetto:

components.calendar = calendar 

Perché si sta impostando la proprietà fireDate sull'oggetto notifica nil, sparerà immediatamente, cioè prima che tu abbia la possibilità di chiudere l'app e bloccare lo schermo. Questo comportamento è documentato in UILocalNotification class reference

0

Verificare Impostazioni> YourApp> Notifiche.

Verificare le autorizzazioni lì.

enter image description here

+0

Sì, è tutto attivato. Ma ancora non riesco a farlo mostrare però. Non viene visualizzato anche se il telefono è sbloccato. Ho provato a usare banner e avvisi. –

1

ottengo lo stesso comportamento strano. Ho appena creato un nuovo progetto per testare il tuo codice.

Quello che ho notato quando si cambia la fireDate a:

notification.fireDate = NSDate(timeIntervalSinceNow: 10)    

Otterrete il vostro comportamento desiderato.

Spero che questo aiuti un po '!

+0

L'ho appena provato e funziona! Ma quello che volevo fare era programmarlo in modo che potesse ripetersi ogni giorno nello stesso momento. Non sono sicuro del motivo per cui l'utilizzo di componenti del calendario non ha funzionato però. –