当广告加载失败时在 Swift 中隐藏 iAd ADBannerView - 没有委托或委托没有实现 didFailToReceiveAdWithError

Hiding iAd ADBannerView in Swift when ad fails to load - no delegate or delegate does not implement didFailToReceiveAdWithError

这是我使用的代码:

var bannerView = ADBannerView()
self.canDisplayBannerAds = true

//show ad banner if an ad loads
func bannerViewDidLoadAd(banner: ADBannerView!)
{bannerView.hidden = false}

//hide ad banner if the ad fails to load
func bannerViewFailsToLoadAd(banner: ADBannerView!,didFailToReceiveAdWithError error: NSError!)
{bannerView.hidden = true
 println("failed to receive ad")}

当我将 iAd 填充率设置为 0% 时,没有打印任何内容,我从控制台得到以下输出:

ADBannerView: Unhandled error (no delegate or delegate does not implement didFailToReceiveAdWithError:): Error Domain=ADErrorDomain Code=5 "The operation couldn’t be completed. Banner view is visible but does not have content" UserInfo=0x7fd3fd3335e0 {ADInternalErrorCode=5, NSLocalizedFailureReason=Banner view is visible but does not have content, ADInternalErrorDomain=ADErrorDomain}

使用 self.canDisplayBannerAds = true 时,委托方法 不会 被调用。您需要自己创建一个 ADBannerView 并设置它的 delegate 以便调用委托方法,例如 bannerView.delegate = self.

self.canDisplayBannerAds = true 是一种 轻松 实施 iAd 横幅的方式。它会为你创建一个ADBannerView,如果它收到广告就显示它,如果它没有收到广告就隐藏它。以这种方式实现 iAd 横幅时无需实现委托方法。

因此您有两个选择,删除 var bannerView = ADBannerView() 并使用 self.canDisplayBannerAds = true 提供的 iAd 横幅,或者删除 self.canDisplayBannerAds = true 并完成您自己的 ADBannerView 实施。

如果您决定实施自己的 ADBannerView 检查我的回答 here,请忽略 AdMob 实施。