You can use Prebid SDK to monetize your app with a custom ad server or even without it. Use the Transport API
to obtain the targeting keywords for following usage with the custom ad server. Use the Rendering API
to display the winning bid without primary ad server and its SDK.
The default ad server for Prebid’s Mobile SDK is GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice.
In this mode, the publisher will be responsible for the following actions:
This approach is avaliable for the following ad formats:
BannerAdUnit
VideoAdUnit
InterstitialAdUnit
VideoInterstitialAdUnit
RewardedVideoAdUnit
NativeRequest
The basic integration steps for these ad units you can find at the page for integration using Original API. The diference is that you should use the fetchDemand
function with following signature:
dynamic public func fetchDemand(
completion: @escaping(_ result: ResultCode,
_ kvResultDict: [String : String]?) -> Void)
Examples:
func loadBanner() {
//adUnit is BannerAdUnit type
adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in
self?.adServerRequest.customTargeting = targetingDict
self?.adServerBanner.load(self?.adServerRequest)
}
}
func loadRewardedVideo() {
let adUnit = RewardedVideoAdUnit(configId: "1001-1")
adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in
//Publisher should provide support for converting keys into format of 3rd party ad server and loading ads
let keywords = convertDictToAdServerKeywords(dict: targetingDict)
AdServerLoadAds.loadAd(withAdUnitID: "46d2ebb3ccd340b38580b5d3581c6434", keywords: keywords)
}
}
The Rendering API integration and usage are similar to any other Ad SDK. In this case, Prebid SDK sends the bid requests to the Prebid Server and renders the winning bid.
Integration example:
// 1. Create an Ad View
let banner = BannerView(frame: CGRect(origin: .zero, size: adSize),
configID: CONFIG_ID,
adSize: adSize)
banner.delegate = self
// 2. Load an Ad
banner.loadAd()
Initialize the BannerAdView
with properties:
frame
- the frame rectangle for the viewconfigID
- an ID of the Stored Impression on the Prebid Serversize
- the size of the ad unit which will be used in the bid request.Call the method loadAd()
which will:
For Banner Video you also need to specify the ad format:
banner.adFormat = .video
Integration example:
// 1. Create an Interstitial Ad Unit
interstitial = InterstitialRenderingAdUnit(configID: CONFIG_ID,
minSizePercentage: CGSize(width: 30, height: 30))
interstitial.delegate = self
// 2. Load an Ad
interstitial.loadAd()
// .....
// 3. Show An Ad
if interstitial.isReady {
interstitial.show(from: self)
}
The default ad format for interstitial is .banner. In order to make a multiformat bid request
, set the respective values into the adFormats
property.
// Make bid request for video ad
adUnit?.adFormats = [.video]
// Make bid request for both video and banner ads
adUnit?.adFormats = [.video, .banner]
// Make bid request for banner ad (default behaviour)
adUnit?.adFormats = [.banner]
Initialize the Interstitial Ad Unit with properties:
configID
- an ID of Stored Impression on the Prebid ServerminSizePercentage
- specifies the minimum width and height percent an ad may occupy of a device’s real estate.NOTE: minSizePercentage - plays an important role in a bidding process for banner ads. If provided space is not enough demand partners won’t respond with the bids.
Call the method loadAd()
which will make a bid request to Prebid server.
Wait until the ad will be loaded and present it to the user in any suitable time.
// MARK: InterstitialRenderingAdUnitDelegate
func interstitialDidReceiveAd(_ interstitial: InterstitialRenderingAdUnit) {
// Now the ad is ready for display
}
Integration example:
// 1. Create an Ad Unit
rewardedAd = RewardedAdUnit(configID: CONFIG_ID)
rewardedAd.delegate = self
// 2. Load an Ad
rewardedAd.loadAd()
/// .......
// 3. Display the Ad
if rewardedAd.isReady {
rewardedAd.show(from: self)
}
Create the RewardedAdUnit
object with parameter:
configID
- an ID of Stored Impression on the Prebid ServerCall the loadAd()
method which will make a bid request to Prebid server.
Wait until the ad will be loaded and present it to the user in any suitable time.
// MARK: RewardedAdUnitDelegate
func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) {
// Now the ad is ready for display
}