2

我有一个使用播放音频的应用程序,AVPlayer我触摸正确的 API 以在控制中心获取正在播放的信息以更新。

[[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,正如我所料,它只是没有显示。

广告不播放音频或视频,但不知何故,它们破坏了 Now Playing API 并且无法恢复。

我已经联系了谷歌和苹果来解决这个问题,但同时想知道是否有人有任何解决方法可以建议?

4

1 回答 1

2

我在调查 Google Interactive Media Ads SDK (IMA SDK) 的类似问题时发现了这个问题,它自动将“正在播放”状态更改为“广告”。最终在 IMAAdsSettings 对象上找到了标志,即disablesNowPlayingInfo Documentation。将此设置为 true 解决了我的问题。

        let adsLoaderSettings = IMASettings()
        adsLoaderSettings.disableNowPlayingInfo = true
        adsLoader = IMAAdsLoader(settings: adsLoaderSettings)
于 2019-12-17T15:43:40.113 回答