导致 MPNowPlayingInfoCenter 丢失状态的广告横幅

Posted

技术标签:

【中文标题】导致 MPNowPlayingInfoCenter 丢失状态的广告横幅【英文标题】:Ad banners causing MPNowPlayingInfoCenter to lose state 【发布时间】:2019-06-26 02:03:44 【问题描述】:

我有一个使用 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 并且无法恢复。

我已联系 Google 和 Apple 询问如何解决此问题,但同时想知道是否有人可以建议任何解决方法?

【问题讨论】:

我想我也有同样的问题。控制中心是否只显示“音乐”?您使用的是哪个 AdMob 版本? @C.Leung 是的!我使用的是最新版本之一,v7.44。您也可以在此处查看/参与此讨论:groups.google.com/forum/… 【参考方案1】:

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

        let adsLoaderSettings = IMASettings()
        adsLoaderSettings.disableNowPlayingInfo = true
        adsLoader = IMAAdsLoader(settings: adsLoaderSettings)

【讨论】:

以上是关于导致 MPNowPlayingInfoCenter 丢失状态的广告横幅的主要内容,如果未能解决你的问题,请参考以下文章

MPNowPlayingInfoCenter 始终处于播放状态

如何在 Swift 中更新 MPNowPlayingInfoCenter?

MPNowPlayingInfoCenter:从 URL 设置 MPMediaItemArtwork 的最佳方法是啥?

MPNowPlayingInfoCenter - 当音频暂停时,经过的时间不断计数

MPNowPlayingInfoCenter 是不是与 AVAudioPlayer 兼容?

暂停播放时 MPNowPlayingInfoCenter 没有正确反应