安排本地通知的数量

Posted

技术标签:

【中文标题】安排本地通知的数量【英文标题】:Schedule number of Local Notifications 【发布时间】:2011-10-11 04:25:03 【问题描述】:

我正在制作一个 iPhone 应用程序,其中我实现了本地通知的概念,以提醒用户吃药。

但在 ios 中,我们一次不能安排超过 64 个通知。但是我在数据库中有许多日期时间条目。如何安排超过 64 个通知?

【问题讨论】:

【参考方案1】:

如您所知,您可以为每个应用安排最多 64 个通知。如果您添加的更多,系统将保持最快触发的 64 个通知,并丢弃另一个。

确保安排所有通知的一种方法是首先安排前 64 个通知,然后定期(可能在每次启动应用程序或每次触发通知时)检查安排的通知数量如果通知少于 64 个,假设 n 个通知,然后安排下一个 (64 - n) 个通知。

int n = [[[UIApplication sharedApplication] scheduledLocalNotifications] count];
int x = 64 - n;
// Schedule the next 'x' notifications

【讨论】:

我假设这意味着每个设备每个应用程序有 64 个通知,还是每个应用程序总共有 64 个通知?例如,如果我使用 2 部不同的手机,我是否可以在每部手机上分别设置 64 条通知,总共 128 条? 这意味着每个设备每个应用程序有 64 个通知【参考方案2】:

我创建了带有本地通知的应用程序,在这种情况下,用户在给定的时间间隔内每 20/40/60 分钟收到一次通知(例如 8:00-20:00)。解决方案是全天最多生成 64 条通知,并将 UILocalNotification 的repeatInterval 设置为 NSCalendarUnitDay。当然,如果您需要使用更复杂的通知模式,这不是要走的路。

另外值得一提的是,从 iOS7 开始,由于客户端的需求,我不得不在后台应用刷新中实现通知的重新调度。

【讨论】:

【参考方案3】:

对此的基本解决方案是使用 repeatInterval 来通知以特定时间间隔发生的通知。这将减少冗余通知的数量。但是,如果数字超过 64,那么您可以采用一种策略来使用 userInfo 字典并在其中传递下一个通知的时间和消息,并在调用 - (void) application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification 方法时安排它。 这可能有点棘手,因此您必须小心在 userInfo 字典中传递正确的数据并准确设置通知。 我希望这会有所帮助。

【讨论】:

当应用程序处于后台或非活动状态并且触发通知并且用户单击“取消”按钮时,这也会产生问题,在这种情况下您的didReceiveLocalNotification方法将不会被调用,所以我们在这种情况下,将需要更好的策略。如果您发现更好的东西,请告诉我。【参考方案4】:

除了首先安排前 64 个通知之外,我不知道还有什么其他方法,然后在通知的启动、后台处理和启动时,检查通知数量是否少于 64,然后重新安排您的通知.

我不明白为什么 Apple 的通知实现如此糟糕。如果有人能找到更好的方法,请告诉我。

【讨论】:

【参考方案5】:

我发现这个 Swift 库与我们正在寻找的几乎相同。我将尝试这个并确认它是如何工作的:

https://github.com/ahmedabadie/ABNScheduler

【讨论】:

【参考方案6】:

Apple Doc 说:

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

【讨论】:

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

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

如何安排本地通知

取消已安排的本地通知

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

提前几分钟安排本地通知

从后台安排本地通知(Ionic + ngCordova)