首页 文章

如何为以下方案安排本地通知?

提问于
浏览
26

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

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

根据我的理解,我可以使用本地通知实现此目的 .

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

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

到现在为止还挺好 .

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

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

救命!救命!救命!

2 回答

  • 40

    您可以一次只安排所有(或许多)通知 . 您无需等待用户 View 您的应用安排下一个通知 .

    来自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];
    

    因此,即使用户在第一个通知出现时选择 Close ,第二个通知仍将被发送 .

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

  • 3

    您还可以使用 repeatInterval 属性,以便它们无限期地重新安排自己 . 但是,您仅限于 NSCalendarUnit 中的单位 . 有关详细信息,请参阅docs

相关问题