Menyiapkan iklan di layar pembuka aplikasi

Vertex AI Pipelines SDK.

Iklan di layar pembuka aplikasi adalah format iklan yang ditujukan bagi penayang yang ingin memonetisasi layar pemuatan aplikasi mereka. Iklan di layar pembuka aplikasi dapat ditutup kapan pun, dan dirancang untuk ditampilkan saat pengguna menampilkan aplikasi ke latar depan.

Untuk mengetahui informasi selengkapnya, lihat Panduan iklan di layar pembuka aplikasi.

Panduan ini menjelaskan cara mengintegrasikan iklan pembuka aplikasi ke dalam aplikasi Android.

Sebelum memulai

Sebelum Anda melanjutkan, lakukan hal berikut:

  • Siapkan GMA Next-Gen SDK.
  • Gunakan ID unit iklan di layar pembuka aplikasi percobaan /6499/example/app-open.
    • Saat membangun dan menguji aplikasi, pastikan Anda menggunakan iklan percobaan, bukan iklan produksi langsung. Jika Anda tidak menggunakan ID unit iklan pengujian, Google dapat menangguhkan akun Anda.
    • Sebelum memublikasikan aplikasi, ganti ID ini dengan ID unit iklan Anda.
    • Untuk mengetahui detail tentang iklan percobaan GMA Next-Gen SDK, lihat artikel Mengaktifkan iklan percobaan.

Memahami pramuat iklan

Pramuat iklan di GMA Next-Gen SDK mengotomatiskan pemuatan dan penyimpanan iklan dalam cache.

Pramuat iklan memberikan manfaat berikut:

  • Pengelolaan referensi: mempertahankan referensi hingga iklan ditampilkan.
  • Pemuatan ulang otomatis: memuat iklan baru saat iklan diambil dari cache.
  • Coba lagi yang dikelola: memuat iklan baru saat iklan gagal dimuat.
  • Penanganan masa berlaku: memuat ulang iklan sebelum masa berlakunya berakhir.
  • Pengoptimalan cache: mengoptimalkan urutan cache untuk menayangkan iklan dengan prioritas tertinggi.

Mulai pramuat iklan

Untuk mulai memuat iklan terlebih dahulu, panggil metode start sekali saat aplikasi dimulai. Setelah Anda memanggil metode start, GMA Next-Gen SDK akan otomatis memuat iklan terlebih dahulu dan mencoba kembali permintaan yang gagal untuk konfigurasi yang dimuat terlebih dahulu.

Contoh berikut menunjukkan cara memulai pemuatan iklan:

Kotlin

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

Java

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

Ganti AD_UNIT_ID dengan ID unit iklan Anda.

Contoh sebelumnya menunjukkan cara menggunakan ID unit iklan sebagai ID pra-muat. ID pemuatan awal adalah ID string yang Anda buat untuk mengidentifikasi konfigurasi pemuatan awal iklan. Jika aplikasi Anda memerlukan beberapa konfigurasi penargetan untuk ID unit iklan yang sama, teruskan ID string kustom.

Mendapatkan dan menampilkan iklan yang sudah dipramuat

Saat Anda ingin menampilkan iklan, panggil metode pollAd. GMA Next-Gen SDK mengambil iklan yang tersedia dan otomatis memuat iklan berikutnya di latar belakang. Jika tidak ada iklan yang tersedia, GMA Next-Gen SDK tidak akan menampilkan iklan.

Saat Anda memiliki objek iklan yang tersedia, panggil metode show untuk menampilkan iklan. Contoh berikut menunjukkan cara mengambil dan menampilkan iklan yang sudah dimuat sebelumnya:

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

Hindari memanggil metode pollAd hingga Anda siap menampilkan iklan. Untuk membaca info respons iklan tanpa menampilkannya, lihat Membaca info respons.

Memproses peristiwa iklan

Sebelum menampilkan iklan, dengarkan peristiwa iklan. Contoh berikut menunjukkan cara mendaftarkan callback untuk peristiwa iklan:

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

Opsional: Memproses peristiwa pra-pemuatan

Saat Anda mulai memuat iklan terlebih dahulu, daftarkan diri untuk menerima notifikasi peristiwa pemuatan iklan terlebih dahulu jika iklan berhasil dimuat terlebih dahulu, gagal dimuat terlebih dahulu, atau cache iklan habis.

Contoh berikut menunjukkan cara mendaftar ke peristiwa iklan pemuatan awal:

Kotlin

private fun startPreloadingWithCallback(adUnitId: String) {
  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

private void startPreloadingWithCallback(String adUnitId) {
  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);
}

Jika iklan gagal dimuat, GMA Next-Gen SDK akan otomatis mem-pramuat iklan dan mencoba lagi permintaan yang gagal untuk konfigurasi pramuat.

Opsional: Periksa ketersediaan iklan

Jika Anda perlu mengetahui apakah iklan tersedia, periksa ketersediaan iklan. Contoh berikut menunjukkan cara memeriksa apakah iklan yang dipramuat tersedia:

Kotlin

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

Java

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

Opsional: Menetapkan ukuran buffer

Ukuran buffer mengontrol jumlah iklan yang dipramuat dan disimpan dalam memori. Secara default, Google mengoptimalkan ukuran buffer untuk menyeimbangkan pemakaian memori dan latensi penayangan iklan. Anda dapat menetapkan ukuran buffer kustom untuk meningkatkan jumlah iklan yang disimpan dalam memori. Sebaiknya gunakan ukuran buffer maksimum empat.

Contoh berikut menunjukkan cara menyetel ukuran buffer empat iklan yang dimuat sebelumnya:

Kotlin

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  // Four is the recommended maximum buffer size.
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 4)
  AppOpenAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  // Four is the recommended maximum buffer size.
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 4);
  AppOpenAdPreloader.start(adUnitId, preloadConfig);
}

Batas cache pra-muat

GMA Next-Gen SDK menerapkan batas di seluruh aplikasi pada jumlah total iklan pramuat di semua unit iklan dan ID pramuat:

  • Batas default: Google menyimpan maksimal 6 iklan yang sudah dimuat sebelumnya dalam memori. Batas ini digunakan bersama di semua format dan ID pramuat.
  • Sebaiknya pertahankan ukuran buffer 2 atau 3 per ID pramuat.

Opsional: Menghentikan pemuatan iklan di awal

Jika tidak perlu menampilkan iklan untuk ID pramuat tertentu lagi dalam sesi, Anda dapat menghentikan pramuat iklan. Untuk berhenti memuat iklan untuk ID pramuat tertentu, panggil metode destroy dengan ID pramuat. Memanggil metode destroy akan menghapus semua iklan pramuat yang terkait dengan ID pramuat dari cache.

Contoh berikut menunjukkan cara menghentikan pemuatan iklan terlebih dahulu:

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

Opsional: Baca info respons

Membaca info respons iklan berikutnya yang telah di-pramuat tanpa menghapus iklan dari cache.

Contoh berikut menunjukkan cara membaca info respons iklan yang di-preload berikutnya:

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

Cold start dan layar pemuatan

Cold start terjadi saat aplikasi Anda diluncurkan dari awal, misalnya, saat pengguna membuka aplikasi Anda untuk pertama kalinya atau setelah penghentian memori. Selama cold start, Anda tidak memiliki iklan di layar pembuka aplikasi yang dimuat sebelumnya dan siap ditampilkan langsung.

Karena penundaan panggilan iklan, pengguna mungkin berinteraksi dengan aplikasi Anda sebelum iklan di layar pembuka aplikasi muncul. Untuk menghindari pengalaman pengguna yang buruk, tampilkan iklan di layar pembuka aplikasi saat cold start hanya dari layar pemuatan saat aset aplikasi dimuat. Jika pemuatan aset selesai dan pengguna mencapai konten utama sebelum iklan dimuat, jangan tampilkan iklan.

Muat aset aplikasi di thread latar belakang sehingga pemuatan berlanjut saat iklan ditampilkan.

Praktik terbaik

Ikuti praktik terbaik berikut untuk iklan di layar pembuka aplikasi:

  • Tampilkan iklan di layar pembuka aplikasi pertama hanya setelah pengguna membuka aplikasi Anda beberapa kali.
  • Tampilkan iklan di layar pembuka aplikasi hanya saat pengguna menunggu aplikasi Anda dimuat.
  • Jika layar pemuatan selesai dimuat saat iklan ditampilkan, tutup layar pemuatan dalam metode callback iklan ditutup.