광고 사전 로드로 이전

광고 사전 로드는 GMA Next-Gen SDK에서 광고 로드, 캐싱, 다시 로드를 자동화합니다. 단일 로드를 사용하는 경우 자동화된 수명 주기 관리, 관리되는 재시도, 최적화된 광고 선택을 위해 광고 사전 로드로 이전하세요. 광고 사전 로드에 관한 개념적 세부정보는 광고 사전 로드를 참고하세요. 광고 사전 로드는 앱 오프닝, 전면 광고, 보상형 광고, 보상형 전면 광고 형식을 지원합니다.

이 페이지에서는 기존 단일 로드 광고 구현을 광고 사전 로드로 이전하는 방법을 안내합니다. 이 가이드에서는 전면 광고를 예로 사용하지만 지원되는 광고 형식에 동일한 프로세스를 적용할 수 있습니다.

기본 요건

계속하기 전에 다음 단계를 완료하세요.

  • 설정 GMA Next-Gen SDK.
  • 기존 단일 로드 광고 구현이 있어야 합니다.
  • 테스트 광고 단위를 사용하여 구현을 확인하려면 테스트 광고를 사용 설정합니다.

광고 사전 로드로 광고 요청

단일 로드에서는 각 광고 요청에 대해 단일 광고를 요청합니다. 광고 사전 로드를 사용하면 미리 로드 ID와 미리 로드 구성으로 미리 로더를 한 번 시작합니다.

다음 예에서는 단일 로드와 광고 사전 로드를 사용한 광고 요청을 비교합니다.

Kotlin

단일 로드:

// Request a single ad.
val adRequest = AdRequest.Builder(adUnitId).build()
InterstitialAd.load(adRequest, adLoadCallback)

광고 사전 로드:

// Start the preloader once with a preload configuration.
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
InterstitialAdPreloader.start(adUnitId, preloadConfig)

자바

단일 로드:

// Request a single ad.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
InterstitialAd.load(adRequest, adLoadCallback);

광고 사전 로드:

// Start the preloader once with a preload configuration.
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
InterstitialAdPreloader.start(adUnitId, preloadConfig);

미리 로드 콜백으로 전환

단일 로드에서는 각 개별 광고 요청에 로드 콜백을 연결합니다. 광고 사전 로드를 사용하면 콜백 리스너를 등록하여 미리 로더 캐시 업데이트를 관찰합니다. 이러한 콜백은 광고가 미리 로드를 완료하거나, 로드에 실패하거나, 캐시를 소진할 때 앱에 알립니다.

다음 예에서는 단일 로드와 광고 사전 로드의 미리 로드 콜백을 등록하는 방법을 비교합니다.

Kotlin

단일 로드:

// Listen for single ad request load results.
val adLoadCallback =
  object : AdLoadCallback<InterstitialAd> {
    override fun onAdLoaded(ad: InterstitialAd) {
      // Ad loaded for a single request.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      Log.d(TAG, "Ad failed to load: ${adError.message}")
    }
  }

InterstitialAd.load(adRequest, adLoadCallback)

광고 사전 로드:

// Observe cache updates across multiple ads.
val preloadCallback =
  object : PreloadCallback {
    override fun onAdPreloaded(
      preloadId: String,
      responseInfo: ResponseInfo,
    ) {
      // Ad preloaded into the cache and is ready to show.
    }

    override fun onAdFailedToPreload(
      preloadId: String,
      adError: LoadAdError,
    ) {
      Log.d(TAG, "Ad failed to preload: ${adError.message}")
    }

    override fun onAdsExhausted(preloadId: String) {
      // All preloaded ads in the cache have been shown.
      Log.d(TAG, "Ads exhausted for: $preloadId")
    }
  }

InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)

자바

단일 로드:

// Listen for single ad request load results.
AdLoadCallback<InterstitialAd> adLoadCallback =
    new AdLoadCallback<InterstitialAd>() {
      @Override
      public void onAdLoaded(@NonNull InterstitialAd ad) {
        // Ad loaded for a single request.
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError adError) {
        Log.d(TAG, "Ad failed to load: " + adError.getMessage());
      }
    };

InterstitialAd.load(adRequest, adLoadCallback);

광고 사전 로드:

// Observe cache updates across multiple ads.
PreloadCallback preloadCallback =
    new PreloadCallback() {
      @Override
      public void onAdPreloaded(
          @NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        // Ad preloaded into the cache and is ready to show.
      }

      @Override
      public void onAdFailedToPreload(
          @NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(TAG, "Ad failed to preload: " + adError.getMessage());
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        // All preloaded ads in the cache have been shown.
        Log.d(TAG, "Ads exhausted for: " + preloadId);
      }
    };

InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

미리 로더는 GMA Next-Gen SDK가 광고를 로드하거나 캐시할 때 또는 앱에서 광고를 표시할 때 콜백 메서드를 호출합니다.

캐시에서 광고 표시

단일 로드에서는 로드된 광고를 변수에 저장하고 광고가 사용 가능할 때 표시합니다. 광고 사전 로드를 사용하면 광고를 표시할 수 있을 때 캐시에서 직접 광고를 가져옵니다. 두 접근 방식 모두 광고를 표시하기 전에 이벤트 리스너를 광고에 연결합니다.

다음 예에서는 광고 사전 로드와 단일 로드를 사용하여 광고를 표시하는 방법을 비교합니다.

Kotlin

단일 로드:

// Retrieve the ad from a saved variable.
val interstitialAd = this.interstitialAd ?: return
// Display the ad.
interstitialAd.show(activity)

광고 사전 로드:

// Retrieve the ad directly from the preloader cache.
val interstitialAd = InterstitialAdPreloader.pollAd(adUnitId) ?: return
// Display the ad.
interstitialAd.show(activity)

자바

단일 로드:

// Retrieve the ad from a saved variable.
InterstitialAd interstitialAd = this.interstitialAd;
if (interstitialAd == null) {
  return;
}
// Display the ad.
interstitialAd.show(activity);

광고 사전 로드:

// Retrieve the ad directly from the preloader cache.
InterstitialAd interstitialAd = InterstitialAdPreloader.pollAd(adUnitId);
if (interstitialAd == null) {
  return;
}
// Display the ad.
interstitialAd.show(activity);

수동 캐싱 및 다시 로드 삭제

미리 로더는 광고를 가져올 때 대체 광고를 자동으로 로드합니다. 단일 로드와 달리 광고 참조를 수동으로 저장하거나 다시 로드 로직을 작성할 필요가 없습니다.

코드에서 다음 패턴을 삭제합니다.

  • 멤버 변수 캐싱: 광고 객체를 저장하는 멤버 변수를 삭제합니다.
  • 수동 다시 로드: 사용자가 광고를 닫거나 광고를 표시하지 못한 후 로드 호출을 삭제합니다.
  • 맞춤 재시도 타이머: 재시도 핸들러, 백오프 루프, 타이머를 삭제합니다. GMA Next-Gen SDK는 실패한 미리 로드 요청을 자동으로 재시도합니다.

전체 예 비교

다음 예에서는 광고 사전 로드로 이전하기 전과 후의 전체 전면 광고 구현을 비교합니다.

Kotlin

단일 로드:

// 1. Maintain a member variable to store the ad.
private var interstitialAd: InterstitialAd? = null

// 2. Load the ad and listen for load completion.
private fun loadAd() {
  val adRequest = AdRequest.Builder(adUnitId).build()
  InterstitialAd.load(
    adRequest,
    object : AdLoadCallback<InterstitialAd> {
      override fun onAdLoaded(ad: InterstitialAd) {
        interstitialAd = ad
      }

      override fun onAdFailedToLoad(adError: LoadAdError) {
        interstitialAd = null
      }
    },
  )
}

// 3. Show the saved ad.
private fun showAd(activity: Activity) {
  val interstitialAd = this.interstitialAd ?: return
  interstitialAd.adEventCallback =
    object : InterstitialAdEventCallback {
      override fun onAdDismissedFullScreenContent() {
        // Reload the ad after dismissal in single-load integrations.
        loadAd()
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError,
      ) {
        Log.d(TAG, "Ad failed to show: ${fullScreenContentError.message}")
      }
    }
  interstitialAd.show(activity)
}

광고 사전 로드:

// 1. Start preloading with a callback to listen for loaded ads.
private fun startPreloading(adUnitId: String) {
  val preloadCallback =
    object : PreloadCallback {
      override fun onAdPreloaded(
        preloadId: String,
        responseInfo: ResponseInfo,
      ) {
        // Ad preloaded successfully.
      }

      override fun onAdFailedToPreload(
        preloadId: String,
        adError: LoadAdError,
      ) {
        Log.d(TAG, "Ad failed to preload: ${adError.message}")
      }
    }

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

// 2. Show the ad immediately after polling.
private fun showAd(activity: Activity, adUnitId: String) {
  val interstitialAd = InterstitialAdPreloader.pollAd(adUnitId) ?: return
  interstitialAd.adEventCallback =
    object : InterstitialAdEventCallback {
      override fun onAdDismissedFullScreenContent() {
        // Preloading automatically fetches a replacement ad.
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError,
      ) {
        Log.d(TAG, "Ad failed to show: ${fullScreenContentError.message}")
      }
    }
  interstitialAd.show(activity)
}

자바

단일 로드:

// 1. Maintain a member variable to store the ad.
private InterstitialAd interstitialAd;

// 2. Load the ad and listen for load completion.
private void loadAd() {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  InterstitialAd.load(
      adRequest,
      new AdLoadCallback<InterstitialAd>() {
        @Override
        public void onAdLoaded(@NonNull InterstitialAd ad) {
          interstitialAd = ad;
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          interstitialAd = null;
        }
      });
}

// 3. Show the saved ad.
private void showAd(Activity activity) {
  if (interstitialAd == null) {
    return;
  }
  interstitialAd.setAdEventCallback(
      new InterstitialAdEventCallback() {
        @Override
        public void onAdDismissedFullScreenContent() {
          // Reload the ad after dismissal in single-load integrations.
          loadAd();
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          Log.d(
              TAG,
              "Ad failed to show: " + fullScreenContentError.getMessage());
        }
      });
  interstitialAd.show(activity);
}

광고 사전 로드:

// 1. Start preloading with a callback to listen for loaded ads.
private void startPreloading(String adUnitId) {
  PreloadCallback preloadCallback =
      new PreloadCallback() {
        @Override
        public void onAdPreloaded(
            @NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
          // Ad preloaded successfully.
        }

        @Override
        public void onAdFailedToPreload(
            @NonNull String preloadId, @NonNull LoadAdError adError) {
          Log.d(TAG, "Ad failed to preload: " + adError.getMessage());
        }
      };

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

// 2. Show the ad immediately after polling.
private void showAd(Activity activity, String adUnitId) {
  InterstitialAd interstitialAd = InterstitialAdPreloader.pollAd(adUnitId);
  if (interstitialAd == null) {
    return;
  }
  interstitialAd.setAdEventCallback(
      new InterstitialAdEventCallback() {
        @Override
        public void onAdDismissedFullScreenContent() {
          // Preloading automatically fetches a replacement ad.
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          Log.d(
              TAG,
              "Ad failed to show: " + fullScreenContentError.getMessage());
        }
      });
  interstitialAd.show(activity);
}

다음 단계

다음 리소스를 살펴보고 미리 로드 기능을 구성하고, 광고 형식을 통합하고, 구현을 테스트하세요.