Card based Native Ad
Step 1: Request for Ads:
TImplement callback methods into your “GluedInDelegate“ protocol class.
To request ads, use the following method:
		 
		 func nativeAdsLoader(
        requiredNumberOfAds: Int,
        gadNativeAd: @escaping (_ nativeAd: GADNativeAd?) -> ()
    ) -> () {
        GADNativeManager().fetchAds(
            genre: nil,
            dialect: nil,
            originalLanguage: nil,
            gamExtraParams: nil,
            adUnitID: adUnitId,
            adsFormatId: ["banner"]) { nativeAd in
                gadNativeAd(nativeAd)
            } didFailedWithError: { error in
                debugPrint("didCompleteWithError \(error)")
            }
    }
		 
		 
  • feed: The feed model for the ads.
  • genre: Array of genres to target.
  • dialect: Array of dialects to target.
  • originalLanguage: Array of original languages to target.
  • extraParams: Additional parameters for Google Ads Manager.
  • adsId: Unique identifier for the ads.
  • adsFormatId: Array of format IDs for the ads.
Step 2: Request Ads controller on demand basis:
Implement callback methods into your “GluedInDelegate“ protocol class.
To request ads controller on demand basis, use the following method:
		 
		 func requestNativeAdCell() -> UITableViewCell {
        let nativeAdCell = UnifiedNativeAdCell()
        let adView = nativeAdCell.contentView.subviews.first as? GADNativeAdView
        nativeAdCell.updateUI()
        return nativeAdCell
    }
		 
		 
Important method in GADNativeManager class:
Step 3: Load the Ads:
To load native ads, use the following method, these method is already provided in to sample app, you dont have to change anything there just use as is:
		 
		 GADNativeManager().fetchAds(
            genre: nil,
            dialect: nil,
            originalLanguage: nil,
            gamExtraParams: nil,
            adUnitID: adUnitId,
            adsFormatId: ["banner"]) { [weak self] nativeAd in
//                gadNativeAd(nativeAd)
                guard let weakSelf = self else { return }
                nativeAd.rootViewController = weakSelf.rootViewController
                DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                    weakSelf.adView?.nativeAd = nativeAd
                    weakSelf.adView?.mediaView?.mediaContent = nativeAd.mediaContent
                }
                DispatchQueue.main.async {
                    if let mediaView = weakSelf.adView?.mediaView,
                       nativeAd.mediaContent.aspectRatio > 0 {
                        let heightConstraint = NSLayoutConstraint(
                            item: mediaView,
                            attribute: .height,
                            relatedBy: .equal,
                            toItem: mediaView,
                            attribute: .width,
                            multiplier: CGFloat(1 / nativeAd.mediaContent.aspectRatio),
                            constant: 0)
                        heightConstraint.isActive = true
                    }
                }
                (weakSelf.adView?.headlineView as? UILabel)?.text = nativeAd.headline
                weakSelf.adView?.headlineView?.isHidden = nativeAd.headline == nil
                (weakSelf.adView?.bodyView as? UILabel)?.text = nativeAd.body
                weakSelf.adView?.bodyView?.isHidden = nativeAd.body == nil
                (weakSelf.adView?.callToActionView as? UIButton)?.setTitle(nativeAd.callToAction, for: .normal)
                weakSelf.adView?.callToActionView?.isHidden = nativeAd.callToAction == nil
                weakSelf.adView?.callToActionView?.isUserInteractionEnabled = false
                (weakSelf.adView?.iconView as? UIImageView)?.image = nativeAd.icon?.image
                weakSelf.adView?.iconView?.isHidden = nativeAd.icon == nil
            } didFailedWithError: { error in
                debugPrint("didCompleteWithError \(error)")
            }
    }
		 
		 
  • genre: Array of genres to target.
  • dialect: Array of dialects to target.
  • originalLanguage: Array of original languages to target.
  • gamExtraParams: Additional parameters for Google Ads Manager.
  • adUnitID: Ad unit ID.
  • adsFormatId: Array of format IDs for the ads.
  • didCompeleted: Completion handler for successful ad load.
  • didFailedWithError: Error handler for failed ad load.