Asynchronous native banner placements wrap the native banner placement providing the same functionality but supporting Swift Concurrency for requesting ads.
var placement = AATSDK.createAsyncNativeAdPlacement(name:"<PLACEMENT_NAME>", supportsMainImage:true)
The argument supportsMainImage determines if the placement will use the main image asset. Remember that if the main image is used, it must be displayed.
classViewController:UIViewController {// Create the placementvar placement = AATSDK.createAsyncNativeAdPlacement(name:"<PLACEMENT_NAME>", supportsMainImage:true)// Outlets@IBOutletweakvar containerView: UIView!@IBOutletweakvar adTitleLabel: UILabel!@IBOutletweakvar descriptionLabel: UILabel!@IBOutletweakvar adIconImageView: UIImageView!@IBOutletweakvar adMainImageView: UIImageView!@IBOutletweakvar advertiserLabel: UILabel!@IBOutletweakvar adCTALabel: UILabel!@IBOutletweakvar ratingLabel: UILabel!overridefuncviewDidAppear(_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 adTask {guardlet 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 IconloadImage(for: adIconImageView, imageUrlString: nativeAd.iconUrl)// Ad Main ImageloadImage(for: adMainImageView, imageUrlString: nativeAd.imageUrl)// Ad Advertiser advertiserLabel.text= nativeAd.advertiser ??"-"// Ad CTA Title adCTALabel.text= nativeAd.callToAction ??"-"// Ad Ratingiflet rating = nativeAd.rating { self.ratingLabel.text="\(rating.value)/\(rating.scale)" } } }overridefuncviewWillDisappear(_animated: Bool) { super.viewWillDisappear(animated)// [IMPORTANT] Remove the currently active view controller AATSDK.controllerViewWillDisappear() }}// MARK: - AATNativePlacementDelegateextensionViewController:AATAsyncNativePlacementDelegate {funcaatPauseForAd(placement: AATPlacement) {// Ad has been displayed on the screen }funcaatResumeAfterAd(placement: AATPlacement) {// Back to the app after clicking on the ad }}// MARK: - Downloading ImagesextensionViewController {funcloadImage(forimageView: UIImageView, imageUrlString: String?) {guardlet urlString = imageUrlString,let url =URL(string: urlString)else {return } DispatchQueue.global().async {guardlet data =try?Data(contentsOf: url),let image =UIImage(data: data)else {return } DispatchQueue.main.async { imageView.image= image } } }}