Native ads are presented to the user via native Android UI components. This enables you to layout ad assets to match the look and feel of your app. When a placement loads a native ad, you can retrieve the native ad assets wrapped in an instance of type NativeAdData.
val placement = AATKit.createNativeAdPlacement("<PLACEMENT_NAME>", supportsMainImage)
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.
Listen to Callbacks
Through the use of NativePlacementListener, you can listen to the different placement callbacks.
placement.setListener(this);
placement.listener =this
Request Ad
To request a native ad, use the following API:
placement.reload();
placement.reload()
Retrieve the Native Ad
After receiving a native ad through the onHaveAd callback, you can retrieve the native ad data of type NativeAdData using the following API:
NativeAdData nativeAd =placement.getNativeAd();
val nativeAd = placement.getNativeAd()
Report adspace
For native placements, it is necessary to report ad spaces manually. Every time you want to display an native ad, call:
placement.countAdSpace();
placement.countAdSpace()
Ad Info
After loading a native ad, you can access the loaded ad information by accessing the adInfo property of the loaded nativeAd:
AdInfo adInfo =nativeAd.getAdInfo();
val info = nativeAd.adInfo
Retrieve the Native Assets
These so-called native assets can assemble your native ad, according to your app's look and feel. The following image shows an example native ad and the corresponding AATKit methods for retrieving each asset.
// Ad TitletitleView.setText(nativeAd.getTitle());// Ad IconString iconImageUrl =nativeAd.getIconUrl(); // You should download the icon image using this URL// Ad Main ImageString mainImageURL =nativeAd.getImageUrl(); // You should download the main image using this URL// Ad BodydescriptionView.setText(nativeAd.getDescription());// Ad IdentifieradvertiserView.setText(nativeAd.getAdvertiser());// Ad CTA TitlectaView.setText(nativeAd.getCallToAction());// Ad RatingNativeAd.NativeAdRating rating =nativeAd.getRating();if (rating !=null) {String ratingText =rating.getValue() +"/"+rating.getScale();ratingView.setText(ratingText);}
// Ad TitletitleView.text = nativeAd.title// Ad Iconval iconImageUrl = nativeAd.iconUrl // You should download the icon image using this URL// Ad Main Imageval mainImageURL = nativeAd.imageUrl // You should download the main image using this URL// Ad BodydescriptionView.text = nativeAd.description// Ad IdentifieradvertiserView.text = nativeAd.advertiser// Ad CTA TitlectaView.text = nativeAd.callToAction// Ad Ratingval rating = nativeAd.ratingif (rating !=null) {val ratingText ="${rating.value}/${rating.scale}" ratingView.text = ratingText}
If the ad network provides a rating for the retrieved native ad, NativeAdData will provide it as an NativeAdRating instance.
Track Native Ad
A tracking view is a ViewGroup instance that is used by the ad network to track impressions and clicks. This means the instance is checked on runtime whether it's visible on the screen and an impression is counted accordingly. A click is also registered on the instance provided. Keep in mind that the ad networks track impressions based on a few conditions being met. A tracking view has to be visible for at least a few seconds on the screen (usually 1-2 seconds), plus a more significant portion of the ViewGroup instance has to be visible (usually ~50% of the view has to be visible). Tracking an impression and registering clicks is thus completely dependent on a tracking view being assigned to the native ad that has been provided by the AATKit.
To set the tracking view, use the NativeAdData method:
fun attachToLayout(layout: ViewGroup, mainImageView: View?, iconView: View?, ctaView: View?)
layout: The ViewGroup that will be used to track impressions and clicks.
Also, you must remove the tracking view from the native ad, when the native ad isn't needed anymore or is replaced.
nativeAd.detachFromLayout();
nativeAd.detachFromLayout()
Complete Code Example
privateNativeAdPlacement nativeAdPlacement =AATKit.createNativeAdPlacement("<PLACEMENT_NAME>",true);@OverrideprotectedvoidonResume() { super.onResume();// [IMPORTANT] Notify AATKit about activity lifecycleAATKit.onActivityResume(this);// Set placement listener to listen to the callbacksnativeAdPlacement.setListener(this);// Request a native adnativeAdPlacement.reload();}@OverrideprotectedvoidonPause() {// [IMPORTANT] Notify AATKit about activity lifecycleAATKit.onActivityPause(this); super.onPause();}// NativePlacementListener:@OverridepublicvoidonHaveAd(@NonNullPlacement placement) {// Tha placement has loaded a new adNativeAdData nativeAd =nativeAdPlacement.getNativeAd();if (nativeAd ==null) {return; }// Prepare needed viewsViewGroup nativeAdView = (ViewGroup) getLayoutInflater().inflate(R.layout.your_native_ad_layout,null);ImageView mainImageView =nativeAdView.findViewById(R.id.mainImageView);TextView titleView =nativeAdView.findViewById(R.id.titleView);ImageView iconView =nativeAdView.findViewById(R.id.iconView);TextView descriptionView =nativeAdView.findViewById(R.id.adDescriptionView);TextView ctaView =nativeAdView.findViewById(R.id.CTA_view);TextView advertiserView =nativeAdView.findViewById(R.id.advertiser_textView);// Report Ad SpacenativeAdPlacement.countAdSpace();// Ad TitletitleView.setText(nativeAd.getTitle());// Ad IconloadImage(iconView,nativeAd.getIconUrl());// Ad Main ImageloadImage(mainImageView,nativeAd.getImageUrl());// Ad BodydescriptionView.setText(nativeAd.getDescription());// Ad IdentifieradvertiserView.setText(nativeAd.getAdvertiser());// Ad CTA TitlectaView.setText(nativeAd.getCallToAction());// Set the tracking viewnativeAd.attachToLayout(nativeAdView, mainImageView, iconView, ctaView);// TODO: Present prepared ad on screen}@OverridepublicvoidonNoAd(@NonNullPlacement placement) {// The placement could not load a new ad}@OverridepublicvoidonPauseForAd(@NonNullPlacement placement) {// App is paused after native ad got clicked}@OverridepublicvoidonResumeAfterAd(@NonNullPlacement placement) {// Back to the app after clicking on the ad}// Image downloading logicprivatevoidloadImage(ImageView imageView,String imageUrlString) {if (imageUrlString ==null) {return; }Thread downloadThread =newThread(() -> {finalBitmap bitmap = loadBitmap(imageUrlString);if (bitmap !=null) {Handler h =new Handler(Looper.getMainLooper());h.post(() ->imageView.setImageBitmap(bitmap)); } else {//failed } });downloadThread.start();}privatestaticBitmaploadBitmap(@NonNullString url) {Bitmap bitmap;try {InputStream in =newURL(url).openStream(); bitmap =BitmapFactory.decodeStream(in); } catch (Exception t) { bitmap =null;//failed to decode bitmap }return bitmap;}
privateval nativeAdPlacement: NativeAdPlacement? = AATKit.createNativeAdPlacement("<PLACEMENT_NAME>", true)overridefunonResume() {super.onResume()// [IMPORTANT] Notify AATKit about activity lifecycle AATKit.onActivityResume(this)// Set placement listener to listen to the callbacks nativeAdPlacement?.listener =this// Request a native ad nativeAdPlacement?.reload()}overridefunonPause() {// [IMPORTANT] Notify AATKit about activity lifecycle AATKit.onActivityPause(this)super.onPause()}// NativePlacementListener:overridefunonHaveAd(placement: Placement) {// Tha placement has loaded a new adval nativeAd: NativeAdData= nativeAdPlacement.getNativeAd() ?: return// Prepare needed viewsval nativeAdView: ViewGroup= layoutInflater.inflate(android.R.layout.your_native_ad_layout, null) as ViewGroupval mainImageView: ImageView= nativeAdView.findViewById(android.R.id.mainImageView)val titleView: TextView= nativeAdView.findViewById(android.R.id.titleView)val iconView: ImageView= nativeAdView.findViewById(android.R.id.iconView)val descriptionView: TextView= nativeAdView.findViewById(android.R.id.adDescriptionView)val ctaView: TextView= nativeAdView.findViewById(android.R.id.CTA_view)val advertiserView: TextView= nativeAdView.findViewById(android.R.id.advertiser_textView)// Report Ad Space nativeAdPlacement.countAdSpace()// Ad Title titleView.text = nativeAd.title// Ad IconloadImage(iconView, nativeAd.iconUrl)// Ad Main ImageloadImage(mainImageView, nativeAd.imageUrl)// Ad Body descriptionView.text = nativeAd.description// Ad Identifier advertiserView.text = nativeAd.advertiser// Ad CTA Title ctaView.text = nativeAd.callToAction// Set the tracking view nativeAd.attachToLayout(nativeAdView, mainImageView, iconView, ctaView)// TODO: Present prepared ad on screen}overridefunonNoAd(placement: Placement) {// The placement could not load a new ad}overridefunonPauseForAd(placement: Placement) {// App is paused after native ad got clicked}overridefunonResumeAfterAd(placement: Placement) {// Back to the app after clicking on the ad}// Image downloading logicprivatefunloadImage(imageView: ImageView, imageUrlString: String?) {if (imageUrlString ==null) {return }val downloadThread =Thread {val bitmap: Bitmap? =loadBitmap(imageUrlString)if (bitmap !=null) {val h =Handler(Looper.getMainLooper()) h.post { imageView.setImageBitmap(bitmap) } } else {//failed } } downloadThread.start()}privatefunloadBitmap(url: String): Bitmap? {val bitmap: Bitmap? bitmap =try {val `in`: InputStream=URL(url).openStream() BitmapFactory.decodeStream(`in`) } catch (t: Exception) {null//failed to decode bitmap }return bitmap}