2015-11-13 16 views
6

Ich versuche eine lokale Benachrichtigung zum geplanten Zeitpunkt zu senden. Die Benachrichtigungen werden jedoch nicht auf dem Bildschirm angezeigt. Sie werden jedoch in der Benachrichtigungszentrale angezeigt, wenn ich nach unten wische.

Dies ist, was ich versuche zu erreichen       Dies ist, was ich bekomme.
        iOS Swift Lokale Benachrichtigung nicht "aufspringen"

Dieser Code ist von meiner AppDelegate des didFinishLaunchingWithOptions().

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

Und das ist der Code für 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) 
} 

Jede Hilfe würde geschätzt. Vielen Dank!

+0

In iOS-Einstellungen> Ihre App sind die Berechtigungen Einstellungen richtig? Überprüfen Sie insbesondere die Einstellung für "Auf Sperrbildschirm anzeigen". Können Sie auch die Payload posten, die Sie mit der Push-Benachrichtigung senden? – JoGoFo

+0

Ja, es wird auf dem Sperrbildschirm angezeigt. Und was meinst du mit Nutzlast? Das ist der Code, den ich für die Benachrichtigungen geschrieben habe. –

+0

Entschuldigung, dachte eher an eine Push-Benachrichtigung als an eine lokale Benachrichtigung, die eine Payload hat. Planen Sie weit genug in die Zukunft, damit die Benachrichtigung empfangen wird, nachdem Sie das Gerät gesperrt haben? – JoGoFo

Antwort

4

Ihr Problem ist die Art und Weise, wie Sie das NSDateComponents-Objekt in ein NSDate konvertieren.

Wenn Sie einfach components.date aufrufen, ohne calendar für das Objekt NSDateComponents festzulegen, wird zurückgegeben.

Versuchen Sie es mit dieser statt:

notification.fireDate = calendar.dateFromComponents(components) 

Alternativ können Sie die calendar Eigenschaft auf den Komponenten-Objekt festlegen können:

components.calendar = calendar 

Da Sie die Einstellung der fireDate Eigenschaft auf dem Benachrichtigungsobjekt zu nil, Es wird sofort ausgelöst, dh bevor Sie die App schließen und den Bildschirm sperren können. Dieses Verhalten ist dokumentiert in der UILocalNotification class reference

0

Überprüfen Sie Einstellungen> YourApp> Benachrichtigungen.

Überprüfen Sie die Berechtigungen dort.

enter image description here

+0

Ja, alles ist eingeschaltet. Kann es aber immer noch nicht zeigen. Es wird nicht angezeigt, selbst wenn das Telefon entsperrt ist. Versucht Banner und Warnungen zu verwenden. –

1

ich das gleiche seltsame Verhalten zu bekommen. Habe gerade ein neues Projekt erstellt, um deinen Code zu testen.

Was ich bemerkt, wenn Sie Ihre fireDate ändern:

notification.fireDate = NSDate(timeIntervalSinceNow: 10)    

Sie Ihr gewünschtes Verhalten bekommen.

Hoffe, dass hilft ein wenig!

+0

Ich habe das gerade ausprobiert und es funktioniert! Aber ich wollte es so planen, dass es jeden Tag zur selben Zeit wiederholt wird. Nicht sicher, warum die Verwendung von Kalenderkomponenten nicht funktioniert hat. –

Verwandte Themen