Je suis à la planification de nouvelles notifications dans iOS10, comme ceci:
func scheduleNotification (event : Meeting, todaysBadgeCounter: Int) {
if #available(iOS 10.0, *) {
let minutesBefore = 10
//interval in seconds from current point in time to notification
let interval : NSTimeInterval = NSTimeInterval(secondsFromNowTo(event.startTime.dateByAddingTimeInterval(-minutesBefore * 60)))
//only schedule in the future
if(interval > 0){
let category = NotificationsController.notificationCategory
let center = NotificationsController.notificationCenter
center.setNotificationCategories([category])
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationStringForKey(event.title, arguments: nil)
if(minutesBefore <= 1){
content.body = NSString.localizedUserNotificationStringForKey("IOS10: Your \(event.title) is about to start", arguments: nil)
}else{
content.body = NSString.localizedUserNotificationStringForKey("IOS10: You have \(event.title) in \(Int(minutesBefore)) minutes", arguments: nil)
}
content.sound = UNNotificationSound.defaultSound()
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: interval, repeats: false)
let identifier = NSString.localizedUserNotificationStringForKey("sampleRequest\(event.UUID)", arguments: nil)
let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)
//setting the delegate
center.delegate = self
center.addNotificationRequest(request, withCompletionHandler: { (error) in
// handle the error if needed
log.error(error?.localizedDescription)
print("SCHEDULING >=iOS10:", event.title, ", interval:", interval)
})
}
//return category
@available(iOS 10.0, *)
class var notificationCategory : UNNotificationCategory {
struct Static {
static let callNow = UNNotificationAction(identifier: NotificationActions.callNow.rawValue, title: "Call now", options: [])
static let clear = UNNotificationAction(identifier: NotificationActions.clear.rawValue, title: "Clear", options: [])
static let category : UNNotificationCategory = UNNotificationCategory.init(identifier: "CALLINNOTIFICATION", actions: [callNow, clear], intentIdentifiers: [], options: [])
}
return Static.category
}
Je suis capable de programmer des notifications, et de recevoir des notifications locales au bon moment. MAIS: mon délégué méthodes que j'ai utilisé selon le tutoriel ne sont jamais exécutées, cependant la didReceiveLocalNotification est exécuté à chaque fois que je tape sur la notification:
extension NotificationsController: UNUserNotificationCenterDelegate {
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
print("IOS10 delivered")
// Response has actionIdentifier, userText, Notification (which has Request, which has Trigger and Content)
switch response.actionIdentifier {
case NotificationActions.NotifyBefore.rawValue:
print("notify")
break
case NotificationActions.callNow.rawValue:
print("callNow")
break
case NotificationActions.clear.rawValue:
print("clear")
default: break
}
}
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
// Delivers a notification to an app running in the foreground.
print("IOS10 delivered 2222")
}
}
N'était pas didReceiveLocalNotification obsolète? Comment faire de ces méthodes à appeler?
Mise à JOUR:
J'ai mis à jour mon code avec quelques suggestions à partir d'ici, à savoir:
- J'ai ajouté l'attribution de la UNUserNotificationCenter.délégué à la applicationDidFinishLaunchingWithoptions.
- J'ai aussi essayé de déplacer ces méthodes (délégué méthodes) de l'extension de la NotificationsController.swift classe, et la définition de cette classe comme UNUserNotificationCenterDelegate. Ne fonctionne pas pour moi non plus.