Swift - Mopub 原生广告已成功加载,但未显示在视图中
Swift - Mopub Native Ad loaded successfully but it's not displaying on view
我正在尝试在 swift 中为我的应用程序手动实施 MoPub 的原生广告。
我能够成功加载它
Loan Calculator[4217:1022703] MOPUB: Successfully loaded native ad.
我在情节提要中创建了一个视图并且它已连接
@IBOutlet var NativeAdView: UIView!
由于 MoPub 关于此的文档是用 Objective C 编写的,我必须将所有内容翻译成 swift。这是我加载 viewDidLoad() 下的原生广告的代码。
let settings = MPStaticNativeAdRendererSettings()
settings.renderingViewClass = CalculatorNativeAdView.self
let config = MPStaticNativeAdRenderer.rendererConfiguration(with: settings)
let adRequest = MPNativeAdRequest(adUnitIdentifier: MoPubTestID, rendererConfigurations: [config!])
let targeting = MPNativeAdRequestTargeting()
targeting.desiredAssets = Set<AnyHashable>([kAdTitleKey, kAdTextKey, kAdCTATextKey, kAdIconImageKey, kAdMainImageKey, kAdStarRatingKey])
adRequest?.start(completionHandler: { request, response, error in
if error != nil {
print(error.debugDescription)
} else {
let nativeAd = response
nativeAd?.delegate = self
let nativeAdViewCon: UIView? = try! nativeAd?.retrieveAdView()
nativeAdViewCon?.frame = self.NativeAdView.bounds
print(nativeAdViewCon?.frame)
if let aView = nativeAdViewCon {
self.NativeAdView.addSubview(aView)
}
}
})
CalculatorNativeAdView 已连接到我为此原生广告创建的 .xib。
import UIKit
import MoPub
class CalculatorNativeAdView: UIView, MPNativeAdRendering {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var mainTextLabel: UILabel!
@IBOutlet var mainImageView: UIImageView!
@IBOutlet var iconImageView: UIImageView!
@IBOutlet var callToActionLabel: UILabel!
@IBOutlet var privacyInformationIconImageView: UIImageView!
override func layoutSubviews() {
super.layoutSubviews()
// layout your views
}
func nativeMainTextLabel() -> UILabel? {
return mainTextLabel
}
func nativeTitleTextLabel() -> UILabel? {
return titleLabel
}
func nativeCallToActionTextLabel() -> UILabel? {
return callToActionLabel
}
func nativeIconImageView() -> UIImageView? {
return iconImageView
}
func nativeMainImageView() -> UIImageView? {
return mainImageView
}
func nativePrivacyInformationIconImageView() -> UIImageView? {
return privacyInformationIconImageView
}
}
我将 MPNativeAdDelegate 添加到 viewController 并添加了 viewControllerForPresentingModalView()
func viewControllerForPresentingModalView() -> UIViewController! {
return self
}
NativeAdView 有一个框架,所以我认为这不是问题所在
Optional((0.0, 0.0, 260.0, 260.0))
广告应显示在此处显示的橙色框中
我究竟做错了什么?我错过了什么吗?
link 至 MoPub 的原生广告文档:https://developers.mopub.com/docs/ios/native/
--更新--
我做了一些试验,确认该视图确实已添加到我的 NativeAdView 中。我把aView的背景颜色改成了蓝色。
aView.backgroundColor = UIColor.blue
这是结果。
广告仍未显示。打算对 .xib 文件做一些研究,并确保我做的是正确的。
-- 更新--
打印响应的属性给了我这个。
Optional([AnyHashable("privacyiconuiimage"): <UIImage: 0x283eadb90>, {20, 20}, AnyHashable("ctatext"): Go, AnyHashable("title"): MoPub, AnyHashable("iconimage"): https://d30x8mtr3hjnzo.cloudfront.net/creatives/6591163c525f4720b99abf831ca247f6, AnyHa
看来我得到的信息是正确的。
您可以在将子视图添加到橙色框后尝试 layoutSubviews() 方法,在这个 link 中有对该方法的更好解释以及可能对您有帮助的其他方法 https://medium.com/@abhimuralidharan/ios-swift-setneedslayout-vs-layoutifneeded-vs-layoutsubviews-5a2b486da31c
我发现我错过了什么。在查看 MPNativeAdRendering 协议后,我发现我需要在我的 CalculatorNativeAdView class 中添加 nibForAd()。
static func nibForAd() -> UINib! {
let adscell:UINib = UINib(nibName: "CalculatorNativeAdView", bundle: nil)
return adscell
}
广告出现但没有图标图像和主图像。但我认为这需要一个不同的问题。
我正在尝试在 swift 中为我的应用程序手动实施 MoPub 的原生广告。
我能够成功加载它
Loan Calculator[4217:1022703] MOPUB: Successfully loaded native ad.
我在情节提要中创建了一个视图并且它已连接
@IBOutlet var NativeAdView: UIView!
由于 MoPub 关于此的文档是用 Objective C 编写的,我必须将所有内容翻译成 swift。这是我加载 viewDidLoad() 下的原生广告的代码。
let settings = MPStaticNativeAdRendererSettings()
settings.renderingViewClass = CalculatorNativeAdView.self
let config = MPStaticNativeAdRenderer.rendererConfiguration(with: settings)
let adRequest = MPNativeAdRequest(adUnitIdentifier: MoPubTestID, rendererConfigurations: [config!])
let targeting = MPNativeAdRequestTargeting()
targeting.desiredAssets = Set<AnyHashable>([kAdTitleKey, kAdTextKey, kAdCTATextKey, kAdIconImageKey, kAdMainImageKey, kAdStarRatingKey])
adRequest?.start(completionHandler: { request, response, error in
if error != nil {
print(error.debugDescription)
} else {
let nativeAd = response
nativeAd?.delegate = self
let nativeAdViewCon: UIView? = try! nativeAd?.retrieveAdView()
nativeAdViewCon?.frame = self.NativeAdView.bounds
print(nativeAdViewCon?.frame)
if let aView = nativeAdViewCon {
self.NativeAdView.addSubview(aView)
}
}
})
CalculatorNativeAdView 已连接到我为此原生广告创建的 .xib。
import UIKit
import MoPub
class CalculatorNativeAdView: UIView, MPNativeAdRendering {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var mainTextLabel: UILabel!
@IBOutlet var mainImageView: UIImageView!
@IBOutlet var iconImageView: UIImageView!
@IBOutlet var callToActionLabel: UILabel!
@IBOutlet var privacyInformationIconImageView: UIImageView!
override func layoutSubviews() {
super.layoutSubviews()
// layout your views
}
func nativeMainTextLabel() -> UILabel? {
return mainTextLabel
}
func nativeTitleTextLabel() -> UILabel? {
return titleLabel
}
func nativeCallToActionTextLabel() -> UILabel? {
return callToActionLabel
}
func nativeIconImageView() -> UIImageView? {
return iconImageView
}
func nativeMainImageView() -> UIImageView? {
return mainImageView
}
func nativePrivacyInformationIconImageView() -> UIImageView? {
return privacyInformationIconImageView
}
}
我将 MPNativeAdDelegate 添加到 viewController 并添加了 viewControllerForPresentingModalView()
func viewControllerForPresentingModalView() -> UIViewController! {
return self
}
NativeAdView 有一个框架,所以我认为这不是问题所在
Optional((0.0, 0.0, 260.0, 260.0))
广告应显示在此处显示的橙色框中
link 至 MoPub 的原生广告文档:https://developers.mopub.com/docs/ios/native/
--更新--
我做了一些试验,确认该视图确实已添加到我的 NativeAdView 中。我把aView的背景颜色改成了蓝色。
aView.backgroundColor = UIColor.blue
这是结果。
广告仍未显示。打算对 .xib 文件做一些研究,并确保我做的是正确的。
-- 更新--
打印响应的属性给了我这个。
Optional([AnyHashable("privacyiconuiimage"): <UIImage: 0x283eadb90>, {20, 20}, AnyHashable("ctatext"): Go, AnyHashable("title"): MoPub, AnyHashable("iconimage"): https://d30x8mtr3hjnzo.cloudfront.net/creatives/6591163c525f4720b99abf831ca247f6, AnyHa
看来我得到的信息是正确的。
您可以在将子视图添加到橙色框后尝试 layoutSubviews() 方法,在这个 link 中有对该方法的更好解释以及可能对您有帮助的其他方法 https://medium.com/@abhimuralidharan/ios-swift-setneedslayout-vs-layoutifneeded-vs-layoutsubviews-5a2b486da31c
我发现我错过了什么。在查看 MPNativeAdRendering 协议后,我发现我需要在我的 CalculatorNativeAdView class 中添加 nibForAd()。
static func nibForAd() -> UINib! {
let adscell:UINib = UINib(nibName: "CalculatorNativeAdView", bundle: nil)
return adscell
}
广告出现但没有图标图像和主图像。但我认为这需要一个不同的问题。