使用可配置的适配器初始化功能(Alpha 版)

请选择平台: Android 新 Android iOS

默认情况下,Google Mobile Ads SDK 会在初始化期间初始化与您的应用关联的所有中介适配器。初始化每个适配器可能需要超过 30 秒的时间,导致在加载首个广告之前出现明显的延迟。

为解决此问题,AdMob 提供了可配置的适配器初始化功能。借助该功能,您可以控制为首次广告展示初始化哪些适配器,并减少此次展示的延迟时间。

本指南涵盖了可配置的适配器初始化功能的以下方面:

前提条件

  • 如需选择启用该功能,请在 Objective-C 中添加 #import <GoogleMobileAds/GoogleMobileAds_Beta.h> 或在 Swift 中添加 import GoogleMobileAds_Private。

    Swift

    import GoogleMobileAds
    import GoogleMobileAds_Private
    

    Objective-C

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

创建适配器配置

适配器初始化配置会指示 Google Mobile Ads SDK 仅初始化必需的适配器。这样可以防止不必要的适配器阻塞首个广告请求,从而节省计算资源并显著缩短首次广告展示的延迟时间。

如需优化应用的性能,请在创建适配器初始化配置时考虑以下策略:

优先投放特定广告格式或广告单元

通过在适配器初始化配置中声明特定的广告格式或广告单元,提高在启动时立即展示广告(例如开屏广告)的应用的性能。

以下示例创建了一项适配器初始化配置,该配置仅初始化特定开屏广告单元必需的中介适配器,并将超时限值设为 5 秒:

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;

以下示例创建了一项适配器初始化配置,该配置仅初始化所有开屏广告必需的中介适配器,并将超时限值设为 5 秒:

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 设置超时限值相结合,即可避免在竞价期间等待未初始化的剩余适配器。

以下示例创建了一项适配器初始化配置,该配置用于初始化特定的中介适配器,并将超时限值设为 5 秒:

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;

排除特定的中介适配器

如果您观察到某些中介适配器的延迟时间一直很长,则可排除这些适配器,并在晚些时候初始化它们。

以下示例创建了一项适配器初始化配置,该配置用于排除特定适配器以使其不进行初始化,并将超时限值设为 5 秒:

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