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

27

专家们,我有一个场景,在其中需要每天三次(早上、下午、晚上)通知用户。这些通知的时间对于每一天都将不同,基于每个日期的数据库值。

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

根据我的理解,我可以使用本地通知来实现。

我可以做以下事情: - 在应用退出之前,在didFinishLaunchingWithOptions内部,我可以检查下一个通知到底是什么时候,它是否设置(开/关)。如果设置了,我就安排它。如果没有设置,我就继续下一个通知类型,并执行同样的操作。如果所有通知都关闭了,显然就不会安排任何通知。

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

到目前为止都没问题。

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

我该如何实现这一点? 有更好的方法吗?

救命!救命!救命!


听起来你想做的事情似乎不太可行或有用。我建议重新考虑你的需求,并尝试以不同的方式解决问题。 - David Brunow
2个回答

41
您可以一次性预定所有(或很多)通知,无需等待用户< strong>查看您的应用程序来安排下一个通知。
根据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方法会在应用程序启动后立即调用,而不是在关闭前立即调用。 也就是说,您可以随时安排新的通知。


谢谢Nate。我曾经考虑过,但不确定那是否是正确的方法。 - Haris Farooqui

3

你还可以使用repeatInterval属性,使通知无限次重复。但是你只能使用NSCalendarUnit中的单位。欲了解更多信息,参见文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接