iOS8禁用推送通知,如果应用程序在前台

时间:2015-03-14 02:57:05

标签: objective-c swift ios8 push-notification appdelegate

我的App Delegate中有一个didReceiveRemoteNotification处理程序。

即使我返回一个空的代码块,我的应用程序也会收到推送通知,并在应用程序运行时将其显示给用户。

当应用在后台时,我想要推送通知,但是当它在前台运行时,我想要推送通知。

我已经阅读了十几篇关于iOS8通知的SO帖子和文档,以及关于通知的WWDC2014视频,我仍然无法弄清楚如何在应用程序处于前台时阻止通知模式警报。

如果您知道这样做的任何方式,请告诉我。

4 个答案:

答案 0 :(得分:3)

您可以在didReceiveRemoteNotification中查看申请状态以实现您的功能。如果应用程序状态处于活动状态,则不要执行代码。

如需更多参考,请查看以下代码。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{

    if(application.applicationState == UIApplicationStateActive) {
         // Do nothing
    }else{
         // Do your code here
    }
}

答案 1 :(得分:1)

我的解决方案是改变我的推动以保持沉默,并发送本地通知。

确保将内容设置为'在有效负载中为1并删除警报'键。

答案 2 :(得分:1)

我遇到了同样的问题,在我的情况下问题出在库“OneSignal”上。看起来这个库为推送通知注册了自己的回调。即使您的代码中有空的“didReceiveRemoteNotification”方法,OneSignal在应用程序打开时收到推送和显示警告窗口后执行自己的功能。我找到了解决此问题的方法here

答案 3 :(得分:0)

只需将此行添加到app Delegate

中的didFinishLaunchingWithOptions即可
function toggleFields() {
    if ($("#dbType").val() === "stone"){
        $("#stone").show();
         $("#kg").hide();
         //then reset it too
         $('input[name="kg"]').val("");
}
    else if ($("#dbType").val() === "kg"){
        $("#kg").show();
        $("#stone").hide();
         //then reset it too
         $('input[name="stone"]').val("");
    }
}