Чтобы решить эту проблему, в AdMob предусмотрена настраиваемая инициализация адаптера. Эта функция позволяет контролировать, какие адаптеры инициализируются для первого показа объявления, и сокращает задержку для этого показа.
В этом руководстве рассматриваются следующие аспекты настраиваемой инициализации адаптера:
- Как создать конфигурацию адаптера
- Пропуск неинициализированных адаптеров
- Инициализация остальных адаптеров
Требования
- Импортируйте Google Mobile Ads SDK версии 13.4.0 или более поздней.
- Настройте Google Mobile Ads SDK.
Чтобы включить эту функцию, добавьте
#import <GoogleMobileAds/GoogleMobileAds_Beta.h>в Objective-C илиimport GoogleMobileAds_Privateв Swift.Swift
import GoogleMobileAds import GoogleMobileAds_PrivateObjective-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.
}];