6

关闭应用程序(不在后台)时如何处理新的 iOS10 通知操作?

当应用程序最小化时,一切正常:

UNUserNotificationCenter.current().delegate = x

并处理它

class x: UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Swift.Void) {
    }
}

但是当应用程序关闭并且用户在通知中点击操作时不会调用任何内容......也许我无法处理后台任务并且我总是必须启动应用程序?

4

3 回答 3

4

通知操作按钮处理可以ExtensionContaining App.

轻按操作按钮时,手柄首先转到 ,Extension然后根据Containing App需要转到 。如果Extension不处理通知动作,则将句柄传递给containing app.

点击按钮会启动您的应用程序(在前台或后台),并让您有机会执行指定的操作。

扩展处理:

func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void)
{
     //You need to handle all the actions that appear with notification..
     completion(.dismissAndForwardAction)
}

完成闭包采用 UNNotificationContentExtensionResponseOption 类型的值:

enum UNNotificationContentExtensionResponseOption : UInt
{
    case doNotDismiss //the custom UI is not dismissed after handling the action
    case dismiss //the custom UI is dismissed after handling the action
    case dismissAndForwardAction //the custom UI is dismissed after handling the action and the control is then passed to containing app for any additional handling
}

包含应用程序中的处理:

extension AppDelegate : UNUserNotificationCenterDelegate
{
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
    {
        // Action handling - handling for all actions is not required
        completionHandler()
    }
}

有关更多信息,您可以参考此(https://github.com/pgpt10/RichNotificationSample)教程。

于 2017-02-21T10:13:41.037 回答
2

是的,它总是启动应用程序,当用户在通知中点击操作时,按钮会启动您的应用程序。来自苹果文档的一些行:

点击按钮会启动您的应用程序(在前台或后台),并让您有机会执行指定的操作。您可以使用此类指定按钮中显示的文本以及您的应用执行相应操作所需的信息。

于 2016-09-23T14:04:20.260 回答
1

“点击一个按钮会启动你的应用程序(无论是在前台还是在后台)并给你一个机会......”这些行出现在 UIUserNotificationAction 的文档中它在 iOS10 中已被弃用。

原始问题是指 iOS 11 中的 UNUserNotificationCenterDelegate。相关文档:Declaring Your Actionable Notification Types

从文档中引用:

当用户选择一个动作时,系统会在后台启动您的应用程序并通知共享的 UNUserNotificationCenter 对象,该对象会通知其委托。使用委托对象的 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 方法来识别所选操作并提供适当的响应。

于 2018-06-21T09:44:35.783 回答