【发布时间】:2016-10-05 15:14:05
【问题描述】:
我对远程通知中的自定义声音有一个大问题。
这是我的场景:
我有两种类型的通知,每一种都有自定义声音。当我的应用程序处于非活动状态或在后台时,声音就像魅力一样播放,并且操作系统在通知中心横幅警报中显示通知。
当在前台收到通知时,我处理通知,提取 aps 声音元素并通过 AVAudioPlayer 播放声音:
func playSound(_ sound: String) {
myLog("Let's play sound \(sound)")
// Plays new sound file
DispatchQueue.main.async {
// Stops last player if playing
if (self.soundPlayer != nil) {
if (self.soundPlayer.isPlaying) {
self.soundPlayer.stop()
}
}
do {
let path = Bundle.main.path(forResource: sound, ofType:nil)!
let url = URL(fileURLWithPath: path)
self.soundPlayer = try AVAudioPlayer(contentsOf: url)
self.soundPlayer.delegate = self
if (self.soundPlayer.prepareToPlay()) {
self.soundPlayer.play()
}
} catch let error {
myLog("Error playing .caf file: \(error)")
}
}
}
问题从这里开始。如果应用程序返回后台 - 在执行我的播放器代码时处于非活动状态,通知中心的操作系统警报将不再播放自定义声音。
总结:
应用处于非活动状态 - 后台收到通知 -> 自定义声音播放正常。
应用前台收到通知 -> 代码通过 playSound 函数播放声音,然后如果应用在后台非活动状态下收到其他通知,操作系统播放默认通知声音。
提前致谢。
【问题讨论】:
标签: ios swift apple-push-notifications ios10