如果应用程序在前台,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 禁用推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在前台 iOS Swift 3.0 中接收推送通知?

推送通知声音在 iOS8 上不起作用

应用程序在前台时未收到推送通知

如果您在事先同意通知后禁用通知,Apple 如何处理推送令牌?

如果用户禁用了推送通知,如何从混合应用程序中检查?

如果设备空闲几分钟且没有充电状态,则未发送 Firebase 推送通知