To solve this issue, AdMob provides Configurable Adapter Initialization. This feature lets you control which adapters are initialized for your first ad impression, and reduces latency for that impression.
This guide covers the following aspects of Configurable Adapter Initialization:
Prerequisites
- Import Google Mobile Ads SDK 13.4.0 or higher.
- Set up Google Mobile Ads SDK.
Opt in to this feature by adding
#import <GoogleMobileAds/GoogleMobileAds_Beta.h>in Objective-C or addingimport GoogleMobileAds_Privatein Swift.Swift
import GoogleMobileAds import GoogleMobileAds_PrivateObjective-C
#import <GoogleMobileAds/GoogleMobileAds.h> #import <GoogleMobileAds/GoogleMobileAds_Beta.h>
Create an adapter configuration
An adapter initialization configuration instructs Google Mobile Ads SDK to initialize only the required adapters. This prevents unnecessary adapters from blocking your first ad request, conserving computation resources and significantly reducing latency for the first ad impression.
To optimize your app's performance, consider the following strategies as you create an adapter initialization configuration:
Prioritize specific Ad Format or Ad Unit
Improve the performance of apps that show an ad immediately upon launch, such as an app open ad, by declaring the specific ad format or ad unit in your adapter initialization configuration.
The following example creates an adapter initialization configuration that initializes only the required mediation adapters for a specific app open ad unit with a five second timeout:
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdUnitIDs = [adUnitID]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdUnitIDs = [NSSet setWithArray:@[ kTestAdUnitID ]];
adapterConfig.initializationTimeout = 5.0;
The following example creates an adapter initialization configuration that initializes only the required mediation adapters for all App Open Ads and sets a five second timeout:
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdFormats = [AdFormat.appOpen.rawValue as NSNumber]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdFormats = [NSSet setWithArray:@[ @(GADAdFormatAppOpen) ]];
adapterConfig.initializationTimeout = 5.0;
Initialize specific mediation adapters
If you know exactly which mediation partners typically fill your first ad impression, you can initialize only that specific adapter by providing the adapter class name in your adapter initialization configuration. Combine this with explicitly skipping the uninitialized adapters and setting a timeout for Google Mobile Ads SDK to not wait for remaining uninitialized adapters during the auction.
The following example creates an adapter initialization configuration that initializes a specific mediation adapter and sets a five second timeout:
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdapterClasses = [NSSet setWithArray:@[ kTestAdapterClassName ]];
adapterConfig.initializationTimeout = 5.0;
Exclude specific mediation adapters
If you observe that certain mediation adapters have consistently high latency, you can exclude these adapters and initialize them at a later time.
The following example creates an adapter initialization configuration that excludes specific adapters from initializing, and sets a five second timeout:
Swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.excludedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
Objective-C
GADMediationInitializationConfiguration *adapterConfig =
[[GADMediationInitializationConfiguration alloc] init];
adapterConfig.excludedAdapterClasses = [NSSet setWithArray:@[ kTestAdapterClassName ]];
adapterConfig.initializationTimeout = 5.0;
Skip uninitialized adapters
If you plan to initialize or exclude specific mediation adapters, you can configure your ad request to skip uninitialized adapters that are still present in your waterfall.
If you don't create an adapter configuration, you can still configure your ad request to skip uninitialized adapters. Google Mobile Ads SDK issues an ad request without waiting for adapters to time out or fail to initialize.
The following example initializes the SDK with an adapter initialization configuration and creates an app open ad request that skips uninitialized adapters:
Swift
await MobileAds.shared.start(with: adapterInitializationConfig)
// Make your ad request after adapter initialization completes.
let request = Request()
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters.
request.skipUninitializedAdapters = true
do {
let _ = try await AppOpenAd.load(with: adUnitID, request: request)
} catch {
print("Failed to load app open ad with error: \(error.localizedDescription)")
// TODO: Handle error
}
// Handle non time-sensitive tasks after the ad has loaded regardless of whether ad load
// succeeded.
performPostLaunchSetup()
Objective-C
[[GADMobileAds sharedInstance]
startWithMediationInitializationConfiguration:adapterInitializationConfig
completionHandler:^(GADInitializationStatus *_Nonnull status) {
// Make your ad request after adapter initialization
// completes.
GADRequest *request = [GADRequest request];
// Set this to guarantee that the ad request
// doesn't wait for any other uninitialized adapters
request.shouldSkipUninitializedAdapters = YES;
[GADAppOpenAd
loadWithAdUnitID:adUnitID
request:request
completionHandler:^(GADAppOpenAd *_Nullable ad,
NSError *_Nullable error) {
if (error) {
NSLog(@"Failed to load app open ad with error: %@",
error.localizedDescription);
}
// Handle non time-sensitive tasks after the
// ad has loaded regardless of whether ad load succeeded.
[self performPostLaunchSetup];
}];
}];
Initialize remaining adapters
After your time-sensitive ad opportunities have loaded, initialize your remaining adapters to ensure full partner mediation coverage for the rest of the app session.
The following example initializes the rest of the adapters by providing an empty configuration:
Swift
// Provide start with nil to initialize any adapters
// not initialized with configurable initialization.
MobileAds.shared.start(with: nil) { status in
// Remaining adapters are now initialized.
}
Objective-C
// Call start with nil to initialize any adapters not initialized via configurable initialization.
[[GADMobileAds sharedInstance]
startWithMediationInitializationConfiguration:nil
completionHandler:^(GADInitializationStatus *_Nonnull status) {
// Remaining adapters are now initialized.
}];