如果应用程序在前台,iOS8 禁用推送通知
Posted
技术标签:
【中文标题】如果应用程序在前台,iOS8 禁用推送通知【英文标题】:iOS8 Disable Push Notification If App Is In Foreground 【发布时间】:2015-03-14 02:57:05 【问题描述】:我的 App Delegate 中有一个 didReceiveRemoteNotification 处理程序。
即使我返回一个空代码块,我的应用也会收到推送通知,并在应用运行时将其显示给用户。
我想要应用在后台时的推送通知,而不是在前台运行时。
我已经阅读了十几篇关于 ios8 通知的 SO 帖子和文档,以及关于通知的 WWDC2014 视频,但我仍然不知道如何在应用程序处于前台时阻止通知模式警报。
如果你知道这样做的任何方法,请告诉我。
【问题讨论】:
您能在此处添加您的 didReceiveRemoteNotification 代码吗? 【参考方案1】:您可以检查didReceiveRemoteNotification
中的应用程序状态以实现您的功能。如果应用程序状态处于活动状态,则不要执行您的代码。
如需更多参考,请查看以下代码。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
if(application.applicationState == UIApplicationStateActive)
// Do nothing
else
// Do your code here
【讨论】:
不幸的是,这不起作用。警报由系统在调用任何这些代表之前传递。该文件也这样说。唯一的解决方案似乎是禁用警报标志,通过静默推送发送本地通知。【参考方案2】:我的解决方案是将推送更改为静音,并发送本地通知。
确保在有效负载中将“内容可用”设置为 1,并移除“警报”键。
【讨论】:
【参考方案3】:我遇到了同样的问题,就我而言,问题出在库“OneSignal”上。似乎这个库为推送通知注册了自己的回调。即使您的代码中有空的“didReceiveRemoteNotification”方法,OneSignal 也会在收到推送后执行自己的函数,并在应用打开时向用户显示警报窗口。我找到了这个问题的解决方案here。
【讨论】:
【参考方案4】:只需将此行添加到应用程序委托中的didFinishLaunchingWithOptions
OneSignal.inFocusDisplayType = OSNotificationDisplayType.none
【讨论】:
以上是关于如果应用程序在前台,iOS8 禁用推送通知的主要内容,如果未能解决你的问题,请参考以下文章