Thiết lập quảng cáo khi mở ứng dụng

Quảng cáo khi mở ứng dụng là một định dạng quảng cáo dành cho những nhà xuất bản muốn kiếm tiền từ màn hình tải ứng dụng của họ. Người dùng có thể đóng quảng cáo khi mở ứng dụng bất cứ lúc nào. Khi người dùng đưa ứng dụng của bạn lên nền trước, hãy hiển thị quảng cáo khi mở ứng dụng.

Để biết thêm thông tin, hãy xem Hướng dẫn về quảng cáo khi mở ứng dụng.

Tài liệu hướng dẫn này giải thích cách tích hợp quảng cáo khi mở ứng dụng vào một ứng dụng Android.

Trước khi bắt đầu

Trước khi tiếp tục, hãy làm như sau:

  • Thiết lập GMA Next-Gen SDK.
  • Sử dụng mã đơn vị quảng cáo thử nghiệm khi mở ứng dụng /21775744923/example/app-open.
    • Khi bạn tạo và thử nghiệm ứng dụng, hãy nhớ sử dụng quảng cáo thử nghiệm thay vì quảng cáo sản phẩm đang chạy trong thực tế. Nếu bạn không sử dụng mã đơn vị quảng cáo thử nghiệm, Google có thể tạm ngưng tài khoản của bạn.
    • Trước khi xuất bản ứng dụng, hãy thay thế mã này bằng mã đơn vị quảng cáo của bạn.
    • Để biết thông tin chi tiết về quảng cáo thử nghiệm GMA Next-Gen SDK, hãy xem bài viết Bật quảng cáo thử nghiệm.

Tìm hiểu về tính năng tải trước quảng cáo (thử nghiệm)

Tính năng tải trước quảng cáo trong GMA Next-Gen SDK tự động hoá việc tải quảng cáo và lưu vào bộ nhớ đệm.

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

  • Quản lý tệp đối chiếu: duy trì tệp đối chiếu cho đến khi quảng cáo xuất hiện.
  • Tự động tải lại: tải một quảng cáo mới khi một quảng cáo được truy xuất từ bộ nhớ đệm.
  • Lượt thử lại được quản lý: tải một quảng cáo mới khi không tải được quảng cáo.
  • Xử lý hết hạn: làm mới quảng cáo trước khi hết hạn.
  • Tối ưu hoá bộ nhớ đệm: tối ưu hoá thứ tự bộ nhớ đệm để phân phối quảng cáo có mức độ ưu tiên cao nhất.

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

Để bắt đầu tải trước quảng cáo, hãy gọi phương thức start một lần khi bạn khởi chạy GMA Next-Gen SDK. Sau khi bạn gọi phương thức start, 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 cho thấy cách bắt đầu tải trước quảng cáo:

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
AppOpenAdPreloader.start(adUnitId, preloadConfig)

Java

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
AppOpenAdPreloader.start(adUnitId, preloadConfig);

Thay thế AD_UNIT_ID bằng mã đơn vị quảng cáo của bạn.

Ví dụ trước cho thấy cách sử dụng mã đơn vị quảng cáo làm mã tải trước. Mã tải trước là một giá trị nhận dạng chuỗi mà bạn tạo để xác định cấu hình tải trước quảng cáo. Nếu ứng dụng của bạn yêu cầu nhiều cấu hình nhắm mục tiêu cho cùng một mã đơn vị quảng cáo, hãy truyền một giá trị nhận dạng chuỗi tuỳ chỉnh.

Tính năng tải trước quảng cáo không hỗ trợ việc thay đổi các tham số nhắm mục tiêu hoặc yêu cầu quảng cáo. Nếu bạn cần thay đổi các tham số nhắm mục tiêu giữa các yêu cầu, hãy sử dụng tính năng tải một lần.

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

Trước khi hiển thị quảng cáo, hãy gọi phương thức pollAd. Đừng lưu trữ đối tượng quảng cáo được tải trước. Khi bạn gọi phương thức pollAd, GMA Next-Gen SDK sẽ truy xuất một quảng cáo có sẵn và tự động tải trước quảng cáo tiếp theo ở chế độ nền. Nếu không có quảng cáo nào, GMA Next-Gen SDK sẽ không trả về quảng cáo.

Khi bạn có một đối tượng quảng cáo có sẵn, hãy gọi phương thức show để hiển thị quảng cáo. Ví dụ sau đây cho thấy cách truy xuất và hiển thị 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 = AppOpenAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "App open ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "App open ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : AppOpenAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "App open ad recorded an impression.")
      }
    }
  ad.show(activity)
}

Java

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

  // Interact with the ad object as needed.
  if (ad == null) {
    Log.e(TAG, "App open ad is not available.");
    return;
  }

  Log.d(TAG, "App open ad response info: " + ad.getResponseInfo());
  ad.setAdEventCallback(
      new AppOpenAdEventCallback() {
        @Override
        public void onAdImpression() {
          Log.d(TAG, "App open ad recorded an impression.");
        }
      });

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

Khi ứng dụng của bạn đạt đến một vị trí đặt quảng cáo và có thể gọi phương thức show, hãy gọi phương thức pollAd. Đừng gọi phương thức pollAd trong lệnh gọi lại tải trước hoặc sau khi kiểm tra phương thức isAdAvailable để giữ quảng cáo. Nếu bạn cần kiểm tra siêu dữ liệu quảng cáo trước khi hiển thị quảng cáo, hãy đọc thông tin phản hồi mà không xoá quảng cáo khỏi bộ nhớ đệm.

Theo dõi các sự kiện quảng cáo

Trước khi hiển thị quảng cáo, hãy theo dõi các sự kiện quảng cáo. Ví dụ sau đây đăng ký lệnh gọi lại cho các sự kiện quảng cáo:

Kotlin

private fun listenToAdEvents() {
  // Listen for ad events.
  val ad = appOpenAd
  if (ad == null) {
    Log.e(TAG, "App open ad is not ready yet.")
    return
  }

  ad.adEventCallback =
    object : AppOpenAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // App open ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // App open ad did dismiss.
        appOpenAd = null
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // App open ad failed to show.
        Log.e(TAG, "App open ad failed to show: ${fullScreenContentError.message}")
      }

      override fun onAdImpression() {
        // App open ad did record an impression.
      }

      override fun onAdClicked() {
        // App open ad did record a click.
      }
    }
}

Java

private void listenToAdEvents() {
  // Listen for ad events.
  if (appOpenAd == null) {
    Log.e(TAG, "App open ad is not ready yet.");
    return;
  }

  appOpenAd.setAdEventCallback(
      new AppOpenAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // App open ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // App open ad did dismiss.
          appOpenAd = null;
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // App open ad failed to show.
          Log.e(TAG, "App open ad failed to show: " + fullScreenContentError.getMessage());
        }

        @Override
        public void onAdImpression() {
          // App open ad did record an impression.
        }

        @Override
        public void onAdClicked() {
          // App open ad did record a click.
        }
      });
}

Không bắt buộc: Theo dõi các sự kiện tải trước

Khi bạn bắt đầu tải trước quảng cáo, hãy đăng ký 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.

Ví dụ sau đây cho thấy cách đăng ký các sự kiện tải trước quảng cáo:

Kotlin

val preloadCallback =
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(TAG, "App open preload ad $preloadId failed to load with error: ${adError.message}")
    }

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

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

Java

PreloadCallback preloadCallback =
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "App open preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        Log.i(TAG, String.format("App open preload ad %s is not available", preloadId));
      }

      @Override
      public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        Log.i(TAG, String.format("App open preload ad %s is available", preloadId));
      }
    };
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
AppOpenAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

Khi không tải được quảng cáo, 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. Không gọi yêu cầu tải thủ công trong lệnh gọi lại không thành công. Trong các phương thức gọi lại sự kiện tải trước, đừng gọi phương thức pollAd, destroy hoặc start. Việc gọi các phương thức này trong lệnh gọi lại có thể gọi các vòng lặp tải đệ quy.

Không bắt buộc: Kiểm tra xem có quảng cáo hay không

Nếu bạn cần biết liệu có quảng cáo hay không, hãy kiểm tra xem có quảng cáo hay không. Ví dụ sau đây kiểm tra xem có quảng cáo được tải trước hay không:

Kotlin

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

Java

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

Không bắt buộc: Đặ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 trong bộ nhớ. Theo mặc định, Google tối ưu hoá dung lượng bộ nhớ đệm để cân bằng mức tiêu thụ bộ nhớ và độ trễ phân phát quảng cáo. Bạn có thể đặt dung lượng bộ nhớ đệm tuỳ chỉnh để tăng hoặc giảm số lượng quảng cáo được lưu trong bộ nhớ. Bạn nên đặt dung lượng bộ nhớ đệm là 2 quảng cáo được tải trước. Nếu hầu hết lưu lượng truy cập của bạn đến từ các thiết bị có bộ nhớ thấp, hãy giảm dung lượng bộ nhớ đệm.

Ví dụ sau đây cho thấy cách đặt dung lượng bộ nhớ đệm:

Kotlin

val adRequest = AdRequest.Builder(adUnitId).build()
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2)
AppOpenAdPreloader.start(adUnitId, preloadConfig)

Java

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
// Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2);
AppOpenAdPreloader.start(adUnitId, preloadConfig);

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

GMA Next-Gen SDK thực thi 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ả đơn vị quảng cáo và mã tải trước:

  • Giới hạn mặc định: Google lưu giữ tối đa 6 quảng cáo được tải trước trong bộ nhớ. Giới hạn này được áp dụng cho tất cả định dạng và mã tải trước.
  • Bạn nên duy trì dung lượng bộ nhớ đệm là 2 cho mỗi mã tải trước.

Không bắt buộc: Ngừng tải trước quảng cáo

Tiếp tục tải trước trong khi ứng dụng của bạn phân phát quảng cáo. Trong thời gian này, đừng gọi phương thức destroy. Nếu không cần hiển thị lại quảng cáo cho một mã tải trước cụ thể trong phiên, bạn có thể dừng tải trước quảng cáo. Để dừng tải quảng cáo cho một mã tải trước cụ thể, hãy gọi phương thức destroy bằng mã tải trước. Khi gọi phương thức destroy, tất cả quảng cáo được tải trước liên kết với mã tải trước sẽ bị xoá khỏi bộ nhớ đệm.

Ví dụ sau đây cho thấy cách dừng tải trước quảng cáo:

Kotlin

private fun stopPreloading(adUnitId: String) {
  // Stops the preloading and destroy preloaded ads.
  AppOpenAdPreloader.destroy(adUnitId)
}

Java

private void stopPreloading(String adUnitId) {
  // Stops the preloading and destroy preloaded ads.
  AppOpenAdPreloader.destroy(adUnitId);
}

Không bắt buộc: Đọc thông tin trả lời

Đọc thông tin phản hồi của quảng cáo được tải trước tiếp theo mà không xoá quảng cáo khỏi bộ nhớ đệm. Nếu bạn cần kiểm tra siêu dữ liệu quảng cáo trước khi hiển thị quảng cáo, hãy đọc thông tin phản hồi thay vì gọi phương thức pollAd.

Ví dụ sau đây cho thấy cách đọc thông tin phản hồi quảng cáo được tải trước tiếp theo:

Kotlin

val responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId)
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.")
  return
}

Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")

Java

ResponseInfo responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());

Xử lý khởi động nguội và màn hình tải

Quá trình khởi động nguội xảy ra khi ứng dụng của bạn chạy từ ổ đĩa, còn quá trình khởi động ấm xảy ra khi bạn mở lại ứng dụng từ bộ nhớ. Trong trường hợp khởi động nguội, bạn không có quảng cáo được tải trước để hiển thị ngay lập tức. Trong trường hợp khởi động ấm, bạn vẫn có thể có một quảng cáo được tải trước và sẵn sàng hiển thị.

Trong quá trình khởi động nguội, người dùng có thể tương tác với ứng dụng của bạn trước khi ứng dụng tải và hiển thị quảng cáo. Để tránh mang lại trải nghiệm kém cho người dùng, hãy chỉ hiển thị quảng cáo khi mở ứng dụng vào lúc khởi động nguội trên màn hình tải trong khi các thành phần của ứng dụng đang tải. Nếu quá trình tải thành phần hoàn tất và người dùng truy cập vào nội dung chính trước khi quảng cáo tải, thì đừng hiển thị quảng cáo.

Đề xuất

Hãy làm theo các đề xuất sau đây cho quảng cáo khi mở ứng dụng:

  • Đừng hiển thị quảng cáo khi mở ứng dụng trong lần đầu tiên khởi động ứng dụng.
  • Nếu màn hình tải của bạn tải xong trong khi quảng cáo đang hiển thị, hãy đóng màn hình tải theo phương thức gọi lại quảng cáo đã đóng.
  • Quảng cáo khi mở ứng dụng sẽ hết hạn sau 4 giờ kể từ khi tải. Đừng hiển thị quảng cáo khi mở ứng dụng đã được tải hơn 4 giờ.