iOS10:从本地通知中点击操作不会将应用程序带到前台

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS10:从本地通知中点击操作不会将应用程序带到前台相关的知识,希望对你有一定的参考价值。

我正在尝试从通知中实施操作。到目前为止,我能够触发正确的委托功能,但点击后应用程序不会被带到前台。

相关代码:

@available(ios 10.0, *)
func registerCategory() -> Void{
    print("register category")
    let callNow = UNNotificationAction(identifier: "call", title: "Call now", options: [])
    let clear = UNNotificationAction(identifier: "clear", title: "Clear", options: [])
    let category : UNNotificationCategory = UNNotificationCategory.init(identifier: "IDENT123", actions: [callNow, clear], intentIdentifiers: [], options: [])

    let center = UNUserNotificationCenter.currentNotificationCenter()
    center.setNotificationCategories([category])
}

@available(iOS 10.0, *)
func scheduleNotification(event : String, interval: NSTimeInterval) {

    print("schedule ", event)

    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

    }
}

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {

    print("willPresent")
    completionHandler([.Badge, .Alert, .Sound])
}

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {

    let notification: UNNotification = response.notification
    let UUID = notification.request.content.userInfo["UUID"] as! String

    switch (response.actionIdentifier) {
    case "COMPLETE":

        UNUserNotificationCenter.currentNotificationCenter().removeDeliveredNotificationsWithIdentifiers([UUID])

    case "CALLIN":

        let call = Call()

        CalendarController.sharedInstance.fetchMeetingByUUID(UUID, completion: { (thisMeeting) -> Void in
            if(!CallIn.Yield(thisMeeting).ConferenceCallNumber.containsString("None")){
                call._call(thisMeeting)
            }else{
                //will open detail view, in case that no number were detected
                NSNotificationCenter.defaultCenter().postNotificationName("OpenDetailViewOfMeeting", object: self, userInfo: ["UUID":UUID])
            }
        })
        UNUserNotificationCenter.currentNotificationCenter().removeDeliveredNotificationsWithIdentifiers([UUID])
    default: // switch statements must be exhaustive - this condition should never be met
        log.error("Error: unexpected notification action identifier: (UUID)")
    }

    completionHandler()
}

我能够使用断点来执行委托函数didReceiveNotificationResponse(),它会执行我放在那里的一些操作,但不是以预期的方式(它必须启动设备调用,而只是解除通知列表,并且没有任何反应,但是当我再次手动打开应用程序时,呼叫就会开始,好像没有权限从通知中打开应用程序)。

答案

我自己找到了原因,所以这可能会对将来有所帮助。答案结果很简单。创建通知操作时,有以下参数:options。当您注册类别时,您需要将其设置为.oreground或.Destructive,如下所示:

func reisterCategory () {
    let callNow = UNNotificationAction(identifier: NotificationActions.callNow.rawValue, title: "Call now", options: UNNotificationActionOptions.Foreground)
    let clear = UNNotificationAction(identifier: NotificationActions.clear.rawValue, title: "Clear", options: UNNotificationActionOptions.Destructive)
    let category = UNNotificationCategory.init(identifier: "NOTIFICATION", actions: [callNow, clear], intentIdentifiers: [], options: [])
    let center = UNUserNotificationCenter.currentNotificationCenter()
    center.setNotificationCategories([category])
}

以上是关于iOS10:从本地通知中点击操作不会将应用程序带到前台的主要内容,如果未能解决你的问题,请参考以下文章

如果在 ios 中收到通知时从后台删除应用程序,didReceiveLocalNotification 不会触发

当应用程序在 iOS 10 的前台时,不会调用“willPresent 通知”并且本地通知不会显示

ios - 应用程序关闭时本地通知不更新徽章编号

本地通知在 iOS 10.2 中没有出现在前台

iOS 10 本地通知未显示

本地通知不会出现 - iOS