To receive release updates, subscribe to the AppLovin-MAX-SDK-iOS GitHub repository .
Download the Latest iOS SDK
Integrate the AppLovin SDK
The downloaded zip file contains the AppLovinSDK.xcframework
file.
To add the SDK to your application, drag the AppLovinSDK.xcframework
file to your Xcode project.
Ensure that AppLovinSDK.xcframework
is included in the Frameworks, Libraries, and Embedded Content section of your Xcode project target’s settings.
Enable Xcode Flags
You must add the -ObjC
flag in order for you to compile the AppLovin SDK.
To enable the -ObjC
flag, select File > Project Settings , go to Build Settings , search for Other Linker Flags , then click + to add -ObjC
.
Add Frameworks
Link the following frameworks in your project:
AdSupport
AppTrackingTransparency
AudioToolbox
AVFoundation
CoreGraphics
CoreMedia
CoreMotion
CoreTelephony
Foundation
MessageUI
libz
SafariServices
StoreKit
SystemConfiguration
UIKit
WebKit
Enable Ad Review
To enable the MAX Ad Review service, download AppLovinQualityServiceSetup-ios.rb
and move it into your project folder.
Open a terminal window, cd
to your project directory and run:
ruby AppLovinQualityServiceSetup-ios.rb
Add the SDK Key
Select File > Project Settings > Info .
Click on one of the rows of Custom iOS Properties and click + to add a new row.
Set the key of the new row to AppLovinSdkKey
and the value to your SDK key.
You can find your SDK key in the Account > General > Keys section of the AppLovin dashboard.
Initialize the SDK
Add the snippet below into your app delegate’s application:applicationDidFinishLaunching:
method:
#import < AppLovinSDK/AppLovinSDK.h >
@implementation AppDelegate
- ( BOOL ) application : (UIApplication * ) application didFinishLaunchingWithOptions : ( NSDictionary * ) launchOptions
// Set the mediation provider value to @"max" to ensure proper functionality.
[ALSdk shared ]. mediationProvider = @" max " ;
[[ALSdk shared ] initializeSdkWithCompletionHandler : ^ (ALSdkConfiguration * configuration) {
// AppLovin SDK is initialized, start loading ads
class AppDelegate: UIResponder , UIApplicationDelegate
func application ( _ application : UIApplication, didFinishLaunchingWithOptions launchOptions : [UIApplication.LaunchOptionsKey: Any ] ? ) -> Bool
// Set the mediation provider value to "max" to ensure proper functionality.
ALSdk. shared (). mediationProvider = " max "
ALSdk. shared (). initializeSdk { ( configuration : ALSdkConfiguration) in
// AppLovin SDK is initialized, start loading ads
SKAdNetwork
Refer to the SKAdNetwork documentation for integration instructions.
Interstitial Ads
Loading an Interstitial
To load an interstitial ad, instantiate an MAInterstitialAd
object with your ad unit and call loadAd()
.
Implement MAAdDelegate
so you can be notified of when your ad is ready and other ad events.
#import " ExampleViewController.h "
#import < AppLovinSDK/AppLovinSDK.h >
@interface ExampleViewController()<MAAdDelegate>
@property ( nonatomic , strong ) MAInterstitialAd * interstitialAd;
@property ( nonatomic , assign ) NSInteger retryAttempt;
@implementation ExampleViewController
- ( void ) createInterstitialAd
self .interstitialAd = [[MAInterstitialAd alloc ] initWithAdUnitIdentifier : @" «ad-unit-ID» " ];
self . interstitialAd . delegate = self ;
[ self .interstitialAd loadAd ];
#pragma mark - MAAdDelegate Protocol
- ( void ) didLoadAd : (MAAd * ) ad
// Interstitial ad is ready to be shown. '[self.interstitialAd isReady]' will now return 'YES'
- ( void ) didFailToLoadAdForAdUnitIdentifier : ( NSString * ) adUnitIdentifier withError : (MAError * ) error
// Interstitial ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
NSInteger delaySec = pow( 2 , MIN( 6 , self . retryAttempt )) ;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySec * NSEC_PER_SEC), dispatch_get_main_queue(), ^ {
[ self .interstitialAd loadAd ];
- ( void ) didDisplayAd : (MAAd * ) ad {}
- ( void ) didClickAd : (MAAd * ) ad {}
- ( void ) didHideAd : (MAAd * ) ad
// Interstitial ad is hidden. Pre-load the next ad
[ self .interstitialAd loadAd ];
- ( void ) didFailToDisplayAd : (MAAd * ) ad withError : (MAError * ) error
// Interstitial ad failed to display. AppLovin recommends that you load the next ad
[ self .interstitialAd loadAd ];
class ExampleViewController: UIViewController , MAAdDelegate
var interstitialAd: MAInterstitialAd !
func createInterstitialAd ()
interstitialAd = MAInterstitialAd ( adUnitIdentifier : " «ad-unit-ID» " )
interstitialAd. delegate = self
// MARK: MAAdDelegate Protocol
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
func didFailToLoadAd ( forAdUnitIdentifier adUnitIdentifier : String , withError error : MAError )
// Interstitial ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
let delaySec = pow ( 2.0 , min ( 6.0 , retryAttempt ))
DispatchQueue. main . asyncAfter ( deadline : . now () + delaySec ) {
self . interstitialAd . load ()
func didDisplay ( _ ad : MAAd ) {}
func didClick ( _ ad : MAAd ) {}
// Interstitial ad is hidden. Pre-load the next ad
func didFail ( toDisplay ad : MAAd, withError error : MAError )
// Interstitial ad failed to display. AppLovin recommends that you load the next ad
Showing an Interstitial Ad
To show an interstitial ad, call showAd()
on the MAInterstitialAd
object that you created above.
if ( [ self .interstitialAd isReady ] )
[ self .interstitialAd showAd ];
if interstitialAd.isReady
Rewarded Ads
Loading a Rewarded Ad
To load a rewarded ad, retrieve a MARewardedAd
object with your rewarded ad unit and call loadAd()
on it.
Implement MARewardedAdDelegate
so you can be notified of when your ad is ready and other ad events.
#import " ExampleViewController.h "
#import < AppLovinSDK/AppLovinSDK.h >
@interface ExampleViewController()<MARewardedAdDelegate>
@property ( nonatomic , strong ) MARewardedAd * rewardedAd;
@property ( nonatomic , assign ) NSInteger retryAttempt;
@implementation ExampleViewController
self . rewardedAd = [MARewardedAd sharedWithAdUnitIdentifier : @" «ad-unit-ID» " ];
self . rewardedAd . delegate = self ;
[ self .rewardedAd loadAd ];
#pragma mark - MAAdDelegate Protocol
- ( void ) didLoadAd : (MAAd * ) ad
// Rewarded ad is ready to be shown. '[self.rewardedAd isReady]' will now return 'YES'
- ( void ) didFailToLoadAdForAdUnitIdentifier : ( NSString * ) adUnitIdentifier withError : (MAError * ) error
// Rewarded ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
NSInteger delaySec = pow( 2 , MIN( 6 , self . retryAttempt )) ;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySec * NSEC_PER_SEC), dispatch_get_main_queue(), ^ {
[ self .rewardedAd loadAd ];
- ( void ) didDisplayAd : (MAAd * ) ad {}
- ( void ) didClickAd : (MAAd * ) ad {}
- ( void ) didHideAd : (MAAd * ) ad
// Rewarded ad is hidden. Pre-load the next ad
[ self .rewardedAd loadAd ];
- ( void ) didFailToDisplayAd : (MAAd * ) ad withError : (MAError * ) error
// Rewarded ad failed to display. AppLovin recommends that you load the next ad
[ self .rewardedAd loadAd ];
#pragma mark - MARewardedAdDelegate Protocol
- ( void ) didRewardUserForAd : (MAAd * ) ad withReward : (MAReward * ) reward
// Rewarded ad was displayed and user should receive the reward
class ExampleViewController : UIViewController , MARewardedAdDelegate
var rewardedAd: MARewardedAd !
rewardedAd = MARewardedAd. shared ( withAdUnitIdentifier : " «ad-unit-ID» " )
rewardedAd. delegate = self
// MARK: MAAdDelegate Protocol
// Rewarded ad is ready to be shown. '[self.rewardedAd isReady]' will now return 'YES'
func didFailToLoadAd ( forAdUnitIdentifier adUnitIdentifier : String , withError error : MAError )
// Rewarded ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
let delaySec = pow ( 2.0 , min ( 6.0 , retryAttempt ))
DispatchQueue. main . asyncAfter ( deadline : . now () + delaySec ) {
func didDisplay ( _ ad : MAAd ) {}
func didClick ( _ ad : MAAd ) {}
// Rewarded ad is hidden. Pre-load the next ad
func didFail ( toDisplay ad : MAAd, withError error : MAError )
// Rewarded ad failed to display. AppLovin recommends that you load the next ad
// MARK: MARewardedAdDelegate Protocol
func didRewardUser ( for ad : MAAd, with reward : MAReward )
// Rewarded ad was displayed and user should receive the reward
Showing a Rewarded Ad
To show a rewarded ad, call showAd()
on the MARewardedAd
object that you created above.
if ( [ self .rewardedAd isReady ] )
[ self .rewardedAd showAd ];
Banners and MRECs
Loading and Showing Banners and MRECs
To load an ad create a MAAdView
object with your ad unit and call loadAd()
.
To show the ad, add the MAAdView
object as a subview of your view hierarchy.
Implement MAAdViewAdDelegate
so you can be notified of when your ad is ready and other ad events.
#import " ExampleViewController.h "
#import < AppLovinSDK/AppLovinSDK.h >
@interface ExampleViewController()<MAAdViewAdDelegate>
@property ( nonatomic , strong ) MAAdView * adView;
@implementation ExampleViewController
self . adView = [[MAAdView alloc ] initWithAdUnitIdentifier : @" «ad-unit-ID» " ];
self . adView . delegate = self ;
// Banner height on iPhone and iPad is 50 and 90, respectively
CGFloat height = ( UIDevice . currentDevice . userInterfaceIdiom == UIUserInterfaceIdiomPad) ? 90 : 50 ;
// Stretch to the width of the screen for banners to be fully functional
CGFloat width = CGRectGetWidth( UIScreen . mainScreen . bounds ) ;
self . adView . frame = CGRectMake(x, y, width, height) ;
// Set background or background color for banner ads to be fully functional
self . adView . backgroundColor = BACKGROUND_COLOR;
[ self .view addSubview : self .adView ];
#pragma mark - MAAdDelegate Protocol
- ( void ) didLoadAd : (MAAd * ) ad {}
- ( void ) didFailToLoadAdForAdUnitIdentifier : ( NSString * ) adUnitIdentifier withError : (MAError * ) error {}
- ( void ) didClickAd : (MAAd * ) ad {}
- ( void ) didFailToDisplayAd : (MAAd * ) ad withError : (MAError * ) error {}
#pragma mark - MAAdViewAdDelegate Protocol
- ( void ) didExpandAd : (MAAd * ) ad {}
- ( void ) didCollapseAd : (MAAd * ) ad {}
#pragma mark - Deprecated Callbacks
- ( void ) didDisplayAd : (MAAd * ) ad { /* use this for impression tracking */ }
- ( void ) didHideAd : (MAAd * ) ad { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
class ExampleViewController: UIViewController , MAAdViewAdDelegate
adView = MAAdView ( adUnitIdentifier : " «ad-unit-ID» " )
// Banner height on iPhone and iPad is 50 and 90, respectively
let height: CGFloat = (UIDevice. current . userInterfaceIdiom == . pad ) ? 90 : 50
// Stretch to the width of the screen for banners to be fully functional
let width: CGFloat = UIScreen. main . bounds . width
adView. frame = CGRect ( x : x, y : y, width : width, height : height )
// Set background or background color for banner ads to be fully functional
adView. backgroundColor = BACKGROUND_COLOR
// MARK: MAAdDelegate Protocol
func didLoad ( _ ad : MAAd ) {}
func didFailToLoadAd ( forAdUnitIdentifier adUnitIdentifier : String , withError error : MAError ) {}
func didClick ( _ ad : MAAd ) {}
func didFail ( toDisplay ad : MAAd, withError error : MAError ) {}
// MARK: MAAdViewAdDelegate Protocol
func didExpand ( _ ad : MAAd ) {}
func didCollapse ( _ ad : MAAd ) {}
// MARK: Deprecated Callbacks
func didDisplay ( _ ad : MAAd ) { /* use this for impression tracking */ }
func didHide ( _ ad : MAAd ) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
#import " ExampleViewController.h "
#import < AppLovinSDK/AppLovinSDK.h >
@interface ExampleViewController()<MAAdViewAdDelegate>
@property ( nonatomic , strong ) MAAdView * adView;
@implementation ExampleViewController
self . adView = [[MAAdView alloc ] initWithAdUnitIdentifier : @" «ad-unit-ID» " adlanguage : MAAdFormat.mrec ];
self . adView . delegate = self ;
// MREC width and height are 300 and 250 respectively, on iPhone and iPad
CGFloat x = self . view . center . x - 150 ;
self . adView . frame = CGRectMake(x, y, width, height) ;
// Set background or background color for MREC ads to be fully functional
self . adView . backgroundColor = BACKGROUND_COLOR;
[ self .view addSubview : self .adView ];
#pragma mark - MAAdDelegate Protocol
- ( void ) didLoadAd : (MAAd * ) ad {}
- ( void ) didFailToLoadAdForAdUnitIdentifier : ( NSString * ) adUnitIdentifier withError : (MAError * ) error {}
- ( void ) didClickAd : (MAAd * ) ad {}
- ( void ) didFailToDisplayAd : (MAAd * ) ad withError : (MAError * ) error {}
#pragma mark - MAAdViewAdDelegate Protocol
- ( void ) didExpandAd : (MAAd * ) ad {}
- ( void ) didCollapseAd : (MAAd * ) ad {}
#pragma mark - Deprecated Callbacks
- ( void ) didDisplayAd : (MAAd * ) ad { /* use this for impression tracking */ }
- ( void ) didHideAd : (MAAd * ) ad { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
class ExampleViewController: UIViewController , MAAdViewAdDelegate
adView = MAAdView ( adUnitIdentifier : " «ad-unit-ID» " , adlanguage : MAAdFormat. mrec )
// MREC width and height are 300 and 250 respectively, on iPhone and iPad
let height: CGFloat = 250
adView. frame = CGRect ( x : x, y : y, width : width, height : height )
adView. center . x = view. center . x
// Set background or background color for MREC ads to be fully functional
adView. backgroundColor = BACKGROUND_COLOR
// MARK: MAAdDelegate Protocol
func didLoad ( _ ad : MAAd ) {}
func didFailToLoadAd ( forAdUnitIdentifier adUnitIdentifier : String , withError error : MAError ) {}
func didClick ( _ ad : MAAd ) {}
func didFail ( toDisplay ad : MAAd, withError error : MAError ) {}
// MARK: MAAdViewAdDelegate Protocol
func didExpand ( _ ad : MAAd ) {}
func didCollapse ( _ ad : MAAd ) {}
// MARK: Deprecated Callbacks
func didDisplay ( _ ad : MAAd ) { /* use this for impression tracking */ }
func didHide ( _ ad : MAAd ) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
To hide a banner or MREC, call the following:
[adView stopAutoRefresh ];
To show a banner or MREC, call the following:
[adView startAutoRefresh ];
adView. startAutoRefresh ()
Select the ad networks to integrate.
Then follow the specific instructions below.
Note
Starting from Pangle iOS adapter version 4.9.1.0.0, Pangle is no longer available in Chinese Mainland.
To monetize Chinese Mainland traffic, set up the CSJ network and add the CSJ adapter.
For global traffic that excludes Chinese Mainland, you can continue to use Pangle for monetization.
Swift Build Settings
To support Swift for iOS versions below 12.2:
In the main target of your Xcode project select File > Build Settings .
Set Always Embed Swift Standard Libraries to Yes .
App Delegate window
Property
Do not remove the window
property of your App Delegate file.
If you do so, InMobi’s SDK may crash.
@ property (nonatomic, strong) UIWindow * window;
Meta Audience Network Data Processing Options
If you do not want to enable Limited Data Use (LDU) mode, pass SetDataProcessingOptions()
an empty array:
#import < FBAudienceNetwork/FBAudienceNetwork.h >
[FBAdSettings setDataProcessingOptions : @[] ];
FBAdSettings. setDataProcessingOptions ( [] )
To enable LDU for users and to specify user geography, call SetDataProcessingOptions()
like this:
#import < FBAudienceNetwork/FBAudienceNetwork.h >
[FBAdSettings setDataProcessingOptions : @[ @" LDU " ] country : «country» state : «state» ];
FBAdSettings. setDataProcessingOptions ( [ " LDU " ], country : « country » , state : « state » )
Using Google UMP
If you use Google UMP as your CMP, you can determine whether the user has consented to Meta or not.
To do so, use code like the following:
NSNumber * hasMetaConsent = [ALPrivacySettings additionalConsentStatusForIdentifier : 89 ];
BOOL consentGiven = hasMetaConsent.boolValue;
// Set Meta Data Processing Options accordingly.
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
let hasMetaConsent = ALPrivacySetting. additionalConsentStatus ( forIdentifier : 89 )
if let consentGiven = hasMetaConsent ? .boolValue
// Set Meta Data Processing Options accordingly.
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
Meta Audience Network Data Processing Options for Users in California
To learn how to implement Meta Audience Network’s “Limited Data Use” flag in California, read the Meta for Developers documentation .
Meta Preparing for iOS 14.5 and Above
Audience Network SDK 6.2.1 was released on January 11, 2021.
This version has these important requirements:
Implement the setAdvertiserTrackingEnabled
flag, irrespective of the use of mediation.
This informs Meta whether it can use the data to deliver personalized ads.
Add the SKAdNetwork IDs that Meta suggests to the Xcode project’s Info.plist
so that advertisers can measure the success of ad campaigns.
Refer to the SKAdNetwork documentation for integration instructions.
[sdk initializeSdkWithCompletionHandler : ^ (ALSdkConfiguration * sdkConfiguration)
if ( @available(iOS 14.5 , * ) )
// Note that App transparency tracking authorization can be checked via `sdkConfiguration.appTrackingTransparencyStatus`
// 1. Set Meta ATE flag here, THEN
sdk. initializeSdk { ( sdkConfiguration : ALSdkConfiguration) in
if #available ( iOS 14.5 , * )
// Note that App transparency tracking authorization can be checked via `sdkConfiguration.appTrackingTransparencyStatus`
// 1. Set Meta ATE flag here, THEN
Note
Developers and publishers who use Google AdSense, AdManager, or AdMob must use a consent management platform (CMP) that is certified by Google.
The CMP must integrate with IAB’s Transparency and Consent Framework when you serve ads to users in the European Economic Area (EEA) or the UK.
See Privacy: “TCF v2 Consent” for more information.
Add Your Google Bidding and Google AdMob / Google Ad Manager App ID
In your app’s Info.plist
, add a GADApplicationIdentifier
key.
Give this key the String value of your Google bidding and Google AdMob / Google Ad Manager App ID.
Initialize the Amazon SDK
The Amazon Publisher Services SDK requires that you initialize it outside of MAX SDK:
[[DTBAds sharedInstance ] setAppKey : appId ];
DTBAdNetworkInfo * adNetworkInfo = [[DTBAdNetworkInfo alloc ] initWithNetworkName : DTBADNETWORK_MAX ];
[DTBAds sharedInstance ].mraidCustomVersions = @[ @" 1.0 " , @" 2.0 " , @" 3.0 " ];
[[DTBAds sharedInstance ] setAdNetworkInfo : adNetworkInfo ];
[DTBAds sharedInstance ].mraidPolicy = CUSTOM_MRAID;
Load a Banner or MREC Ad from Amazon’s SDK
To integrate Amazon ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or DTBAdErrorInfo
into the instance of MAAdView
.
You can do this by calling -[MAAdView setLocalExtraParameterForKey:value:]
.
@interface ExampleViewController ()<DTBAdCallback>
@implementation ExampleViewController
NSString * amazonAdSlotId;
if ( UIDevice . currentDevice . userInterfaceIdiom == UIUserInterfaceIdiomPad )
amazonAdSlotId = @" «Amazon-leader-slot-ID» " ;
adFormat = MAAdFormat . leader ;
amazonAdSlotId = @" «Amazon-banner-slot-ID» " ;
adFormat = MAAdFormat . banner ;
CGSize rawSize = adFormat . size ;
DTBAdSize * size = [[DTBAdSize alloc ] initBannerAdSizeWithWidth : rawSize.width
andSlotUUID : amazonAdSlotId ];
DTBAdLoader * adLoader = [[DTBAdLoader alloc ] init ];
[adLoader setAdSizes : @[size] ];
- ( void ) onSuccess : (DTBAdResponse * ) adResponse
// 'adView' is your instance of MAAdView
[ self .adView setLocalExtraParameterForKey : @" amazon_ad_response " value : adResponse ];
- ( void ) onFailure : (DTBAdError) error dtbAdErrorInfo : (DTBAdErrorInfo * ) errorInfo
// 'adView' is your instance of MAAdView
[ self .adView setLocalExtraParameterForKey : @" amazon_ad_error " value : errorInfo ];
class ExampleViewController: UIViewController
override func viewDidLoad ()
let amazonAdSlotId: String
if UIDevice.current.userInterfaceIdiom == .pad
amazonAdSlotId = " «Amazon-leader-slot-ID» "
adFormat = MAAdFormat. leader
amazonAdSlotId = " «Amazon-banner-slot-ID» "
adFormat = MAAdFormat. banner
let rawSize = adFormat.size
let size = DTBAdSize ( bannerAdSizeWithWidth : Int ( rawSize. width ) ,
height : Int ( rawSize. height ) ,
andSlotUUID : amazonAdSlotId ) !
let adLoader = DTBAdLoader ()
adLoader. setAdSizes ( [size] )
extension ExampleViewController: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_error " , value :dtbAdErrorInfo )
struct ExampleSwiftUIWrapper: UIViewRepresentable
func makeUIView ( context : Context ) -> MAAdView
let adView = MAAdView ( adUnitIdentifier : " «ad-unit-ID» " )
adView. delegate = context. coordinator
let amazonAdSlotId: String
if UIDevice.current.userInterfaceIdiom == .pad
amazonAdSlotId = " «Amazon-leader-slot-ID» "
adFormat = MAAdFormat. leader
amazonAdSlotId = " «Amazon-banner-slot-ID» "
adFormat = MAAdFormat. banner
let rawSize = adFormat.size
let size = DTBAdSize ( bannerAdSizeWithWidth : Int ( rawSize. width ) ,
height : Int ( rawSize. height ) ,
andSlotUUID : amazonAdSlotId ) !
let adLoader = DTBAdLoader ()
adLoader. setAdSizes ( [size] )
extension ExampleSwiftUIWrapper
class Coordinator: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_error " , value : dtbAdErrorInfo )
@interface ExampleViewController ()<DTBAdCallback>
@implementation ExampleViewController
NSString * amazonAdSlotId;
DTBAdLoader * adLoader = [[DTBAdLoader alloc ] init ];
[adLoader setAdSizes : [[DTBAdSize alloc ] initBannerAdSizeWithWidth : 300
andSlotUUID : amazonAdSlotId] ];
- ( void ) onSuccess : (DTBAdResponse * ) adResponse
// 'adView' is your instance of MAAdView
[ self .adView setLocalExtraParameterForKey : @" amazon_ad_response " value : adResponse ];
- ( void ) onFailure : (DTBAdError) error dtbAdErrorInfo : (DTBAdErrorInfo * ) errorInfo
// 'adView' is your instance of MAAdView
[ self .adView setLocalExtraParameterForKey : @" amazon_ad_error " value : errorInfo ];
class ExampleViewController: UIViewController
override func viewDidLoad ()
let amazonAdSlotId: String
let adLoader = DTBAdLoader ()
adLoader. setAdSizes ( [ DTBAdSize ( bannerAdSizeWithWidth : 300 ,
andSlotUUID : amazonAdSlotId ) ! ] )
extension ExampleViewController: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_error " , value :dtbAdErrorInfo )
struct ExampleSwiftUIWrapper: UIViewRepresentable
func makeUIView ( context : Context ) -> MAAdView
let adView = MAAdView ( adUnitIdentifier : " «ad-unit-ID» " , adFormat : MAAdFormat. mrec )
adView. delegate = context. coordinator
let amazonAdSlotId: String
let adLoader = DTBAdLoader ()
adLoader. setAdSizes ( [ DTBAdSize ( bannerAdSizeWithWidth : 300 ,
andSlotUUID : amazonAdSlotId ) ! ] )
extension ExampleSwiftUIWrapper
class Coordinator: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'adView' is your instance of MAAdView
adView. setLocalExtraParameterForKey ( " amazon_ad_error " , value : dtbAdErrorInfo )
Load an Interstitial Ad from Amazon’s SDK
To integrate Amazon interstitial ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or DTBAdErrorInfo
into the instance of MAInterstitialAd
.
You can do this by calling -[MAInterstitialAd setLocalExtraParameterForKey:value:]
.
#import < AppLovinSDK/AppLovinSDK.h >
#import < DTBiOSSDK/DTBiOSSDK.h >
@interface ExampleViewController ()<DTBAdCallback>
@implementation ExampleViewController
static MAInterstitialAd * interstitialAd;
interstitialAd = [[MAInterstitialAd alloc ] initWithAdUnitIdentifier : @" «MAX-inter-ad-unit-ID» " ];
// If first load - load ad from Amazon's SDK, then load ad for MAX
DTBAdLoader * adLoader = [[DTBAdLoader alloc ] init ];
[[DTBAdSize alloc ] initInterstitialAdSizeWithSlotUUID : @" «Amazon-inter-slot-ID» " ]
- ( void ) onSuccess : (DTBAdResponse * ) adResponse
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey : @" amazon_ad_response " value : adResponse ];
- ( void ) onFailure : (DTBAdError) error dtbAdErrorInfo : (DTBAdErrorInfo * ) errorInfo
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey : @" amazon_ad_error " value : errorInfo ];
class ExampleViewController: UIViewController
private static var interstitialAd = MAInterstitialAd ( adUnitIdentifier : " «MAX-inter-ad-unit-ID» " )
private static var isFirstLoad = true
// If first load - load ad from Amazon's SDK, then load ad for MAX
let adLoader = DTBAdLoader ()
adLoader. setAdSizes ( [ DTBAdSize ( interstitialAdSizeWithSlotUUID : " «Amazon-inter-slot-ID» " ) ! ] )
Self . interstitialAd . load ()
extension ExampleViewController: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'interstitialAd' is your instance of MAInterstitialAd
Self . interstitialAd . setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
Self . interstitialAd . load ()
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'interstitialAd' is your instance of MAInterstitialAd
Self . interstitialAd . setLocalExtraParameterForKey ( " amazon_ad_error " , value : dtbAdErrorInfo )
Self . interstitialAd . load ()
Load a Video Interstitial Ad from Amazon’s SDK
To integrate Amazon interstitial ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or DTBAdErrorInfo
into the instance of MAInterstitialAd
.
You can do this by calling -[MAInterstitialAd setLocalExtraParameterForKey:value:]
#import < AppLovinSDK/AppLovinSDK.h >
#import < DTBiOSSDK/DTBiOSSDK.h >
@interface ExampleViewController ()<DTBAdCallback>
@implementation ExampleViewController
static MAInterstitialAd * interstitialAd;
interstitialAd = [[MAInterstitialAd alloc ] initWithAdUnitIdentifier : @" «MAX-inter-ad-unit-ID» " ];
// If first load - load ad from Amazon's SDK, then load ad for MAX
DTBAdLoader * adLoader = [[DTBAdLoader alloc ] init ];
// Switch video player width and height values(320, 480) depending on device orientation
[[DTBAdSize alloc ] initVideoAdSizeWithPlayerWidth : 320 height : 480 andSlotUUID : @" «Amazon-video-inter-slot-ID» " ]
- ( void ) onSuccess : (DTBAdResponse * ) adResponse
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey : @" amazon_ad_response " value : adResponse ];
- ( void ) onFailure : (DTBAdError) error dtbAdErrorInfo : (DTBAdErrorInfo * ) errorInfo
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey : @" amazon_ad_error " value : errorInfo ];
class ExampleViewController: UIViewController
private static var interstitialAd = MAInterstitialAd ( adUnitIdentifier : " «MAX-inter-ad-unit-ID» " )
private static var isFirstLoad = true
// If first load - load ad from Amazon's SDK, then load ad for MAX
let adLoader = DTBAdLoader ()
// Switch video player width and height values(320, 480) depending on device orientation
adLoader. setAdSizes ( [ DTBAdSize ( videoAdSizeWithPlayerWidth : 320 , height : 480 , andSlotUUID : " «Amazon-video-inter-slot-ID» " ) ! ] )
Self . interstitialAd . load ()
extension ExampleViewController: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'interstitialAd' is your instance of MAInterstitialAd
Self . interstitialAd . setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
Self . interstitialAd . load ()
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'interstitialAd' is your instance of MAInterstitialAd
Self . interstitialAd . setLocalExtraParameterForKey ( " amazon_ad_error " , value : dtbAdErrorInfo )
Self . interstitialAd . load ()
Load a Rewarded Video Ad from Amazon’s SDK
To integrate Amazon rewarded videos into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or DTBAdErrorInfo
into the instance of MARewardedAd
.
You can do this by calling -[MARewardedAd setLocalExtraParameterForKey:value:]
.
#import < AppLovinSDK/AppLovinSDK.h >
#import < DTBiOSSDK/DTBiOSSDK.h >
@interface ExampleViewController ()<DTBAdCallback>
@implementation ExampleViewController
static MARewardedAd * rewardedAd;
rewardedAd = [MARewardedAd sharedWithAdUnitIdentifier : @" «MAX-rewarded-ad-unit-ID» " ];
// If first load - load ad from Amazon's SDK, then load ad for MAX
DTBAdLoader * adLoader = [[DTBAdLoader alloc ] init ];
// Switch video player width and height values(320, 480) depending on device orientation
[[DTBAdSize alloc ] initVideoAdSizeWithPlayerWidth : 320 height : 480 andSlotUUID : @" «Amazon-video-rewarded-slot-ID» " ]
- ( void ) onSuccess : (DTBAdResponse * ) adResponse
// 'rewardedAd' is your instance of MARewardedAd
[rewardedAd setLocalExtraParameterForKey : @" amazon_ad_response " value : adResponse ];
- ( void ) onFailure : (DTBAdError) error dtbAdErrorInfo : (DTBAdErrorInfo * ) errorInfo
// 'rewardedAd' is your instance of MARewardedAd
[rewardedAd setLocalExtraParameterForKey : @" amazon_ad_error " value : errorInfo ];
class ExampleViewController: UIViewController
private static var rewardedAd = MARewardedAd. shared ( withAdUnitIdentifier : " «MAX-rewarded-ad-unit-ID» " )
private static var isFirstLoad = true
// If first load - load ad from Amazon's SDK, then load ad for MAX
let adLoader = DTBAdLoader ()
// Switch video player width and height values(320, 480) depending on device orientation
adLoader. setAdSizes ( [ DTBAdSize ( videoAdSizeWithPlayerWidth : 320 , height : 480 , andSlotUUID : " «Amazon-video-rewarded-slot-ID» " ) ! ] )
extension ExampleViewController: DTBAdCallback
func onSuccess ( _ adResponse : DTBAdResponse ! )
// 'rewardedAd' is your instance of MARewardedAd
Self . rewardedAd . setLocalExtraParameterForKey ( " amazon_ad_response " , value : adResponse )
func onFailure ( _ error : DTBAdError, dtbAdErrorInfo : DTBAdErrorInfo ! )
// 'rewardedAd' is your instance of MARewardedAd
Self . rewardedAd . setLocalExtraParameterForKey ( " amazon_ad_error " , value : dtbAdErrorInfo )
Testing Amazon Publisher Services
AppLovin recommends that you enable test mode for Amazon’s SDK.
When you do this, you receive test ads.
Enable test mode with the following calls:
[[DTBAds sharedInstance ] setLogLevel : DTBLogLevelAll ];
[[DTBAds sharedInstance ] setTestMode : YES ];
DTBAds. sharedInstance (). setLogLevel ( DTBLogLevelAll )
DTBAds. sharedInstance (). testMode = true
You can filter your waterfalls to contain only Amazon ads.
To do this, navigate to Select Live Network in the Mediation Debugger and select the Amazon network.
Disable App Transport Security
To disable App Transport Security (ATS), add NSAppTransportSecurity
to your app’s Info.plist
.
Then add the key NSAllowsArbitraryLoads
and set its Boolean value to YES
.
Make sure this is the only key present.