如何在应用关闭时(不在后台)处理新的iOS10通知操作?
当应用程序最小化时,一切正常:
UNUserNotificationCenter.current().delegate = x
并在
中处理它class x: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Swift.Void) {
}
}
但是当关闭应用程序并且用户在通知中点击操作时,没有任何内容被调用...也许我无法处理后台任务而且我总是要启动应用程序?
答案 0 :(得分:2)
是的,它始终会启动应用,当用户在通知中点击操作时,按钮会启动您的应用。 来自apple doc的一些行:
点击按钮可启动您的应用(在前台或后台)并让您有机会执行指示的操作。您可以使用此类指定按钮中显示的文本以及应用执行相应操作所需的信息。
答案 1 :(得分:2)
通知操作按钮处理既可以在Extension
也可以在Containing 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)教程。
答案 2 :(得分:0)
“轻按一个按钮即可启动您的应用程序(在前台或后台),并为您提供机会...” 这些行显示在UIUserNotificationAction,的文档中,该文档已在iOS10中弃用。
原始问题涉及iOS 11中的UNUserNotificationCenterDelegate。 相关文档:Declaring Your Actionable Notification Types
从文档中引用:
当用户选择一个动作时,系统会在 后台并通知共享的UNUserNotificationCenter对象, 通知其委托人。使用您的委托对象的 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 确定所选动作并提供适当动作的方法 响应。