AdMob 原生广告加载但未显示

AdMob Native ad loading but not showing

我正在使用 Google AdMob 在我的应用程序上展示原生广告。我按照 Google 文档中的所有内容进行了制作。测试后,我发现测试广告值加载成功,因为它们不是零,当我打印它们时,我可以看到它们应该显示的样子。但是我的 GADNativeAdView 上没有显示数据。这是我的一些代码:

var nativeAdView: GADNativeAdView! {
    didSet {
        nativeAdView.translatesAutoresizingMaskIntoConstraints = false
        containerView.addSubview(nativeAdView)
        
        nativeAdView.leftAnchor.constraint(equalTo: collectionView4.leftAnchor).isActive = true
        nativeAdView.rightAnchor.constraint(equalTo: collectionView4.rightAnchor).isActive = true
        nativeAdView.topAnchor.constraint(equalTo: collectionView4.bottomAnchor, constant: 10).isActive = true
        nativeAdView.heightAnchor.constraint(equalToConstant: 310).isActive = true
    }
}

var adLoader: GADAdLoader!

// MARK: - Google Mobile Ads
extension HomeController: GADNativeAdLoaderDelegate, GADNativeAdDelegate {
    
    private func setupAd() {
        let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
        multipleAdsOptions.numberOfAds = 1
        
        adLoader = GADAdLoader(adUnitID: testNativeId, rootViewController: self,
                adTypes: [.native],
                options: [multipleAdsOptions])
        adLoader.delegate = self
        adLoader.load(GADRequest())
    }
    
    func imageOfStars(from starRating: NSDecimalNumber?) -> UIImage? {
      guard let rating = starRating?.doubleValue else {
        return nil
      }
      if rating >= 5 {
        return UIImage(named: "stars_5")
      } else if rating >= 4.5 {
        return UIImage(named: "stars_4_5")
      } else if rating >= 4 {
        return UIImage(named: "stars_4")
      } else if rating >= 3.5 {
        return UIImage(named: "stars_3_5")
      } else {
        return nil
      }
    }
    
    func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADNativeAd) {
        // Create and place ad in view hierarchy.
        let nibView = Bundle.main.loadNibNamed("NativeAdView", owner: nil, options: nil)?.first
        guard let nativeAdView = nibView as? GADNativeAdView else {
            return
        }
    
        self.nativeAdView = nativeAdView
    
        nativeAd.delegate = self
        
        (nativeAdView.headlineView as? UILabel)?.text = nativeAd.headline
        nativeAdView.mediaView?.mediaContent = nativeAd.mediaContent
    
        (nativeAdView.bodyView as? UILabel)?.text = nativeAd.body
        nativeAdView.bodyView?.isHidden = nativeAd.body == nil
        
        (nativeAdView.callToActionView as? UIButton)?.setTitle(nativeAd.callToAction, for: .normal)
        nativeAdView.callToActionView?.isHidden = nativeAd.callToAction == nil
        
        (nativeAdView.iconView as? UIImageView)?.image = nativeAd.icon?.image
        nativeAdView.iconView?.isHidden = nativeAd.icon == nil
        
        (nativeAdView.starRatingView as? UIImageView)?.image = imageOfStars(from: nativeAd.starRating)
        nativeAdView.starRatingView?.isHidden = nativeAd.starRating == nil
        
        (nativeAdView.storeView as? UILabel)?.text = nativeAd.store
        nativeAdView.storeView?.isHidden = nativeAd.store == nil
        
        (nativeAdView.priceView as? UILabel)?.text = nativeAd.price
        nativeAdView.priceView?.isHidden = nativeAd.price == nil
        
        (nativeAdView.advertiserView as? UILabel)?.text = nativeAd.advertiser
        nativeAdView.advertiserView?.isHidden = nativeAd.advertiser == nil
        
        nativeAdView.callToActionView?.isUserInteractionEnabled = false
        
        nativeAdView.nativeAd = nativeAd
    }
    
    func adLoader(_ adLoader: GADAdLoader, didFailToReceiveAdWithError error: Error) {
        print("ERROR: \(error.localizedDescription)")
    }
}

这是我的 .xib 文件:

已设置 .xib 文件中的自定义视图 class。

经过反复试验,我发现在 .xib 文件中使用 @IBOutlet 视图并在 adLoader(_:) 上调用它们是有效的。