Imagine launching your app: a banner jumps down, shifting content. Or, on a tablet, it becomes a thin strip—revenue drops. Users complain about poor UX, and the App Store rejects the build due to home indicator overlap. These problems arise from incorrect banner integration. We've solved them in dozens of projects and developed an approach that guarantees stable performance without jumps or crashes. Adaptive AdMob banners are the modern standard. According to Google's documentation, properly reserving banner space eliminates content shifting and improves user experience. In this article, we'll cover how to choose the right format, reserve space, and avoid common mistakes. We'll show code for iOS and Android. We'll also compare popular banner formats and discuss why adaptive banners bring in 1.5x more revenue than fixed 320×50 banners. On average, monthly savings on rework after proper integration amount to $300–$500.
Problems We Solve
- Content jump: after the banner loads, content shifts, causing accidental taps and poor UX.
- Wrong size: fixed 320×50 banners occupy only 70–80% of screen width, leaving empty margins.
- Ignoring safe area: the banner overlaps the home indicator on iPhone—Apple rejects the app.
- No background pause: without lifecycle handling, crashes (e.g., IllegalStateException on Android) occur.
- Insufficient testing: banners may be cropped or display incorrectly on certain devices.
How to Prevent Content Jumping?
The primary cause of content jumping is the absence of reserved space under the banner. We use the Anchored Adaptive Banner from Google AdMob. The solution: in the layout, set a container with a fixed height (or constraint) but make it invisible. After the banner loads (onAdLoaded), dynamically set its height and make it visible. Code examples below.
Android (Kotlin)
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adContainerWidth) adView.setAdSize(adSize) adView.adUnitId = "/YOUR_AD_UNIT_ID" adView.adListener = object : AdListener() { override fun onAdLoaded() { val height = adView.adSize.getHeightInPixels(context) adView.layoutParams.height = height adView.visibility = View.VISIBLE } } iOS (Swift)
let viewWidth = view.frame.inset(by: view.safeAreaInsets).width let adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSize(forWidth: viewWidth) bannerView.adSize = adaptiveSize bannerView.adUnitID = "/YOUR_AD_UNIT_ID" bannerView.translatesAutoresizingMaskIntoConstraints = false let heightConstraint = bannerView.heightAnchor.constraint(equalToConstant: 0) NSLayoutConstraint.activate([heightConstraint]) // After onAdLoaded: heightConstraint.constant = bannerView.adSize.size.height UIView.animate(withDuration: 0.3) { self.view.layoutIfNeeded() } Why Adaptive Banners Generate More Revenue?
Fixed 320×50 banners are relics from the iPhone 4 era. On modern screens, they occupy only 70–80% of the width, leaving empty margins. Adaptive banners (Anchored Adaptive) stretch to the full container width, with heights automatically ranging from 50 to 90 dp. According to Google AdMob, switching to adaptive banners increases eCPM by an average of 25–30%. We confirm this in practice: in 90% of projects, revenue increased after the switch. Adaptive banners yield 1.5x more revenue than fixed ones. For comparison:
Banner Type Comparison
| Banner Type | Sizes | Advantages | Disadvantages |
|---|---|---|---|
| Fixed (BANNER) | 320×50, 728×90 | Simple integration | Outdated, poor on tablets, low eCPM |
| Adaptive (Anchored Adaptive) | Auto: 50–90 dp | Efficient use of space, high eCPM | Requires programmatic height calculation |
| Smart Banner | Depends on screen | Automatically adapts | Deprecated since version 19.x |
How to Properly Manage Banner Lifecycle?
Banners must handle the app going to background and returning correctly.
| Event | Android | iOS |
|---|---|---|
| App in background | onPause() → adView.pause() | applicationWillResignActive → bannerView.pause() |
| App active | onResume() → adView.resume() | applicationDidBecomeActive → bannerView.resume() |
| Destroy | onDestroy() → adView.destroy() | deinit → bannerView.removeFromSuperview() |
Auto-refresh is set to 60 seconds by default (configurable only in the AdMob console). For a different frequency, use a manual timer with pause/resume.
How to Correctly Position a Sticky Banner?
Sticky banners attach to the bottom edge. On iOS, always respect safe area insets:
bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true On Android, use OnApplyWindowInsetsListener to get the bottom inset. If the app has a tab bar, place the banner above it but not below the safe area—this is a requirement of the App Store Review Guidelines.
Process of Work
- Analysis: study mockups, identify banner placements.
- Design: choose sizes, reserve space in layout.
- Integration: embed SDK, code the display.
- Testing: test on 5+ real devices of different sizes.
- Deployment: upload to the store with recommendations for the AdMob console.
Get a consultation on banner integration—we'll help you set up monetization correctly.
What's Included in Banner Integration Work?
- Analysis of mockups and selection of the optimal banner format (adaptive, fixed, sticky).
- Integration of AdMob SDK with space reservation and lifecycle handling.
- Configuration of targeting and refresh rate in the AdMob console.
- Testing on devices of different sizes and OS versions.
- Documentation for integration and console recommendations.
- Training the client's team on AdMob.
- Support for 2 weeks after deployment.
Timelines and Results
Banner integration takes 1 to 2 days, including testing. We guarantee stable operation without jumps or crashes. The average revenue increase after switching to adaptive banners is 25–30%. With a traffic of 500,000 impressions per month, additional revenue ranges from $2,000 to $5,000. Contact us via the feedback form for a project assessment.
Common Mistakes (and How to Avoid Them)
- Hardcoded height—always use getHeightInPixels / adSize.height.
- No space reservation—content jumps, ratings drop.
- Ignoring safe area—rejection at review.
- Outdated AdMob version—keep the SDK up to date.
With over 5 years of experience and 100+ successful app monetization projects, we have refined our integration process. Our team delivers stable ad placements that maximize eCPM. For iOS banner integration and Android banner integration, we follow best practices from AdMob to ensure high performance. Order banner integration today and get stable monetization without headaches.







