ios - 在应用程序终止时安排本地通知

标签 ios swift notifications localnotification unusernotificationcenter

我的目标是创建一个本地通知,如果用户 2 周未启动该应用程序,该通知将触发。我使用 Manager 类来处理应用本地通知的调度。

这是我目前的解决方案:

func applicationWillTerminate(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

但是,applicationWillTerminate 不会被调用 - 因此不会安排通知 - 如果应用程序在后台终止(即它从停靠栏中滑出)。

有什么解决方法吗?

我想到的一个解决方法是在应用程序进入后台时安排通知,然后在应用程序再次激活时调用 removePendingNotificationRequests(),如下所示:

func applicationDidEnterBackground(_ application: UIApplication) {
    NotificationManager.shared.schedule(notification)
}

func applicationDidBecomeActive(_ application: UIApplication) {
   UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ["notification"])
}

问题在于,在我看来,这是一种浪费且次优的解决方案。有没有比安排这个通知更优雅的解决方案

最佳答案

您非常接近我会使用的策略。不要在您进入后台时安排通知,而是在每次应用程序激活时清除并安排通知。

func applicationDidBecomeActive(_ application: UIApplication) { 
    UNUserNotificationCenter.current().removePendingNotificationRequests( withIdentifiers: ["notification"]
    NotificationManager.shared.schedule(notification)
}

每次启动时,您都应该设置一个 future 2 周的通知。如果他们明天启动,请删除旧通知,并在两周后设置一个新通知。

关于ios - 在应用程序终止时安排本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138915/

相关文章:

ios - UITableView 不会显示数据

ios - 为什么使用 [UIColor colorWithRed :gred:blue:alpha] lead to EXC_BAD_ACCESS?

ios - 如何像这样在 iOS7+ 中将自定义 UIView 添加到导航栏

swift - 在 Swift 文档注释中格式化表格

ios - 如何使用 Swift 在 iOS 中将音频格式从 mp3 转换为 wav?

ios - 子类 UITextField 在使用具有自定义字体的尺寸类时覆盖字体

android - 包的开发人员警告,未能在 channel null 上发布通知,请参阅日志以获取更多详细信息。 toast

ios - 缩小 UITableViewCell

ios - 点击时清除横幅通知

ios - 使用新的 Firebase Messaging SDK 在 iOS 中发送通知