구성 가능한 어댑터 초기화 사용(알파)

기본적으로 GMA Next-Gen SDK는 초기화 중에 애플리케이션과 연결된 모든 미디에이션 어댑터를 초기화합니다. 모든 어댑터를 초기화하는 데 30초 이상 걸릴 수 있으므로 첫 번째 광고가 로드되기 전에 상당한 지연 시간이 발생합니다.

이 문제를 해결하기 위해 AdMob에서는 구성 가능한 어댑터 초기화를 제공합니다. 이 기능을 사용하면 첫 번째 광고 노출 시 초기화되는 어댑터를 제어하고 해당 노출의 지연 시간을 줄일 수 있습니다.

이 가이드에서는 구성 가능한 어댑터 초기화의 다음 측면을 다룹니다.

기본 요건

  • 클래스에 @ExperimentalApi 주석을 추가하여 이 기능을 선택합니다.

    Kotlin

    @OptIn(ExperimentalApi::class)
    

    자바

    import androidx.annotation.OptIn;
    // ...
    @OptIn(markerClass = ExperimentalApi.class)
    

어댑터 구성 만들기

어댑터 초기화 구성은 GMA Next-Gen SDK에 필요한 어댑터만 초기화하도록 지시합니다. 이렇게 하면 불필요한 어댑터가 첫 번째 광고 요청을 차단하지 않아 컴퓨팅 리소스가 절약되고 첫 번째 광고 노출의 지연 시간이 크게 줄어듭니다.

앱의 성능을 최적화하려면 어댑터 초기화 구성을 만들 때 다음 전략을 고려하세요.

특정 광고 형식 또는 광고 단위 우선순위 지정하기

어댑터 초기화 구성에서 특정 광고 형식 또는 광고 단위를 선언하여 실행 시 즉시 광고를 표시하는 앱(예: 앱 오프닝 광고)의 실적을 개선합니다.

다음 예에서는 제한 시간이 5초인 특정 앱 오프닝용 광고 단위에 필요한 미디에이션 어댑터만 초기화하는 어댑터 초기화 구성을 만듭니다.

Kotlin

val adapterConfig =
  AdapterInitializationConfig.Builder()
    .setAllowedAdUnitIds(setOf(AD_UNIT_ID))
    .setInitializationTimeoutMs(5000)
    .build()

자바

AdapterInitializationConfig adapterConfig =
    new AdapterInitializationConfig.Builder()
        .setAllowedAdUnitIds(Set.of(AD_UNIT_ID))
        .setInitializationTimeoutMs(5000)
        .build();

다음 예에서는 모든 앱 오프닝 광고에 필요한 미디에이션 어댑터만 초기화하고 5초 제한 시간을 설정하는 어댑터 초기화 구성을 만듭니다.

Kotlin

val adapterConfig =
  AdapterInitializationConfig.Builder()
    .setAllowedAdFormats(setOf(AdFormat.APP_OPEN_AD))
    .setInitializationTimeoutMs(5000)
    .build()

자바

AdapterInitializationConfig adapterConfig =
    new AdapterInitializationConfig.Builder()
        .setAllowedAdFormats(Set.of(AdFormat.APP_OPEN_AD))
        .setInitializationTimeoutMs(5000)
        .build();

특정 미디에이션 어댑터 초기화

일반적으로 첫 번째 광고 노출을 채우는 미디에이션 파트너를 정확히 알고 있다면 어댑터 초기화 구성에 어댑터 클래스 이름을 제공하여 해당 어댑터만 초기화할 수 있습니다. 이를 명시적으로 초기화되지 않은 어댑터를 건너뛰고 GMA Next-Gen SDK의 제한 시간을 설정하여 입찰 중에 초기화되지 않은 나머지 어댑터를 기다리지 않는 방식과 결합합니다.

다음 예에서는 특정 미디에이션 어댑터를 초기화하고 5초 제한 시간을 설정하는 어댑터 초기화 구성을 만듭니다.

Kotlin

val adapterConfig =
  AdapterInitializationConfig.Builder()
    .setAllowedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
    .setInitializationTimeoutMs(5000)
    .build()

자바

AdapterInitializationConfig adapterConfig =
    new AdapterInitializationConfig.Builder()
        .setAllowedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
        .setInitializationTimeoutMs(5000)
        .build();

어댑터 클래스 이름을 프로그래매틱 방식으로 가져올 수 있습니다. 다음 예에서는 어댑터 클래스 이름을 프로그래매틱 방식으로 가져옵니다.

Kotlin

ExampleMediationAdapter::class.java.name

자바

ExampleMediationAdapter.class.getName()

특정 미디에이션 어댑터 제외하기

특정 미디에이션 어댑터의 지연 시간이 꾸준히 길면 이러한 어댑터를 제외하고 나중에 초기화할 수 있습니다.

다음 예에서는 특정 어댑터가 초기화되지 않도록 제외하고 5초 제한 시간을 설정하는 어댑터 초기화 구성을 만듭니다.

Kotlin

val adapterConfig =
  AdapterInitializationConfig.Builder()
    .setExcludedAdapterClasses(setOf(ADAPTER_JAVA_CLASS_NAME))
    .setInitializationTimeoutMs(5000)
    .build()

자바

AdapterInitializationConfig adapterConfig =
    new AdapterInitializationConfig.Builder()
        .setExcludedAdapterClasses(Set.of(ADAPTER_JAVA_CLASS_NAME))
        .setInitializationTimeoutMs(5000)
        .build();

초기화되지 않은 어댑터 건너뛰기

특정 미디에이션 어댑터를 초기화하거나 제외하려는 경우, 폭포식 구조에 아직 있는 초기화되지 않은 어댑터를 건너뛰도록 광고 요청을 구성할 수 있습니다.

어댑터 구성을 만들지 않는 경우에도 초기화되지 않은 어댑터를 건너뛰도록 광고 요청을 구성할 수 있습니다. GMA Next-Gen SDK는 어댑터가 시간 초과되거나 초기화에 실패할 때까지 기다리지 않고 광고 요청을 발행합니다.

다음 예에서는 어댑터 초기화 구성으로 SDK를 초기화하고 초기화되지 않은 어댑터를 건너뛰는 앱 오프닝 광고 요청을 만듭니다.

Kotlin

val initConfig =
  InitializationConfig.Builder(appId)
    .setAdapterInitializationConfig(adapterInitializationConfig)
    .build()

// Initialize the GMA Next-Gen SDK with a config containing your adapter initialization
// settings.
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
  MobileAds.initialize(context = context, initConfig) {

    // Make your ad request after adapter initialization completes.
    AppOpenAd.load(
      AdRequest.Builder(adUnitId = adUnitId)
        // Set this to guarantee that the ad request
        // doesn't wait for any other uninitialized adapters.
        .skipUninitializedAdapters()
        .build(),
      adLoadCallback =
        object : AdLoadCallback<AppOpenAd> {

          override fun onAdLoaded(ad: AppOpenAd) {
            // TODO: Your ad logic here
            // ....

            // Execute non-time-sensitive tasks after ad load completes.
            performPostLaunchSetup()
          }

          override fun onAdFailedToLoad(adError: LoadAdError) {
            // TODO: Handle load error.
            // ....

            // Ensure non-time-sensitive post-launch tasks execute even if ad load fails.
            performPostLaunchSetup()
          }
        },
    )
  }
}

자바

InitializationConfig initConfig =
    new InitializationConfig.Builder(appId)
        .setAdapterInitializationConfig(adapterInitializationConfig)
        .build();

// Initialize the GMA Next-Gen SDK with a config containing your adapter initialization
// settings.
MobileAds.initialize(
    context,
    initConfig,
    initializationStatus -> {
      // Make your ad request after adapter initialization completes.
      AppOpenAd.load(
          new AdRequest.Builder(adUnitId)
              // Set this to guarantee that the ad request
              // doesn't wait for any other uninitialized adapters.
              .skipUninitializedAdapters()
              .build(),
          new AdLoadCallback<AppOpenAd>() {
            @Override
            public void onAdLoaded(@NonNull AppOpenAd ad) {
              // TODO: Your ad logic here
              // ....

              // Execute non-time-sensitive tasks after ad load completes.
              performPostLaunchSetup();
            }

            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError error) {
              // TODO: Handle load error.
              // ....

              // Ensure non-time-sensitive post-launch tasks execute even if ad load fails.
              performPostLaunchSetup();
            }
          });
    });

나머지 어댑터 초기화

시간에 민감한 광고 기회가 로드된 후 나머지 어댑터를 초기화하여 앱 세션의 나머지 부분에 대한 전체 파트너 미디에이션 노출 범위를 보장합니다.

다음 예에서는 빈 구성을 제공하여 나머지 어댑터를 초기화합니다.

Kotlin


// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(AdapterInitializationConfig.Builder().build())

Java

// Provide initializeAdapters with an empty configuration to initialize
// any adapters not initialized with configurable initialization.
MobileAds.initializeAdapters(new AdapterInitializationConfig.Builder().build());