gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:27 25 4
gpt4 key购买 nike

这是我的情况:

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

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

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

如果应用程序在后台运行,则效果很好。但是,如果应用程序已被用户强制退出,则这不起作用。根据this post , iOS 将永远不会在用户强制退出后重新启动应用程序。 编辑:显然按下可操作通知中的按钮算作用户交互,并且您的应用程序可以运行代码对此的回应。

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

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

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

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

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

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

最佳答案

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

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 方法现在在我按下可操作的通知按钮时被调用,无论该应用程序是否已被强制关闭。 更好的是,它甚至可以在不在前台打开应用程序的情况下运行。

关于ios - 从强制退出启动应用程序时检测可操作的通知按钮 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48331682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com