This placement requires iOS 13 and above.
Copy var placement = AATSDK.createAsyncNativeAdPlacement(name: "<PLACEMENT_NAME>", supportsMainImage: true)
Copy placement.delegate = self
Copy Task {
guard let nativeAd = await placement.reload() else {
return
}
// use the nativeAd data
}
Retrieve the Native Assets
Copy class ViewController: UIViewController {
// Create the placement
var placement = AATSDK.createAsyncNativeAdPlacement(name: "<PLACEMENT_NAME>", supportsMainImage: true)
// Outlets
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var adTitleLabel: UILabel!
@IBOutlet weak var descriptionLabel: UILabel!
@IBOutlet weak var adIconImageView: UIImageView!
@IBOutlet weak var adMainImageView: UIImageView!
@IBOutlet weak var advertiserLabel: UILabel!
@IBOutlet weak var adCTALabel: UILabel!
@IBOutlet weak var ratingLabel: UILabel!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// [IMPORTANT] Notify AATKit about the currently active view controller
AATSDK.controllerViewDidAppear(controller: self)
// Set placement delegate to listen to the callbacks
placement.delegate = self
// Request a native ad
Task {
guard let nativeAd = await placement.reload() else {
return
}
// Assign the tracking view
nativeAd.attachToView(containerView,
mainImageView: adMainImageView,
iconView: adIconImageView,
ctaView: adCTALabel)
// Report Ad Space
placement.reportAdSpace()
// Ad Title
adTitleLabel.text = nativeAd.title
// Ad Body
descriptionLabel.text = nativeAd.adDescription ?? "-"
// Ad Icon
loadImage(for: adIconImageView, imageUrlString: nativeAd.iconUrl)
// Ad Main Image
loadImage(for: adMainImageView, imageUrlString: nativeAd.imageUrl)
// Ad Advertiser
advertiserLabel.text = nativeAd.advertiser ?? "-"
// Ad CTA Title
adCTALabel.text = nativeAd.callToAction ?? "-"
// Ad Rating
if let rating = nativeAd.rating {
self.ratingLabel.text = "\(rating.value)/\(rating.scale)"
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// [IMPORTANT] Remove the currently active view controller
AATSDK.controllerViewWillDisappear()
}
}
// MARK: - AATNativePlacementDelegate
extension ViewController: AATAsyncNativePlacementDelegate {
func aatPauseForAd(placement: AATPlacement) {
// Ad has been displayed on the screen
}
func aatResumeAfterAd(placement: AATPlacement) {
// Back to the app after clicking on the ad
}
}
// MARK: - Downloading Images
extension ViewController {
func loadImage(for imageView: UIImageView, imageUrlString: String?) {
guard let urlString = imageUrlString,
let url = URL(string: urlString) else {
return
}
DispatchQueue.global().async {
guard let data = try? Data(contentsOf: url),
let image = UIImage(data: data) else {
return
}
DispatchQueue.main.async {
imageView.image = image
}
}
}
}