<br />

By default, Google Mobile Ads SDK initializes all mediation adapters associated with your application during initialization. Initializing every adapter can take more than 30 seconds, leading to significant latency before your first ad can load.

<br />

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.

> [!NOTE]
> **Note:** Configurable Adapter Initialization is in alpha.

This guide covers the following aspects of Configurable Adapter Initialization:

- [Create an adapter configuration](https://developers.google.com/admob/ios/use-configurable-adapter-initialization.md.txt#create_an_adapter_configuration)
- [Skip uninitialized adapters](https://developers.google.com/admob/ios/use-configurable-adapter-initialization.md.txt#skip_uninitialized_adapters)
- [Initialize remaining adapters](https://developers.google.com/admob/ios/use-configurable-adapter-initialization.md.txt#initialize_remaining_adapters)

## Prerequisites

- Import Google Mobile Ads SDK 13.4.0 or higher.
- [Set up Google Mobile Ads SDK](https://developers.google.com/admob/ios/quick-start.md.txt).

<!-- -->

- Opt in to this feature by adding `#import <GoogleMobileAds/GoogleMobileAds_Beta.h>` in Objective-C or adding `import GoogleMobileAds_Private` in Swift.

  ### Swift

  ```swift
  import GoogleMobileAds
  import GoogleMobileAds_Private
  ```

  ### Objective-C

  ```objective-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

```swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdUnitIDs = [adUnitID]
adapterConfig.initializationTimeout = 5.0
```

### Objective-C

```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

```swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdFormats = [AdFormat.appOpen.rawValue as NSNumber]
adapterConfig.initializationTimeout = 5.0
```

### Objective-C

```objective-c
GADMediationInitializationConfiguration *adapterConfig =
    [[GADMediationInitializationConfiguration alloc] init];
adapterConfig.includedAdFormats = [NSSet setWithArray:@[ @(GADAdFormatAppOpen) ]];
adapterConfig.initializationTimeout = 5.0;
```

<br />

### 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](https://developers.google.com/admob/ios/use-configurable-adapter-initialization#skip_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

```swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.includedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
```

### Objective-C

```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

```swift
let adapterConfig = MediationInitializationConfiguration()
adapterConfig.excludedAdapterClasses = [adapterClassName]
adapterConfig.initializationTimeout = 5.0
```

### Objective-C

```objective-c
GADMediationInitializationConfiguration *adapterConfig =
    [[GADMediationInitializationConfiguration alloc] init];
adapterConfig.excludedAdapterClasses = [NSSet setWithArray:@[ kTestAdapterClassName ]];
adapterConfig.initializationTimeout = 5.0;
```

> [!TIP]
> **Tip:** Initialize adapters in groups using multiple calls, such as two separate calls for relevant adapters, to prevent a slow adapter from blocking others or their callbacks.

## 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](https://developers.google.com/admob/ios/use-configurable-adapter-initialization#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.

> [!IMPORTANT]
> **Important:** By default, Google Mobile Ads SDK initializes all mediation adapters associated with the ad unit ID when reaching the mediation group in the ad request waterfall.

The following example initializes the SDK with an adapter initialization
configuration and creates an app open ad request that skips uninitialized
adapters:

### Swift

```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

```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

```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

```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.
                                }];

```

<br />