Ios7 停止ios 7远程通知声音

Ios7 停止ios 7远程通知声音,ios7,apple-push-notifications,Ios7,Apple Push Notifications,在iOS 7中,当用户从锁屏上滑动我的一个通知并被带到我的应用程序时,通知声音会一直播放(与iOS 6不同)。当我的应用程序在iOS 7中启动时,有没有办法通过编程停止声音 注意:请参阅被接受的答案,了解一个劣质的解决方法。我很确定这是苹果方面的一个缺陷,请参阅(谢谢Gui13)。如图所示,提交一份重复的bug报告,以引起苹果的注意。同时,以下操作将起作用,但也将清除通知中心中的所有通知,这当然是一个劣质的解决方法,但在我的情况下,在修复此问题之前是值得的: [[UIApplication sh

在iOS 7中,当用户从锁屏上滑动我的一个通知并被带到我的应用程序时,通知声音会一直播放(与iOS 6不同)。当我的应用程序在iOS 7中启动时,有没有办法通过编程停止声音


注意:请参阅被接受的答案,了解一个劣质的解决方法。

我很确定这是苹果方面的一个缺陷,请参阅(谢谢Gui13)。如图所示,提交一份重复的bug报告,以引起苹果的注意。同时,以下操作将起作用,但也将清除通知中心中的所有通知,这当然是一个劣质的解决方法,但在我的情况下,在修复此问题之前是值得的:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];    
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];

使用它没有帮助

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];    
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
通过单击通知进入应用程序后

在处理声音通知时,我已通过发送另一个空通知解决了此问题:

if (notification.soundName != nil) {
    if (IS_IOS7) {
        UILocalNotification *emptyNotification = [[UILocalNotification alloc] init];
        emptyNotification.timeZone = [NSTimeZone defaultTimeZone];
        emptyNotification.fireDate = [NSDate date];
        emptyNotification.alertBody = @"";
        [[UIApplication sharedApplication] scheduleLocalNotification:emptyNotification];
    }
}

对于iOS 7,接受的答案可能是唯一可行的选择。对于来到这里的开发人员来说,他们至少可以支持iOS 10,这很有效

您可以通过调用从通知中心删除所有通知

UNUserNotificationCenter.current().removeAllDeliveredNotifications()
这与公认的答案具有非常相似的效果:音频停止播放,所有通知都从通知中心删除

一个改进的解决方案是使用

UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [String])
这将仅停止给定通知的音频,并将其从通知中心删除

要获取所有已传递通知的ID,请使用

UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
  let ids = notifications.map { $0.request.identifier }
}

就我而言,
setApplicationBadgeNumber:0
不起作用。请注意,这似乎是一个错误:但苹果没有就此进行沟通。您可能希望尝试
[[UIApplication sharedApplication]SetApplicationBadgeNumber:1];[[UIApplication sharedApplication]设置应用程序徽章编号:0],这就是我正在做的,我做到了。不过,我给的是一个真正的解决方案。。这更像是一个糟糕的解决方法。哦,我和你在一起,我也很想知道一个真正的解决方案。我很确定这是苹果端的一个bug。在阅读了你发布的开发论坛链接后,苹果不让你看到其他人的bug报告——他们利用多人报告同一个bug的事实来为bug分配优先级,根据。你可能想像我一样提交一份重复的bug报告。你必须把这些代码放在哪里才能实现它?我将此代码粘贴到:-(void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)通知中,但通知声音仍在继续?!?您正在尝试停止远程通知的声音吗?如果是这样的话,
didReceiveLocalNotification
就像它说的那样,只适用于本地通知。阅读如何处理远程通知,因为其中有一些内容,但简而言之,您可以将其放入
didReceiveMemotentification
didFinishLaunchingWithOptions
是的,我将其放入DidReceiveLocalNotification中,但声音不会停止。有什么建议吗?我记得读到过,在某些情况下,会调用
didfishlaunchwithoptions
,也可以尝试将其放在那里?当本地通知仅由推送触发时,此解决方法似乎有效,但不幸的是,当通知由应用程序本身触发时,此方法无效:(