iOS 开发:推送通知阻止我的本地通知触发

Posted

技术标签:

【中文标题】iOS 开发:推送通知阻止我的本地通知触发【英文标题】:iOS Development: Push notifications prevent my local notifications from firing 【发布时间】:2011-01-19 19:53:31 【问题描述】:

我有一个闹钟应用程序,该应用程序设计为在前台运行时以特定方式运行,它会收到我的应用程序安排的本地通知。当用户设置警报时,我的应用程序会创建一个本地通知。当该本地通知触发时,它会调用didReceiveLocalNotification 方法来提醒用户。问题是,如果我的应用程序在前台运行并且推送通知来自不同的应用程序,那么它会显示模式推送通知视图,这会阻止我的应用程序在本地通知触发时提醒用户。一旦我关闭推送通知模式视图,我的应用程序就会触发本地通知。有没有解决的办法?我问是因为如果我的应用程序在用户安排它触发时没有触发警报,那么它有点违背了设置警报的整个目的。

非常感谢您的智慧!

【问题讨论】:

不确定使用 NSPostNow 将其排入 NSNotificationQueue 是否可行。推送通知事件确实会触发 applicationDidResignActive,不是吗? 【参考方案1】:

一个应用程序有 5 种不同的状态:

前台活动 前台不活动 背景跑步 背景暂停 未运行

当您启动应用程序时,它处于“前台活动”状态,然后当显示模式推送通知时,您的应用程序将进入“前台非活动状态”。

在文档中,Apple 表示(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html):

如果它在应用程序未在前台处于活动状态时传递它,它会显示警报、标记应用程序图标或播放声音——无论 UILocalNotification 对象中指定的任何内容。如果应用程序在前台运行,则没有警报、标记或声音;相反,如果委托实现它,则调用 application:didReceiveLocalNotification: 方法。

因此,在前台,application:didReceiveLocalNotification: 仅在您的应用处于活动状态时才会被调用,并且在您关闭模式通知时它会变为活动状态。

这是临界点,这种情况没有解决方案。

【讨论】:

【参考方案2】:

我不相信有办法绕过它。您可能可以播放声音或振动,但操作系统已经通过推送通知警报请求用户注意,因此在用户处理第一个之前发布另一个确实无济于事。当用户同时安排两个闹钟时,你如何处理?

【讨论】:

以上是关于iOS 开发:推送通知阻止我的本地通知触发的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送

iOS静默推送通知在后台状态下每次都不会触发

iOS开发之本地推送接收到推送的方法

IOS-推送通知

如何清除 iOS 的远程推送通知?

ios开发之-本地推送通知