Implementing native advertising in a mobile application

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Implementing native advertising in a mobile application
Medium
~2-3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Native Ad Implementation in Mobile Application

Native ad is not "ad that doesn't look like ad." Google and Apple require explicit marking ("Ad", "Ad", "Sponsored"), and violating this leads to app rejection. Native ad is advertisement that fits design visually, but honestly identifies itself. CTR of properly implemented native ad in feed — 2–4 times higher than banner.

Where Implementation Most Often Breaks

Wrong registerView.

AdMob requires registering all clickable elements in NativeAdView. If not calling nativeAdView.mediaView = ... and not passing all view components, clicks won't be tracked:

val nativeAdView = inflater.inflate(R.layout.native_ad_layout, null) as NativeAdView
nativeAdView.mediaView = nativeAdView.findViewById(R.id.ad_media)
nativeAdView.headlineView = nativeAdView.findViewById(R.id.ad_headline)
nativeAdView.bodyView = nativeAdView.findViewById(R.id.ad_body)
nativeAdView.callToActionView = nativeAdView.findViewById(R.id.ad_call_to_action)
nativeAdView.iconView = nativeAdView.findViewById(R.id.ad_icon)
// After assigning all views — bind ad
nativeAdView.setNativeAd(nativeAd)

Forgotten nativeAdView.setNativeAd(nativeAd) at end — ad doesn't show at all. No error in logcat, just empty layout.

Reuse in RecyclerView.

On scroll cells with native ads reuse. If not calling previousNativeAd.destroy() before binding new ad — old NativeAd continues holding resources. On long feeds with native ads every 5–10 positions this shows as ~15–20 MB memory growth per session.

override fun onViewRecycled(holder: NativeAdViewHolder) {
    holder.nativeAdView.setNativeAd(null) // unbinds previous NativeAd
    // or save reference and call nativeAd.destroy()
}

On iOS similar problem: GADNativeAd must explicitly null in cell's prepareForReuse().

Templates vs Custom Design

AdMob offers GADNativeAdView (iOS) and NativeAdView (Android) as containers with ready-made click tracking logic. Must layout inside these containers — can't just overlay your views and expect clicks to count.

Design template — free within platform guidelines. Restrictions: advertiser logo/icon must be visible, "Ad" marking mandatory, CTA button must be clickable (not just text).

Google forbids native ads visually indistinguishable from editorial content — meaning without marking. Strike for this and app removed from AdMob.

Loading and Caching

Native ads load via AdLoader with forNativeAd(). Can request up to 5 ads at once via withNativeAdOptions(NativeAdOptions.Builder().setRequestMultipleImages(true).build()) — useful for feeds where native inserted at different positions.

Caching ads longer than 1 hour makes no sense — AdMob invalidates them server-side.

val adLoader = AdLoader.Builder(context, AD_UNIT_ID)
    .forNativeAd { nativeAd ->
        nativeAdsList.add(nativeAd)
        if (!adLoader.isLoading && nativeAdsList.size == requestCount) {
            insertAdsIntoList()
        }
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(error: LoadAdError) {
            // log, don't show user
        }
    })
    .build()
adLoader.loadAds(AdRequest.Builder().build(), requestCount)

Timelines for native ad implementation: template in one place — 1–2 days, custom design with feed/RecyclerView integration — 2–3 days. Cost calculated after discussing design and placement points.