每天在不同时间触发本地通知
Posted
技术标签:
【中文标题】每天在不同时间触发本地通知【英文标题】:Fire local notification every day on different times 【发布时间】:2012-04-26 21:09:47 【问题描述】:我正在开发一个项目,该项目每天在与预定义数据库不同的时间通知用户,准确地说是一天五次。
我的问题是如何安排这些时间,5times*365days = 1825
开火日期!是否可以全部安排?
任何想法将不胜感激
【问题讨论】:
你将如何在后台处理本地通知你知道吗? 【参考方案1】:根据 Apple 文档:
一个应用程序只能有有限数量的预定通知;系统保持最快触发的 64 个通知(自动重新安排的通知计为单个通知)并丢弃其余的
我通过设置通知“队列”解决了这个问题。例如,在我的应用中,我有三种不同类型的通知,我们只说类型 A、B 和 C。
我将 A、B 和 C 通知安排在下个月,每次用户打开应用程序时,我都会检查剩余的通知数量。例如,如果不再有 A 通知,则应用会安排更多 A 通知等等。
我如何做到这一点?
每次我安排通知时,我都会使用userInfo
属性。我用一个名为type
的键和一个值设置了一个字典。
在我的应用委托中,我检查所有待处理的通知并计算每种类型的剩余通知数量。代码如下所示:
NSArray *scheduledNotifications = [UIApplication scheduledLocalNotifications];
NSUInteger AType, BType, CType;
for (UILocalNotification *notif in scheduledNotifications)
//Classify notifications by type
NSUInteger notifType = [[notif.userInfo objectForKey:@"type"]integerValue];
if (notifType == 0)
AType++;
else if(notifType == 1)
BType++;
else
CType++;
如果任何类型的计数为零,则应用会安排更多通知。
最后,如果显示通知,例如,每天在同一时间显示,您可以使用 repeatInterval
属性 但是您不能创建自己的重复间隔,您只能使用重复NSCalendarUnit
中定义的间隔。
希望对你有帮助。
【讨论】:
是的,我使用过类似的东西——创建待处理通知的队列或有序列表,并在应用程序打开时遍历它,等等。(重新)按日期顺序安排通知。事实上,使用这种方案,您只需要一个未完成的通知,因为它的“意义”记录在您的队列中(尽管最好安排几个,以便“通知到达”和徽章编号的内容或多或少符合预期应用程序没有运行)。 @Edu 这对我帮助很大,我想到了但不知道如何实现它,但是因为我要通过每次安排一组通知来安排一整年 是的,我发现 NSCalendarUnit 有点棘手,所以我建议你设置一些通知,然后自己看看它们是如何工作的。更改 iPhone 的日期有助于我了解如何使用 repeatingInterval,因此我鼓励您这样做。值得一提的是,带有 repeatingInterval 的通知算作 ONE 通知。 :) 我看不懂这段代码。carNotificationsDic
未使用,scheduledNotifications
未定义。为什么要分开 A、B、C 类型而不是按到期日对它们进行排序?
抱歉,carNotificationsDic
不是必需的,它是我代码的一部分,但在这里不是必需的。 scheduledNotifications
是 UIApplication
的属性。【参考方案2】:
您可以尝试使用 Eventkit 框架,使用它可以添加提醒、事件、警报。
1)没有UILocalNotification那样的通知数量限制。
2) 使用事件套件,您可以添加基于时间和基于位置的事件。
3)您也不必担心隐私问题。
虽然 UILocalNotification 和 EventKit 本身就很强大..
注意:ios 6 或更高版本适用于 EventKit 框架
您可以根据自己的需要选择哪一种。
以下链接将为您提供良好的开端
Resource 1
Resource 2.
下面的图片将让您很好地了解 evenkit 是什么。
如果它适合您的需要,请使用 eventkit。
【讨论】:
以上是关于每天在不同时间触发本地通知的主要内容,如果未能解决你的问题,请参考以下文章