专家,我有一个场景,我需要每天三次(早上,下午,晚上)通知用户。根据每个日期的数据库值,这些通知的时间每天都会有所不同。
这三个通知是可配置的。意思是用户可能只是选择设置下午和晚上,同时关闭设置下的早晨通知。
根据我的理解,我可以使用本地通知实现此目的。
我可以做以下事情: - 在应用程序退出之前,在didFinishLaunchingWithOptions中,我可以检查下一个通知到期是什么,是否设置(开/关)。如果设置,我安排它。如果不是,我继续下一个通知类型并做同样的事情。如果关闭所有通知,显然不会安排任何通知。
现在,当通知显示时,我会看到警告,其中有两个按钮“关闭”和“查看”。 如果用户选择“查看”,我的应用程序将恢复活动状态,并且在用户退出之前,将安排下一个通知。
到目前为止一切顺利。
现在,如果用户选择“关闭”,我该怎么办?它不会启动我的应用程序,因此下一个通知不会被安排?
我如何实现这一目标? 有没有更好的方法呢?
帮助!救命!救命啊!
答案 0 :(得分:40)
您可以一次只安排所有(或多个)通知。您无需等待用户查看您的应用以安排下一个通知。
来自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
方法会在应用程序启动后立即调用,而不是在它关闭之前调用。也就是说,您可以随时安排新的通知。
答案 1 :(得分:3)
您还可以使用repeatInterval
属性,以便他们无限期地重新安排自己。但是,您仅限于NSCalendarUnit
中的单位。有关详细信息,请参阅docs