2017-06-19 3 views
0

Ich schreibe eine Anwendung und möchte lokale Benachrichtigungen einschließen. Ich möchte, dass die Benachrichtigung zu einem festgelegten Zeitpunkt übermittelt wird und jeden Tag wiederholt wird.Lokale Benachrichtigungen liefern mehrere Male statt nur einer

Ich programmierte dies in meiner Anwendung, und es benachrichtigt den Benutzer. Anstatt dass der Benutzer jedoch jeden Tag einmal zur festgelegten Zeit benachrichtigt wird, sendet die Anwendung dem Benutzer 13+ Benachrichtigungen zu dieser festgelegten Zeit. Die Anzahl der Benachrichtigungen erhöht sich nur jeden Tag.

Wie behebe ich dieses Problem? Ich möchte nur, dass die Benachrichtigung den Benutzer nur einmal täglich benachrichtigt.

Hier ist mein Code, den ich verwendet habe. Es wird in Did Finish Launching mit Optionen des App-Delegaten festgelegt.

let notificationSettings = UIUserNotificationSettings(forTypes: [.Badge, .Alert, .Sound], categories: nil) 
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings) 

let title: String = "Read Today's Pulse Habit!" 

let calendar = NSCalendar.currentCalendar() 
let calendarComponents = NSDateComponents() 
calendarComponents.hour = 15 
calendarComponents.minute = 30 
calendarComponents.second = 0 
calendar.timeZone = NSTimeZone.defaultTimeZone() 
let dateToFire = calendar.dateFromComponents(calendarComponents) 

let notification = UILocalNotification() 

notification.alertBody = "\(title)" 
notification.alertAction = "Read Now" 
notification.fireDate = dateToFire 
notification.alertTitle = "PULSE" 
notification.repeatInterval = NSCalendarUnit.Day 
notification.soundName = UILocalNotificationDefaultSoundName 
notification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1 

UIApplication.sharedApplication().scheduleLocalNotification(notification) 

Ich habe sogar versucht, die Zeile herauszunehmen, die die inkrementierende Symbolabdrucknummer enthält, und das machte keinen Unterschied.

+0

Wo setzen Sie diese Implementierung? App-Delegat hat keine verknüpfte Ansicht und daher auch keine viewDidLoad-Methode. –

+0

Hoppla! Ich meinte, dass ich mit Optionen im App-Delegierten beenden starte. – Lindsay

Antwort

2

Ich schätze, Sie planen jedes Mal eine neue Benachrichtigung, wenn Sie Ihre App starten. Sie sollten Ihre eigene Logik in der App implementieren, die die Terminierung abbricht und/oder verhindert, wenn eine Bedingung erfüllt ist.

Haben Sie die official docs über die Planung und Verarbeitung lokaler Benachrichtigungen gelesen?

EDIT

einen Weg gefunden, damit Sie alle Ihre derzeit geplanten Meldungen an die Konsole (Swift 3) drucken:

let center = UNUserNotificationCenter.current() 

center.getPendingNotificationRequests { (notifications) in 
    print("Count: \(notifications.count)") 
    for item in notifications { 
     print(item.content) 
    } 
} 

Gehen Sie voran und es in Ihrem didFinishLaunching Methode einfügen und sehen, was Ergebnisse erhalten Sie.

+0

Wird verhindert, dass die Benachrichtigungen mehr als 1 pro Tag liefern? – Lindsay

+0

@Lindsay Nein, dies hilft Ihnen nur beim Debuggen/Prüfen, wie viele lokale Benachrichtigungen derzeit von Ihrer App geplant werden. Eine Möglichkeit, mehrere geplante Benachrichtigungen zu verhindern, besteht darin, der Benachrichtigung eine ID hinzuzufügen und diese ID beim nächsten Mal zu überprüfen, wenn Ihre App eine Benachrichtigung planen möchte. Wenn es bereits existiert, planen Sie kein neues ein. –

+0

Oh okay. Vielen Dank. Ich bin neu in Xcode und schnelle Programmierung. Wie würde ich eine ID für die Benachrichtigung erstellen und überprüfen? – Lindsay

Verwandte Themen