Login
Welcome
Login

Google Ad Manager and AdMob mediation - inRead

  1. Prerequisites
  2. Installation
  3. Defining a Custom Event
  4. Integration
  5. Ad Resizing
  6. Mediation settings

This article shows you how to deliver Teads ads on your application using the AdMob adapter or Google Ad Manager (GAM) Mediation adapter.

Using CocoaPods to have Teads AdMob/GAM mediation plugin will automatically import the Teads inApp SDK framework.

Sample App on GitHub
Teads inApp SDK iOS sample App

Prerequisites

  • Platform: iOS 10+
  • Xcode: 12.1+
  • GoogleMobileAdsSDK: >=9.0.0

Installation

Before installing the Teads AdMob adapter, you will need to integrate GoogleMobileAds SDK into your application.

CocoaPods

If your project is managing dependencies through CocoaPods, you just need to add this pod in your Podfile.

It will install the Teads adapter along with the Teads inApp SDK.

  1. Add Pod named TeadsAdMobAdapter in your Podfile:
pod 'TeadsAdMobAdapter', '~> 5.0'
  1. Run the following to install the adapter in your project.
$ pod install --repo-update to install
  1. Follow the Defining a Custom Event step below to finish the integration.

Swift Package Manager

SPM is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.

Installing from Xcode

  1. Add a package by selecting FileAdd Packages… in Xcode’s menu bar.
  2. Search for the Teads iOS SDK using the repo's URL:
https://github.com/teads/TeadsSDK-iOS
  1. Next, set the Dependency Rule to be Up to Next Major Version and keep 5.0.0 < 6.0.0.
  2. Choose the Teads product that you want to be installed in your app: TeadsAdMobAdapter
  3. Follow the Defining a Custom Event step below to finish the integration.

Alternatively, add Teads to your Package.swift manifest

  1. Add it to the dependencies of your Package.swift:
dependencies: [
    .package(url: "https://github.com/teads/TeadsSDK-iOS", .upToNextMajor(from: "5.0.0"))
]
  1. in any target that depends on a Teads product, add it to the dependencies array of that target:
.target(
  name: "MyTargetName",
  dependencies: [
    .product(name: "TeadsAdMobAdapter", package: "Teads"),
  ]
),
  1. Follow the Defining a Custom Event step below to finish the integration.

Defining a Custom Event

In order to display a Teads ad using AdMob or Google Ad Manager mediation,
you need to create a custom event.

See this article for more test PIDs serving different creative formats.

Admob

Follow the custom event documentation on the AdMob dashboard using the below values.

Name Value
Class Name TeadsAdMobAdapter.GADMAdapterTeadsBanner
Parameter Teads placement ID (PID)

Follow the custom event documentation on Google Ad Manager using the below values.

Name Value
Class Name TeadsAdMobAdapter.GADMAdapterTeadsBanner
Parameter Teads placement ID (PID)

Integration

Note

Check out the sample ViewController from our iOS GitHub repository

You have the ability to pass extra parameters in order to customize third-party ad network settings. For Teads, you need to pass TeadsAdapterSettings.

  • Create an instance of TeadsAdapterSettings and add the settings you want.
  • Register it into GADRequest calling register
import TeadsAdMobAdapter

// 1. Create AdMob view and add it to hierarchy
admobAdView = GAMBannerView(adSize: GADAdSizeFluid)
slotView.addSubview(admobAdView)

admobAdView.translatesAutoresizingMaskIntoConstraints = false
admobAdView.centerXAnchor.constraint(equalTo: slotView.centerXAnchor).isActive = true
admobAdView.centerYAnchor.constraint(equalTo: slotView.centerYAnchor).isActive = true

// 2. Attach Delegate (will include Teads events)
admobAdView.adUnitID = pid // Replace with your adunit
admobAdView.rootViewController = self
admobAdView.delegate = self

// 3. Load a new ad (this will call AdMob and Teads afterward)
let adSettings = TeadsAdapterSettings { (settings) in
    settings.pageUrl("https://example.com/article1")
}

let request = GADRequest()
// 4. Register adSettings to the request
request.register(adSettings)

admobAdView.load(request)

Ad Resizing

⚠️ Warning

To resize the GAMBannerView you must use GAMBannerView.resize() otherwise GAM will perform a new request each time you manipulate the view frame or constraints, this is stated on the Google for Developers official documentationresize:)

Known issue: the ad is flickering

  1. GoogleMobileAds ask TeadsAdapter to perform a new request
  2. ad is loading
  3. once ad is rendering, the ad ask for new ratio to better fit for the creative
  4. this ratio is beeing applied using frame/constraints update which is not allowed by GoogleMobileAds
  5. this UI move is not permitted by GoogleMobileAds, go back to step 1

The code below must be implemented to enable the resizing of the mediated ad slot making possible the rendering of square and vertical creatives.

Register to ad resizing through TeadsAdapterSettings by providing your delegate class and the GAMBannerView that need to be resized.

var admobAdView: GAMBannerView!
@IBOutlet weak var slotView: UIView!
@IBOutlet weak var slotViewHeightConstraint: NSLayoutConstraint! // set to 0 on InterfaceBuilder

let adSettings = TeadsAdapterSettings { settings in
    settings.registerAdView(admobAdView, delegate: self)
}

Simply conform to the Teads delegate TeadsMediatedAdViewDelegate and implements the didUpdateRatio function.

You can instantiate a new listener as below, the listener needs to be a class member field or strong referenced somewhere,
we keep internally a weak reference to it, so you are responsible to retain it and destroy it when you don't need it anymore:

func didUpdateRatio(_ adView: UIView, adRatio: TeadsAdRatio) {
    let height = adRatio.calculateHeight(for: slotView.frame.width) // call calculateHeight
    slotViewHeightConstraint.constant = height //update NSLayoutConstraint of the slot
    admobAdView.resize(GADAdSizeFromCGSize(CGSize(width: slotView.frame.width, height: height))) //call resize on GAMBannerView
}

Warning

To resize the GAMBannerView you must use GAMBannerView.resize() otherwise GAM will perform a new request each time you manipulate the view frame or constraints, this is stated on the Google for Developers official documentationresize:)

Mediation settings

Find the full settings list here

Did you find it helpful? Yes No

Send feedback
Sorry we couldn't be helpful. Help us improve this article with your feedback.