以下是我的情况:
如果应用程序在后台运行,我在FirstViewController.swift文件中使用此功能:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
如果应用在后台运行,则效果非常好。但是,如果应用程序已被用户强制退出,则不起作用。根据{{3}}, iOS将永远不会在用户强制退出后重新启动应用程序。编辑:显然按可操作通知中的按钮计为用户交互,您的应用可以运行代码以响应此情况。
因此我更改了可操作的通知按钮,以便在按下应用程序时将其置于前台,认为这样可以解决我的问题。但是,出于某种原因,当应用程序被强制关闭时,从按钮启动应用程序时,上面的函数是 not 。
我的第一个想法是在AppDelegate中使用此函数修复此问题:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
但基于this post,我没有看到“按下可操作通知按钮”的键或类似的任何键。
如何在强制关闭后通过可操作的通知按钮检测到我的应用已启动?
更新:根据this list of launch option keys from Apple,“如果您没有实施此方法[我上面列出的第一个],您的应用永远不会响应自定义操作。”如果这是真的并且没有其他方法可以捕获这个,我该怎么办?我想做什么根本不可能?
答案 0 :(得分:2)
想出来。我移动了我最初尝试使用的方法:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
从我的FirstViewController
到我的AppDelegate
。我还移动了所有设置代码:
UNUserNotificationCenter.current().delegate = self
let muteAction = UNNotificationAction(identifier: "muteActionID", title: "Mute until tomorrow", options: [])
let tutorialCategory = UNNotificationCategory(identifier: "muteCategory", actions: [muteAction], intentIdentifiers: [], options: [])
UNUserNotificationCenter.current().setNotificationCategories([tutorialCategory])
到AppDelegate的didFinishLaunchingWithOptions
方法。现在,当我按下可操作的通知按钮时,无论应用程序是否已强行关闭,都会调用didReceive response
方法。 更好的是,它甚至无需在前台打开应用程序即可。