광고 미리 로드 (알파)

광고 미리 로드는 SDK에서 관리하는 로드 및 캐싱 프로세스로, 수동 광고 로드 및 캐싱이 필요하지 않습니다. 이 프로세스를 사용하면 광고를 수동으로 로드하거나 광고 로드 콜백을 처리하지 않고도 필요할 때 광고를 표시할 수 있습니다.

이 가이드에서는 광고 미리 로드 구성, 광고 미리 로드 가능 여부 확인, 미리 로드된 광고를 가져와 표시하는 방법을 설명합니다.

기본 요건

튜토리얼을 진행하기 전에 다음 항목을 완료해야 합니다.

  • Google 모바일 광고 SDK (베타) 버전 0.14.0-alpha01 이상을 설치합니다.
  • 시작 가이드에 따라 필요한 과정을 완료합니다.
  • 선택사항: 예제 앱을 다운로드하고 실행합니다.

광고 미리 로드 시작

미리 로드를 시작하려면 startPreload()를 호출합니다. Google 모바일 광고 SDK는 미리 로드된 구성에 대해 실패한 광고 요청을 자동으로 다시 시도합니다.

다음 예에서는 광고 미리 로드를 시작합니다.

Kotlin

private fun startPreloading(adUnitID: String) {
  val adRequest: AdRequest = AdRequest.Builder(adUnitID).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitID, preloadConfig)
}

자바

private void startPreloading(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

선택사항: 광고 미리 로드 수정

미리 로드되는 광고를 변경하려면 destroy()를 호출한 다음 수정된 구성으로 startPreload()를 다시 호출합니다.

선택사항: 광고 미리 로드 중지

광고 미리 로드를 중지하려면 미리 로드 ID와 함께 destroy()를 호출합니다.

선택사항: 버퍼 크기 설정

버퍼 크기는 메모리에 보관되는 미리 로드된 광고 수를 제어합니다. 앱에서 새 광고가 로드되는 속도보다 더 빠르게 광고가 표시되는 경우 버퍼 크기를 더 큰 값으로 설정합니다. 메모리 사용량이 우려되는 경우 버퍼 크기를 2와 같은 낮은 값으로 설정합니다.

Kotlin

private fun setBufferSize(adUnitID: String) {
  val adRequest: AdRequest = AdRequest.Builder(adUnitID).build()
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 3)
  InterstitialAdPreloader.start(adUnitID, preloadConfig)
}

자바

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 3);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

선택사항: 미리 로드 알림 받기

PreloadCallback을 구현하여 광고 미리 로드 이벤트에 대한 알림을 받습니다. 이러한 이벤트는 디버깅 및 로깅을 위해 응답 정보 객체를 제공합니다.

Kotlin

private fun startPreloadingWithCallback(adUnitID: String) {
  val preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    object : PreloadCallback {
      override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
        Log.i(
          TAG,
          ("Interstitial preload ad $preloadId failed to load with error: ${adError.message}"),
        )
        // [Optional] Get the error response info for additional details.
        // val responseInfo = adError.responseInfo
      }

      override fun onAdsExhausted(preloadId: String) {
        Log.i(TAG, "Interstitial preload ad $preloadId is not available")
      }

      override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
        Log.i(TAG, "Interstitial preload ad $preloadId is available")
      }
    }
  val adRequest: AdRequest = AdRequest.Builder(adUnitID).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitID, preloadConfig, preloadCallback)
}

자바

private void startPreloadingWithCallback(String adUnitId) {
  PreloadCallback preloadCallback =
      // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
      new PreloadCallback() {
        @Override
        public void onAdFailedToPreload(String preloadId, LoadAdError adError) {
          Log.e(
              TAG,
              String.format(
                  "Interstitial preload ad %s failed to load with error: %s",
                  preloadId, adError.getMessage()));
          // [Optional] Get the error response info for additional details.
          // ResponseInfo responseInfo = adError.getResponseInfo();
        }

        @Override
        public void onAdsExhausted(String preloadId) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is not available");
        }

        @Override
        public void onAdPreloaded(String preloadId, ResponseInfo responseInfo) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is available");
        }
      };

  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
}

미리 로드된 광고 가져오기 및 표시

onAdsAvailable()가 호출되면 광고를 표시할 수 있습니다. 광고는 노출되고 소진되는 대로 지속적으로 제공됩니다. 광고를 가져온 후 광고 수명 주기 이벤트를 수신 대기하고 광고를 표시합니다.

다음 예에서는 미리 로드된 광고를 보여줍니다.

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitID: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = InterstitialAdPreloader.pollAd(adUnitID)

  // Interact with the ad object as needed.
  ad?.apply {
    Log.d(TAG, "Interstitial ad response info: ${this.getResponseInfo()}")
    this.adEventCallback =
      object : InterstitialAdEventCallback {
        override fun onAdImpression() {
          Log.d(TAG, "Interstitial ad recorded an impression.")
        }

        override fun onAdPaid(value: AdValue) {
          Log.d(TAG, "Interstitial ad onPaidEvent: ${value.valueMicros} ${value.currencyCode}")
        }
      }

    // Show the ad.
    ad.show(activity)
  }
}

자바

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final InterstitialAd ad = InterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad != null) {
    Log.d(TAG, "Interstitial ad response info: " + ad.getResponseInfo());
    ad.setAdEventCallback(
        new InterstitialAdEventCallback() {
          @Override
          public void onAdImpression() {
            Log.d(TAG, "Interstitial ad recorded an impression.");
          }

          @Override
          public void onAdPaid(AdValue value) {
            Log.d(
                TAG,
                "Interstitial ad onPaidEvent: "
                    + value.getValueMicros()
                    + " "
                    + value.getCurrencyCode());
          }
        });

    // Show the ad.
    ad.show(activity);
  }
}

선택사항: 미리 로드된 광고 사용 가능 여부 확인

광고를 사용할 수 있는지 확인하려면 isAdAvailable을 호출합니다.

Kotlin

private fun isAdAvailable(adUnitID: String): Boolean {
  return InterstitialAdPreloader.isAdAvailable(adUnitID)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return InterstitialAdPreloader.isAdAvailable(adUnitId);
}