Использование настраиваемой инициализации адаптера (альфа-версия)

Выберите платформу: Android iOS Android (устаревшая версия)

По умолчанию Google Mobile Ads SDK инициализирует все адаптеры медиации, связанные с вашим приложением, во время инициализации. Инициализация каждого адаптера может занять более 30 секунд, что приведет к значительной задержке перед загрузкой первого объявления.

Чтобы решить эту проблему, в AdMob предусмотрена настраиваемая инициализация адаптера. Эта функция позволяет контролировать, какие адаптеры инициализируются для первого показа объявления, и сокращает задержку для этого показа.

В этом руководстве рассматриваются следующие аспекты инициализации настраиваемого адаптера:

Требования

  • Чтобы включить эту функцию, добавьте #import <GoogleMobileAds/GoogleMobileAds_Beta.h> в Objective-C или import GoogleMobileAds_Private в Swift.

    Swift

    import GoogleMobileAds
    import GoogleMobileAds_Private
    

    Objective-C

    #import <GoogleMobileAds/GoogleMobileAds.h>
    #import <GoogleMobileAds/GoogleMobileAds_Beta.h>
    

Как создать конфигурацию адаптера

Конфигурация инициализации адаптера указывает Google Mobile Ads SDK, что нужно инициализировать только необходимые адаптеры. Это предотвращает блокировку первого запроса объявления ненужными адаптерами, экономит вычислительные ресурсы и значительно снижает задержку при первом показе объявления.

Чтобы оптимизировать работу приложения, при создании конфигурации инициализации адаптера следуйте приведенным ниже рекомендациям.

Приоритет определенного формата объявления или рекламного блока

Чтобы повысить эффективность приложений, в которых объявление показывается сразу после запуска (например, объявлений при запуске приложения), укажите определенный формат объявления или рекламный блок в конфигурации инициализации адаптера.

В примере ниже создается конфигурация инициализации адаптера, которая инициализирует только необходимые адаптеры медиации для определенного рекламного блока для объявлений при запуске приложения с пятисекундным временем ожидания.

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;

В следующем примере создается конфигурация инициализации адаптера, которая инициализирует только необходимые адаптеры медиации для всех объявлений при запуске приложения и устанавливает пятисекундный тайм-аут:

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;

Как инициализировать определенные адаптеры медиации

Если вы знаете, какие партнеры по медиации обычно заполняют первый показ объявления, вы можете инициализировать только определенный адаптер, указав название класса адаптера в конфигурации инициализации адаптера. В сочетании с явным пропуском неинициализированных адаптеров и настройкой времени ожидания для Google Mobile Ads SDK это позволит не ждать оставшиеся неинициализированные адаптеры во время аукциона.

В следующем примере создается конфигурация инициализации адаптера, которая инициализирует определенный адаптер медиации и устанавливает пятисекундный тайм-аут:

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;

Как исключить определенные адаптеры медиации

Если вы заметили, что определенные адаптеры медиации постоянно вызывают задержки, вы можете исключить их и инициализировать позже.

В следующем примере создается конфигурация инициализации адаптера, которая исключает инициализацию определенных адаптеров и устанавливает пятисекундный тайм-аут:

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;

Пропуск неинициализированных адаптеров

Если вы планируете инициализировать или исключить определенные адаптеры медиации, вы можете настроить запрос объявления так, чтобы пропускать неинициализированные адаптеры, которые все ещё присутствуют в каскаде.

Если вы не создадите конфигурацию адаптера, то все равно сможете настроить запрос объявлений так, чтобы пропускать неинициализированные адаптеры. Google Mobile Ads SDK отправляет запрос объявления, не дожидаясь, пока истечет время ожидания адаптеров или произойдет сбой инициализации.

В примере ниже SDK инициализируется с конфигурацией инициализации адаптера и создается запрос объявления при запуске приложения, который пропускает неинициализированные адаптеры.

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

Инициализация оставшихся адаптеров

После того как будут загружены объявления, связанные с определенным временем, инициализируйте оставшиеся адаптеры, чтобы обеспечить полное покрытие медиации партнеров для остальной части сеанса приложения.

В следующем примере инициализируются остальные адаптеры с помощью пустой конфигурации:

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