无法将Mopub的原生广告整合到我的UITableView for iOS中

时间:2017-01-31 00:12:05

标签: ios uitableview sdk mopub

我试图将Mopub的原生广告整合到我的UITableView for iOS中,而且它没有加载广告。

控制台说:

MOPUB: Received data from MoPub to construct native ad.     
MOPUB: Looking for custom event class named MPMoPubNativeCustomEvent.
MOPUB: Successfully loaded native ad.

但我在桌面视图中看不到任何广告。

这是我用于集成mopub的测试视图控制器:

import UIKit
import MoPub


class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MPTableViewAdPlacerDelegate {

    @IBOutlet weak var tableView: UITableView!
    let adUnitID = "my ad unit id"
    var placer:MPTableViewAdPlacer?
    var dataSource:[String]?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.mp_setDelegate(self)
        self.tableView.mp_setDataSource(self)

        self.tableView.register(UINib(nibName: "customCell", bundle: Bundle(for: customCell.self)), forCellReuseIdentifier: "cell")

        self.dataSource = [String]()

        for index in 0...20{
            self.dataSource?.append("My Index: \(index)")
        }

        self.setupAdPlacer()
        self.tableView.mp_reloadData()
    }

    func setupAdPlacer(){

        let targeting: MPNativeAdRequestTargeting! = MPNativeAdRequestTargeting()
        targeting.desiredAssets = Set([kAdIconImageKey, kAdCTATextKey, kAdTextKey, kAdTitleKey])

        let positioning:MPAdPositioning = MPAdPositioning()
        let settings:MPStaticNativeAdRendererSettings = MPStaticNativeAdRendererSettings()

        settings.renderingViewClass = NativeAdCell.self
        settings.viewSizeHandler = {(maxWidth: CGFloat) -> CGSize in
            let size:CGSize = CGSize(width: maxWidth, height: 333)
            return size
        }

        let config:MPNativeAdRendererConfiguration = MPStaticNativeAdRenderer.rendererConfiguration(with: settings)
        config.supportedCustomEvents = ["MPMoPubNativeCustomEvent"]

        self.placer = MPTableViewAdPlacer(tableView: self.tableView, viewController: self, adPositioning: positioning, rendererConfigurations: [config])
        self.placer?.delegate = self
        self.placer?.loadAds(forAdUnitID: adUnitID, targeting: targeting)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return (self.dataSource?.count)!
    }



    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.mp_dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? customCell

        if cell == nil {
            cell =  customCell()
        }

        let data = self.dataSource?[indexPath.row]
        cell?.myTextLabel?.text = data

        return cell! 
    }
}

我的NativeAdCell类:

import UIKit
import MoPub

class NativeAdCell: UITableViewCell, MPNativeAdRendering {

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

1 个答案:

答案 0 :(得分:2)

如果您使用的是xib UITableviewcell,则必须使用此方法将UITableviewcell注册到原生广告

static func nibForAd() - > UINib! {

让adscell:UINib = UINib(nibName:“adsCustomTableViewCell”,包:nil)

返回adscell

}

我的原生adsCustomTableViewCell广告实施:

扩展adsCustomTableViewCell:MPNativeAdRendering {

func nativeMainTextLabel() -> UILabel! {


    return self.descriptionLabel

}
func nativeIconImageView() -> UIImageView! {

    return self.adsImage
}
func nativeTitleTextLabel() -> UILabel! {

    return self.titleLabel

}

func nativeCallToActionTextLabel() -> UILabel! {

    return self.LearnMoreLabel
}

static func nibForAd() -> UINib! {
    let  adscell:UINib = UINib(nibName: "adsCustomTableViewCell", bundle: nil)
    return  adscell
}

}