我有一个使用AVPlayer
播放音频的应用,并且我触摸了正确的API以获取“正在播放”信息以在Control Center中进行更新。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:0 error:&categoryError];
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeSpokenAudio error:&modeError];
[[AVAudioSession sharedInstance] setActive:YES error:&activeError];
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = {...};
...
MPRemoteCommandCenter * const commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
commandCenter.playCommand.enabled = YES;
...
此API可以正常运行,直到某些广告使用Google的AdMob框架展示。这些是在UIWebView
实例中显示的标准MREC和标语。一出现,“正在播放”状态就会恢复为“音乐”应用,并且使用遥控器的功能也会消失。
一旦发生这种情况,我什至无法重置“正在播放”信息,就像卡住了一样。虽然,当我打印出[[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo
的值时,正如我期望的那样,它只是不显示。
广告没有播放音频或视频,但是不知何故,它们正在破坏“正在播放” API,并且无法恢复。
我已与Google和Apple联系,寻求如何解决此问题的方法,但与此同时,我想知道是否有人可以提出任何解决方法?
答案 0 :(得分:0)
我在调查与Google Interactive Media Ads SDK(IMA SDK)类似的问题时发现了这个问题,该问题会自动将“正在播放”状态更改为“广告”。最终在IMAAdsSettings对象disablesNowPlayingInfo
Documentation上找到该标志。将此设置为true解决了我的问题。
let adsLoaderSettings = IMASettings()
adsLoaderSettings.disableNowPlayingInfo = true
adsLoader = IMAAdsLoader(settings: adsLoaderSettings)