我的App Delegate中有一个didReceiveRemoteNotification处理程序。
即使我返回一个空的代码块,我的应用程序也会收到推送通知,并在应用程序运行时将其显示给用户。
当应用在后台时,我想要推送通知,但是当它在前台运行时,我想要推送通知。
我已经阅读了十几篇关于iOS8通知的SO帖子和文档,以及关于通知的WWDC2014视频,我仍然无法弄清楚如何在应用程序处于前台时阻止通知模式警报。
如果您知道这样做的任何方式,请告诉我。
答案 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("");
}
}