本地通知不显示自定义操作按钮

Local notification does not show custom action button

为了测试本地通知,我编写了一个带有单个视图控制器的测试应用程序。
viewDidLoad 中,我设置了自定义操作、通知类别和 userNotificationCenter 委托。
viewDidAppear 中,我设置了通知内容,设置了一个 5 秒后触发的触发器,创建了通知请求,并将其添加到通知中心。

我希望得到以下结果:

前台模式:
当应用程序启动时,它应该在 5 秒后在前台显示通知。之前,应该调用委托函数“willPresent notification”。

后台模式:
但是,如果在触发器触发之前通过按下主页按钮将应用程序置于后台,则通知应显示在主屏幕中,并且不会调用委托函数“willPresent notification”。
显示通知后,用户可以点击操作按钮。
这应该将应用程序置于前台,并触发“didReceive 响应”委托函数。

发生的事情是:
操作按钮从未显示,只有标题和body。
当我点击 body 时,使用默认操作标识符触发委托函数“didReceive 响应”。

问题:
为什么未显示自定义操作按钮?

这是我的代码:

import UIKit
import UserNotifications

class ViewController: UIViewController, UNUserNotificationCenterDelegate {

    let userNotificationCenter = UNUserNotificationCenter.current()
    let categotyId = "categoryID"
    let actionID = "actionID"

    override func viewDidLoad() {
        super.viewDidLoad()

        userNotificationCenter.requestAuthorization(options: [.alert]) { (granted, error) in
            if granted {
                let okAction = UNNotificationAction(identifier: self.actionID, 
                                                    title: "OK", 
                                                    options: [])
                let category = UNNotificationCategory(identifier: self.categotyId,
                                                              actions: [okAction],
                                                              intentIdentifiers: [], 
                                                              options: [.customDismissAction])
                self.userNotificationCenter.setNotificationCategories([category])
                self.userNotificationCenter.delegate = self
            } else {
                print("local notifications not granted")
            }
        }
        userNotificationCenter.removeAllPendingNotificationRequests()
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let content = UNMutableNotificationContent()
        content.title = NSString.localizedUserNotificationString(forKey: "Title", arguments: nil)
        content.body = NSString.localizedUserNotificationString(forKey: "Body", arguments: nil)
        content.categoryIdentifier = categotyId

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: (5), repeats: false)
        let request = UNNotificationRequest.init(identifier: "requestID", 
                                                 content: content, 
                                                 trigger: trigger)

        userNotificationCenter.add(request, withCompletionHandler: { (error) in
            if let error = error {
                print("Could not add notification request. Error: \(error)")
            }
        })
    }

    // MARK: - Notification Delegate

    // Will be called while app is in the foreground 
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification, 
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // Show alert to the user
        print("App in foreground. Show alert.")
        completionHandler([.alert])
    }

    // Should be called after the user tapped the action button
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        let request = response.notification.request
        let requestID = request.identifier

        switch response.actionIdentifier {
        case actionID:
            print("Custom OK action triggered in background")
        case UNNotificationDefaultActionIdentifier:
            print("Default action triggered in background")
        default:
            print("Unknown action triggered in background, action identifier: \(response.actionIdentifier)")
        }
        UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [requestID])

        completionHandler()
    }
}

抱歉我的问题,但也许其他人body有同样的问题:
我根本不知道,首先,只显示title/body:

但是,我没有注意到 body 下面的细灰色条。如果下拉此栏,则会出现自定义操作按钮:

更新:从 iOS 10 beta 2 开始,丰富的通知也可在 pre-3D 触摸设备上使用。下拉常规通知即可查看。

确保您在 iPhone6s/iPhone6s 加上 simulator/device 上进行测试,它似乎不适用于 pre-3D 触摸设备。

在 iPhone6 模拟器上,尝试单击并向下拖动您收到的股票通知,您应该会看到您的自定义 UI 出现。