UNUserNotificationCenter did receive response with completion handler is never called iOS10, swift 2.3 UNUserNotificationCenter did receive response with completion handler is never called iOS10, swift 2.3 xcode xcode

UNUserNotificationCenter did receive response with completion handler is never called iOS10, swift 2.3


Request identifier is not the notification category.

Just add this line:

content.categoryIdentifier = identifier

Update:Just made a simple app. Everything seems to working fine:

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    UNUserNotificationCenter.current().delegate = self    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in        if granted {            self.registerCategory()            self.scheduleNotification(event: "test", interval: 3)            self.scheduleNotification(event: "test2", interval: 5)        }    }    return true}func registerCategory() -> Void{    let callNow = UNNotificationAction(identifier: "call", title: "Call now", options: [])    let clear = UNNotificationAction(identifier: "clear", title: "Clear", options: [])    let category : UNNotificationCategory = UNNotificationCategory.init(identifier: "CALLINNOTIFICATION", actions: [callNow, clear], intentIdentifiers: [], options: [])    let center = UNUserNotificationCenter.current()    center.setNotificationCategories([category])}func scheduleNotification (event : String, interval: TimeInterval) {    let content = UNMutableNotificationContent()    content.title = event    content.body = "body"    content.categoryIdentifier = "CALLINNOTIFICATION"    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: interval, repeats: false)    let identifier = "id_"+event    let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)    let center = UNUserNotificationCenter.current()        center.add(request, withCompletionHandler: { (error) in    })}func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {    print("didReceive")    completionHandler()}func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {    print("willPresent")    completionHandler([.badge, .alert, .sound])}}

Update 2: Rewritten in Swift 2.3

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {var window: UIWindow?func applicationDidFinishLaunching(application: UIApplication) {    UNUserNotificationCenter.currentNotificationCenter().delegate = self    UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert]) { (granted, error) in        if granted {            self.registerCategory()            self.scheduleNotification("test", interval: 3)            self.scheduleNotification("test2", interval: 5)        }    }}func registerCategory() -> Void{    let callNow = UNNotificationAction(identifier: "call", title: "Call now", options: [])    let clear = UNNotificationAction(identifier: "clear", title: "Clear", options: [])    let category : UNNotificationCategory = UNNotificationCategory.init(identifier: "CALLINNOTIFICATION", actions: [callNow, clear], intentIdentifiers: [], options: [])    let center = UNUserNotificationCenter.currentNotificationCenter()    center.setNotificationCategories([category])}func scheduleNotification(event : String, interval: NSTimeInterval) {    let content = UNMutableNotificationContent()    content.title = event    content.body = "body"    content.categoryIdentifier = "CALLINNOTIFICATION"    let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: interval, repeats: false)    let identifier = "id_"+event    let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)    let center = UNUserNotificationCenter.currentNotificationCenter()    center.addNotificationRequest(request) { (error) in    }}func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {    print("willPresent")    completionHandler([.Badge, .Alert, .Sound])}func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {    print("didReceive")    completionHandler()}}


Use belwo delegate method for Swift 2.3:

func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void)


Make sure your AppDelegate implementing UNUserNotificationCenterDelegate protocol.

For Swift

let center = UNUserNotificationCenter.current()center.delegate = self

For Objective-c

//set delegate to self[[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];

Assigning delegate to self will trigger following methods.

// App in foreground    private func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {      print("willPresent")      }//On Action click     private func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {      print("didReceive")      }