Tải trước quảng cáo (thử nghiệm)

Chọn nền tảng: Android iOS Unity Android (Cũ)

Tải trước quảng cáo là một tính năng tải quảng cáo do Google quản lý trong GMA Next-Gen SDK. Tính năng này sẽ thay mặt bạn quản lý việc tải và lưu vào bộ nhớ đệm quảng cáo. Tính năng tải trước quảng cáo yêu cầu bạn thay đổi cách quản lý việc tải quảng cáo. Để tối ưu hoá hiệu suất bằng cách sử dụng tính năng tải trước quảng cáo, hãy tắt tính năng lưu vào bộ nhớ đệm tuỳ chỉnh và uỷ quyền trách nhiệm đó cho GMA Next-Gen SDK.

Tính năng tải trước quảng cáo mang lại những lợi ích sau so với tính năng tải quảng cáo theo cách thủ công:

  • Quản lý tài liệu tham khảo: giữ các quảng cáo đã tải để bạn không phải duy trì tài liệu tham khảo cho đến khi sẵn sàng hiển thị.
  • Tự động tải lại: tự động tải một quảng cáo mới khi bạn kéo một quảng cáo ra khỏi bộ nhớ đệm.
  • Thử lại có quản lý: tự động thử lại các yêu cầu không thành công bằng cách sử dụng thuật toán thời gian đợi luỹ thừa.
  • Xử lý thời gian hết hạn: tự động làm mới quảng cáo trước khi quảng cáo hết hạn (thường là sau một giờ).
  • Tối ưu hoá bộ nhớ đệm: Nếu bạn sử dụng kích thước bộ nhớ đệm lớn hơn 1, GMA Next-Gen SDK sẽ tối ưu hoá thứ tự bộ nhớ đệm để phân phối quảng cáo hiệu quả nhất.

Hướng dẫn này trình bày cách định cấu hình quảng cáo tải trước, kiểm tra trạng thái sẵn có của quảng cáo tải trước và hiển thị quảng cáo đã tải trước.

Điều kiện tiên quyết

Trước khi tiếp tục với hướng dẫn này, bạn phải thiết lập GMA Next-Gen SDK.

Bắt đầu tải trước quảng cáo

Khi ứng dụng bắt đầu, hãy gọi phương thức startPreload một lần. Sau khi bạn gọi phương thức startPreload, GMA Next-Gen SDK sẽ tự động tải trước quảng cáo và thử lại các yêu cầu không thành công đối với cấu hình được tải trước.

Ví dụ sau đây bắt đầu tải trước quảng cáo:

Kotlin

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

Java

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

Nhận và hiển thị quảng cáo được tải trước

Khi sử dụng tính năng tải trước quảng cáo, GMA Next-Gen SDK sẽ giữ các quảng cáo được lưu vào bộ nhớ đệm. Khi bạn muốn hiển thị quảng cáo, hãy gọi pollAd. GMA Next-Gen SDK truy xuất quảng cáo hiện có và tự động tải trước quảng cáo tiếp theo ở chế độ nền.

Tránh gọi phương thức pollAd cho đến khi bạn sẵn sàng hiển thị quảng cáo. Việc lưu trữ quảng cáo trong bộ nhớ đệm cho phép GMA Next-Gen SDK tự động làm mới quảng cáo đã hết hạn và tối ưu hoá bộ nhớ đệm.

Ví dụ sau đây truy xuất và hiển thị một quảng cáo được tải trước:

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)
  }
}

Java

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);
  }
}

Nhận siêu dữ liệu quảng cáo được tải trước

Để nhận siêu dữ liệu quảng cáo được tải sẵn, bạn có thể tra cứu đối tượng thông tin phản hồi của quảng cáo. Quy trình này cho phép bạn kiểm tra siêu dữ liệu của quảng cáo mà không cần xoá quảng cáo đó khỏi bộ nhớ đệm.

Ví dụ sau đây tra cứu siêu dữ liệu của một quảng cáo được tải sẵn từ đối tượng thông tin phản hồi:

Kotlin

private fun peekAdResponseInfo(preloadId: String) {
  InterstitialAdPreloader.peekAdResponseInfo(preloadId)?.let {
    Log.d(TAG, "Peeked ad response ID: ${it.responseId}")
  }
}

Java

private void peekAdResponseInfo(String preloadId) {
  ResponseInfo responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId);
  if (responseInfo != null) {
    Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
  }
}

Kiểm tra xem quảng cáo tải trước có sẵn hay không

Để kiểm tra xem quảng cáo có sẵn hay không, hãy chọn một trong các cách sau:

Nhận thông tin về trạng thái sẵn có của quảng cáo được tải trước

Ví dụ sau đây kiểm tra xem quảng cáo có sẵn hay không:

Kotlin

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

Java

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

Theo dõi trạng thái sẵn có của quảng cáo được tải trước

Đăng ký các sự kiện tải trước để nhận thông báo khi quảng cáo được tải trước thành công, không tải trước được hoặc bộ nhớ đệm quảng cáo đã hết.

Các sự kiện tải trước được dùng cho mục đích phân tích. Trong các lệnh gọi lại sự kiện tải trước:

  • Không gọi startPreload
  • Tránh gọi pollAd trừ phi quảng cáo sẽ hiển thị ngay lập tức.

Ví dụ sau đây đăng ký các sự kiện quảng cáo:

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")
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

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

Java

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");
          // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
        }

        @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);
}

Dừng tải trước quảng cáo

Nếu không cần hiển thị lại quảng cáo cho một mã tải trước trong phiên, bạn có thể dừng tải trước quảng cáo. Để ngừng tải trước quảng cáo cho một mã nhận dạng tải trước cụ thể, hãy gọi destroy bằng mã nhận dạng tải trước. Để dừng tải trước cho tất cả các trình tải trước, hãy gọi destroyAll.

Đặt dung lượng bộ nhớ đệm

Dung lượng bộ nhớ đệm kiểm soát số lượng quảng cáo được tải trước và lưu trữ trong bộ nhớ. Theo mặc định, Google tối ưu hoá kích thước vùng đệm để cân bằng mức tiêu thụ bộ nhớ và độ trễ khi phân phát quảng cáo. Nếu ứng dụng của bạn hiển thị quảng cáo trước khi quảng cáo tiếp theo được tải, bạn có thể đặt dung lượng bộ nhớ đệm tuỳ chỉnh để tăng số lượng quảng cáo được lưu giữ trong bộ nhớ.

Kotlin

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

Java

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

Giới hạn bộ nhớ đệm tải trước

GMA Next-Gen SDK áp dụng giới hạn trên toàn ứng dụng đối với tổng số quảng cáo được tải trước trên tất cả các đơn vị quảng cáo và mã nhận dạng tải trước:

  • Giới hạn mặc định: GMA Next-Gen SDK lưu trữ tối đa 6 quảng cáo được tải sẵn trong bộ nhớ. Giới hạn này áp dụng cho tất cả các định dạng và mã nhận dạng tải trước.
  • Bạn nên giữ dung lượng bộ nhớ đệm là 2 hoặc 3 cho mỗi mã nhận dạng tải trước.