如何为以下场景安排本地通知?

Posted

技术标签:

【中文标题】如何为以下场景安排本地通知?【英文标题】:How can I schedule local notification for the following scenario? 【发布时间】:2012-12-08 00:24:27 【问题描述】:

专家,我有一个场景,我需要每天通知用户 3 次(早上、下午、晚上)。根据每个日期的数据库值,这些通知的时间每天都会有所不同。

这三个通知是可配置的。这意味着用户可能只是选择设置下午和晚上,同时在设置下关闭早上通知。

据我了解,我可以使用本地通知来实现这一点。

我可以做到以下几点: - 在应用程序退出之前,在 didFinishLaunchingWithOptions 中,我可以检查下一个通知到期时间是什么,它是否设置(开/关)。如果已设置,我会安排它。如果不是,我继续下一个通知类型并做同样的事情。如果所有通知都关闭,显然不会安排任何通知。

现在,当通知出现时,我会看到带有“关闭”和“查看”两个按钮的警报。 如果用户选择“查看”,我的应用程序将恢复活动状态,并且在用户退出之前安排下一个通知。

到目前为止一切顺利。

现在如果用户选择“关闭”我该怎么办?它不会启动我的应用程序,因此不会安排下一个通知?

我如何实现这一目标? 有没有更好的方法来做到这一点?

帮助!帮助!救命!

【问题讨论】:

听起来你想做的事情不太可行或可用。我建议重新考虑您的要求并尝试以不同的方式解决问题。 【参考方案1】:

您可以一次简单地安排所有(或多个)通知。您无需等待用户查看您的应用来安排下一个通知。

来自the docs on UILocalNotification,

一个应用程序只能有有限数量的计划 通知;系统保留最快触发的 64 条通知 (自动重新安排的通知计为一个 通知)并丢弃其余的

因此,如果您每天有 3 条通知,您可以一次预先安排 3 周的通知。我想如果用户一个月不打开您的应用程序,您仍然会遇到问题,但是您需要担心这种情况吗?

无论如何,我只是想确保您不需要一次安排这些通知。

例子:

UILocalNotification* n1 = [[UILocalNotification alloc] init];
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60];
n1.alertBody = @"one";
UILocalNotification* n2 = [[UILocalNotification alloc] init];
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90];
n2.alertBody = @"two";
[[UIApplication sharedApplication] scheduleLocalNotification: n1];
[[UIApplication sharedApplication] scheduleLocalNotification: n2];

因此,即使用户在第一个通知出现时选择了关闭,第二个通知仍然会送达。

顺便说一句,didFinishLaunchingWithOptions 方法会在您的应用程序启动后立即调用,而不是在它关闭之前。也就是说,您可以随时安排新通知。

【讨论】:

谢谢内特。我曾考虑过,但不确定这是否正确。【参考方案2】:

您还可以使用repeatInterval 属性,以便他们无限期地重新安排自己。但是,您仅限于NSCalendarUnit 中的单位。请参阅docs 了解更多信息

【讨论】:

以上是关于如何为以下场景安排本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何为本地通知界面编写适当的测试?

如何为本地通知设置警报管理器?

如何为 ios 本地通知内容提供自定义辅助功能文本 - UNNotificationContent

如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知

本地通知颤动

如何安排本地通知不同的时间段?