从强制退出启动应用程序时检测可操作的通知按钮 - Swift

Posted

技术标签:

【中文标题】从强制退出启动应用程序时检测可操作的通知按钮 - Swift【英文标题】:Detecting an actionable notification button when launching app from force quit - Swift 【发布时间】:2018-01-18 22:58:11 【问题描述】:

这是我的情况:

我有一个应用程序,它每小时给用户一个通知。 此通知是可操作的,并附有“明天静音”按钮。正如您可能猜到的那样,此按钮应该重新安排通知,以便在第二天重新开始。 因此,当您按下此按钮时,我有一段代码需要执行。

如果应用在后台运行,我会在我的 FirstViewController.swift 文件中使用这个函数:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

如果应用程序在后台运行,则可以完美运行。但是,如果应用程序已被用户强制退出,这将不起作用。根据this post,ios 永远不会在用户强制退出后重新启动应用程序。 编辑:显然在可操作通知中按下按钮算作用户交互,您的应用程序可以 em> 运行代码来响应这个。

所以我更改了我的可操作通知按钮,以便在按下应用程序时将其置于前台,我认为这会解决我的问题。但是,由于某种原因,当应用程序被强制关闭时,从按钮启动应用程序时,调用上述函数。

我的第一个想法是在 AppDelegate 中使用这个函数来解决这个问题:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

但基于this list of launch option keys from Apple,我没有看到“按下可操作通知按钮”或类似的键。

我如何检测我的应用在被强制关闭后是否已通过可操作的通知按钮启动?

更新:根据this Apple documentation,“如果您不实现此方法 [我在上面列出的第一个方法],您的应用将永远不会响应自定义操作。”如果这是真的并且没有其他方法可以解决这个问题,我该怎么办?我想做的事是不可能的吗?

【问题讨论】:

【参考方案1】:

想通了。我移动了我最初尝试使用的方法:

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 方法,无论应用程序是否已被强制关闭。 更好的是,它甚至可以在没有在前台打开应用的情况下工作。

【讨论】:

效果很好。谢谢

以上是关于从强制退出启动应用程序时检测可操作的通知按钮 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

iOS,先强制退出应用,点击接收通知banner后,应用启动失败

iOS - 当应用程序被用户强制退出时处理静默推送通知

检测应用程序是不是通过单击应用程序图标或推送通知启动(当应用程序被用户强制终止时)

从 iOS 可操作通知交叉启动其他应用程序

如果应用程序被强制退出,则处理 IOS 远程通知

当应用程序被用户强制退出时处理推送通知iOS(替代方案?)