Iklan di Layar Pembuka Aplikasi

Pilih platform: Android iOS Unity Flutter

Panduan ini ditujukan bagi penayang yang mengintegrasikan iklan pembuka aplikasi menggunakan Google Mobile Ads SDK .

Iklan di layar pembuka aplikasi adalah format iklan khusus 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.

Iklan di layar pembuka aplikasi otomatis menampilkan area branding kecil sehingga pengguna tahu bahwa mereka berada di aplikasi Anda. Berikut adalah contoh tampilan iklan di layar pembuka aplikasi:

Prasyarat

Selalu lakukan pengujian dengan iklan percobaan

Saat membuat dan menguji aplikasi, pastikan Anda menggunakan iklan percobaan, bukan iklan produksi langsung. Jika Anda tidak melakukannya, akun Anda dapat ditangguhkan.

Cara termudah untuk memuat iklan percobaan adalah dengan menggunakan ID unit iklan percobaan khusus kami untuk iklan pembuka aplikasi:

ca-app-pub-3940256099942544/9257395921

ID ini telah dikonfigurasi secara khusus untuk menampilkan iklan pengujian untuk setiap permintaan, dan Anda bebas menggunakannya di aplikasi Anda sendiri saat melakukan coding, pengujian, dan pen-debugan. Pastikan Anda menggantinya dengan ID unit iklan Anda sendiri sebelum memublikasikan aplikasi.

Untuk mengetahui informasi selengkapnya tentang cara kerja iklan percobaan Google Mobile Ads SDK, lihat Mengaktifkan iklan percobaan.

Memperluas class Aplikasi

Buat class baru yang memperluas class Application. Hal ini memberikan cara yang sadar siklus proses untuk mengelola iklan yang terkait dengan status aplikasi, bukan satu Activity:

Java

public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, DefaultLifecycleObserver {

  private AppOpenAdManager appOpenAdManager;
  private Activity currentActivity;

  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);

    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }

Kotlin

class MyApplication :
  MultiDexApplication(), Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver {

  private lateinit var appOpenAdManager: AppOpenAdManager
  private var currentActivity: Activity? = null

  override fun onCreate() {
    super<MultiDexApplication>.onCreate()
    registerActivityLifecycleCallbacks(this)

    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }

Selanjutnya, tambahkan kode berikut ke AndroidManifest.xml Anda:

<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>

Menerapkan komponen utilitas

Iklan Anda akan ditampilkan dengan cepat, jadi sebaiknya muat iklan sebelum Anda perlu menayangkannya. Dengan begitu, Anda akan memiliki iklan yang siap ditayangkan segera setelah pengguna masuk ke aplikasi Anda.

Terapkan komponen utilitas AppOpenAdManager untuk merangkum pekerjaan yang terkait dengan pemuatan dan penayangan iklan di Layar Pembuka Aplikasi:

Java

private class AppOpenAdManager {

  private static final String LOG_TAG = "AppOpenAdManager";
  private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";

  private AppOpenAd appOpenAd = null;
  private boolean isLoadingAd = false;
  private boolean isShowingAd = false;

  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;

  /** Constructor. */
  public AppOpenAdManager() {}

Kotlin

private inner class AppOpenAdManager {

  private var appOpenAd: AppOpenAd? = null
  private var isLoadingAd = false
  var isShowingAd = false

  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0

Untuk menggunakan AppOpenAdManager, panggil metode wrapper publik pada instance singleton MyApplication. Class Application berinteraksi dengan kode lainnya, mendelegasikan tugas memuat dan menampilkan iklan ke pengelola.

Memuat iklan

Langkah berikutnya adalah mengisi metode loadAd() dan menangani callback pemuatan iklan.

Java

AppOpenAd.load(
    context,
    "AD_UNIT_ID",
    new AdRequest.Builder().build(),
    new AppOpenAdLoadCallback() {
      @Override
      public void onAdLoaded(AppOpenAd ad) {
        // Called when an app open ad has loaded.
        Log.d(LOG_TAG, "App open ad loaded.");

        appOpenAd = ad;
        isLoadingAd = false;
        loadTime = (new Date()).getTime();
      }

      @Override
      public void onAdFailedToLoad(LoadAdError loadAdError) {
        // Called when an app open ad has failed to load.
        Log.d(LOG_TAG, "App open ad failed to load with error: " + loadAdError.getMessage());

        isLoadingAd = false;
      }
    });

Kotlin

AppOpenAd.load(
  context,
  "AD_UNIT_ID",
  AdRequest.Builder().build(),
  object : AppOpenAdLoadCallback() {
    override fun onAdLoaded(ad: AppOpenAd) {
      // Called when an app open ad has loaded.
      Log.d(LOG_TAG, "App open ad loaded.")

      appOpenAd = ad
      isLoadingAd = false
      loadTime = Date().time
    }

    override fun onAdFailedToLoad(loadAdError: LoadAdError) {
      // Called when an app open ad has failed to load.
      Log.d(LOG_TAG, "App open ad failed to load with error: " + loadAdError.message)

      isLoadingAd = false
    }
  },
)

Ganti AD_UNIT_ID dengan ID unit iklan Anda sendiri.

Menampilkan iklan

Penerapan iklan di layar pembuka aplikasi yang paling umum adalah mencoba menampilkan iklan di layar pembuka aplikasi di dekat peluncuran aplikasi, memulai konten aplikasi jika iklan belum siap, dan memuat iklan lain terlebih dahulu untuk peluang iklan di layar pembuka aplikasi berikutnya. Lihat Panduan iklan di layar pembuka aplikasi untuk contoh penerapan.

Kode berikut menampilkan dan kemudian memuat ulang iklan:

Java

public void showAdIfAvailable(
    @NonNull final Activity activity,
    @NonNull OnShowAdCompleteListener onShowAdCompleteListener) {
  // If the app open ad is already showing, do not show the ad again.
  if (isShowingAd) {
    Log.d(TAG, "The app open ad is already showing.");
    return;
  }

  // If the app open ad is not available yet, invoke the callback then load the ad.
  if (appOpenAd == null) {
    Log.d(TAG, "The app open ad is not ready yet.");
    onShowAdCompleteListener.onShowAdComplete();
    // Load an ad.
    return;
  }

  isShowingAd = true;
  appOpenAd.show(activity);
}

Kotlin

fun showAdIfAvailable(activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener) {
  // If the app open ad is already showing, do not show the ad again.
  if (isShowingAd) {
    Log.d(TAG, "The app open ad is already showing.")
    return
  }

  // If the app open ad is not available yet, invoke the callback then load the ad.
  if (appOpenAd == null) {
    Log.d(TAG, "The app open ad is not ready yet.")
    onShowAdCompleteListener.onShowAdComplete()
    // Load an ad.
    return
  }

  isShowingAd = true
  appOpenAd?.show(activity)
}

Menetapkan FullScreenContentCallback

FullScreenContentCallback menangani peristiwa yang terkait dengan menampilkan AppOpenAd Anda. Sebelum menampilkan AppOpenAd, pastikan untuk menyetel callback:

Java

appOpenAd.setFullScreenContentCallback(
    new FullScreenContentCallback() {
      @Override
      public void onAdDismissedFullScreenContent() {
        // Called when full screen content is dismissed.
        Log.d(TAG, "Ad dismissed fullscreen content.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        appOpenAd = null;
        isShowingAd = false;

        onShowAdCompleteListener.onShowAdComplete();
        // Load an ad.
      }

      @Override
      public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
        // Called when full screen content failed to show.
        Log.d(TAG, adError.getMessage());
        appOpenAd = null;
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        isShowingAd = false;

        onShowAdCompleteListener.onShowAdComplete();
        // Load an ad.
      }

      @Override
      public void onAdShowedFullScreenContent() {
        Log.d(TAG, "Ad showed fullscreen content.");
      }

      @Override
      public void onAdImpression() {
        // Called when an impression is recorded for an ad.
        Log.d(TAG, "The ad recorded an impression.");
      }

      @Override
      public void onAdClicked() {
        // Called when ad is clicked.
        Log.d(TAG, "The ad was clicked.");
      }
    });

Kotlin

appOpenAd?.fullScreenContentCallback =
  object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
      // Called when full screen content is dismissed.
      Log.d(TAG, "Ad dismissed fullscreen content.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      appOpenAd = null
      isShowingAd = false

      onShowAdCompleteListener.onShowAdComplete()
      // Load an ad.
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
      // Called when full screen content failed to show.
      Log.d(TAG, adError.message)
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      appOpenAd = null
      isShowingAd = false

      onShowAdCompleteListener.onShowAdComplete()
      // Load an ad.
    }

    override fun onAdShowedFullScreenContent() {
      Log.d(TAG, "Ad showed fullscreen content.")
    }

    override fun onAdImpression() {
      // Called when an impression is recorded for an ad.
      Log.d(TAG, "The ad recorded an impression.")
    }

    override fun onAdClicked() {
      // Called when ad is clicked.
      Log.d(TAG, "The ad was clicked.")
    }
  }

Pertimbangkan waktu berakhir iklan

Untuk memastikan Anda tidak menampilkan iklan yang masa berlakunya sudah habis, tambahkan metode ke AppOpenAdManager yang memeriksa durasi iklan sejak referensi iklan dimuat. Kemudian, gunakan metode tersebut untuk memeriksa apakah iklan tersebut masih valid.

Java

/** Check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
  long dateDifference = (new Date()).getTime() - loadTime;
  long numMilliSecondsPerHour = 3600000;
  return (dateDifference < (numMilliSecondsPerHour * numHours));
}

/** Check if ad exists and can be shown. */
private boolean isAdAvailable() {
  // For time interval details, see: https://support.google.com/admob/answer/9341964
  return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}

Kotlin

/** Check if ad was loaded more than n hours ago. */
private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
  val dateDifference: Long = Date().time - loadTime
  val numMilliSecondsPerHour: Long = 3600000
  return dateDifference < numMilliSecondsPerHour * numHours
}

/** Check if ad exists and can be shown. */
private fun isAdAvailable(): Boolean {
  // For time interval details, see: https://support.google.com/admob/answer/9341964
  return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
}

Melacak aktivitas saat ini

Untuk menampilkan iklan, Anda memerlukan konteks Activity. Untuk melacak aktivitas terbaru yang sedang digunakan, daftarkan dan terapkan Application.ActivityLifecycleCallbacks.

Java

@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {}

@Override
public void onActivityStarted(@NonNull Activity activity) {
  // An ad activity is started when an ad is showing, which could be AdActivity class from Google
  // SDK or another activity class implemented by a third party mediation partner. Updating the
  // currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
  // one that shows the ad.
  if (!appOpenAdManager.isShowingAd) {
    currentActivity = activity;
  }
}

@Override
public void onActivityResumed(@NonNull Activity activity) {}

@Override
public void onActivityPaused(@NonNull Activity activity) {}

@Override
public void onActivityStopped(@NonNull Activity activity) {}

@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}

@Override
public void onActivityDestroyed(@NonNull Activity activity) {}

Kotlin

override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

override fun onActivityStarted(activity: Activity) {
  // An ad activity is started when an ad is showing, which could be AdActivity class from Google
  // SDK or another activity class implemented by a third party mediation partner. Updating the
  // currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
  // one that shows the ad.
  if (!appOpenAdManager.isShowingAd) {
    currentActivity = activity
  }
}

override fun onActivityResumed(activity: Activity) {}

override fun onActivityPaused(activity: Activity) {}

override fun onActivityStopped(activity: Activity) {}

override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

override fun onActivityDestroyed(activity: Activity) {}

registerActivityLifecycleCallbacks memungkinkan Anda memproses semua peristiwa Activity. Dengan memantau saat aktivitas dimulai dan dihentikan, Anda dapat melacak referensi ke Activity saat ini, yang kemudian akan Anda gunakan dalam menampilkan iklan pembuka aplikasi.

Memproses peristiwa aplikasi yang ditampilkan di latar depan

Untuk memproses peristiwa latar depan aplikasi, lakukan langkah-langkah berikut:

Tambahkan library ke file gradle Anda

Untuk mendapatkan notifikasi tentang peristiwa latar depan aplikasi, Anda harus mendaftarkan DefaultLifecycleObserver. Tambahkan dependensinya ke file build tingkat aplikasi Anda:

Kotlin

  dependencies {
    implementation("com.google.android.gms:play-services-ads:24.5.0")
    implementation("androidx.lifecycle:lifecycle-process:2.8.3")
  }

Groovy

  dependencies {
    implementation 'com.google.android.gms:play-services-ads:24.5.0'
    implementation 'androidx.lifecycle:lifecycle-process:2.8.3'
  }

Menerapkan antarmuka observer siklus proses

Anda dapat memproses peristiwa pengaktifan di latar depan dengan mengimplementasikan antarmuka DefaultLifecycleObserver.

Terapkan onStart() untuk menampilkan iklan di layar pembuka aplikasi.

Java

@Override
public void onStart(@NonNull LifecycleOwner owner) {
  DefaultLifecycleObserver.super.onStart(owner);
  // Show the ad (if available) when the app moves to foreground.
  appOpenAdManager.showAdIfAvailable(currentActivity);
}

Kotlin

override fun onStart(owner: LifecycleOwner) {
  super.onStart(owner)
  currentActivity?.let {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(it)
  }
}

Cold start dan layar pemuatan

Dokumentasi sejauh ini mengasumsikan bahwa Anda hanya menampilkan iklan di layar pembuka aplikasi saat pengguna memunculkan aplikasi Anda di latar depan saat aplikasi ditangguhkan dalam memori. "Start cold" terjadi saat aplikasi Anda diluncurkan, tetapi sebelumnya tidak ditangguhkan dalam memori.

Contoh start dingin adalah saat pengguna membuka aplikasi Anda untuk pertama kalinya. Dengan start dingin, Anda tidak akan memiliki iklan buka aplikasi yang dimuat sebelumnya yang siap ditampilkan dengan segera. Penundaan antara saat Anda meminta iklan dan menerima iklan kembali dapat menciptakan situasi di mana pengguna dapat menggunakan aplikasi Anda secara singkat sebelum terkejut dengan iklan di luar konteks. Hal ini harus dihindari karena merupakan pengalaman pengguna yang buruk.

Cara terbaik untuk menggunakan iklan di layar pembuka aplikasi pada cold start adalah dengan menggunakan layar pemuatan untuk memuat aset game atau aplikasi Anda, dan hanya menampilkan iklan dari layar pemuatan. Jika aplikasi Anda telah selesai dimuat dan telah mengarahkan pengguna ke konten utama aplikasi Anda, jangan tampilkan iklan.

Praktik terbaik

Iklan di layar pembuka aplikasi membantu Anda memonetisasi layar pemuatan aplikasi, saat aplikasi diluncurkan pertama kali dan selama peralihan aplikasi, tetapi penting untuk mengingat praktik terbaik agar pengguna menikmati penggunaan aplikasi Anda. Sebaiknya:

  • Tampilkan iklan di layar pembuka aplikasi pertama setelah pengguna menggunakan aplikasi Anda beberapa kali.
  • Tampilkan iklan di layar pembuka aplikasi selama waktu saat pengguna Anda biasanya menunggu aplikasi Anda dimuat.
  • Jika Anda memiliki layar pemuatan di belakang iklan di layar pembuka aplikasi, dan layar pemuatan selesai dimuat sebelum iklan ditutup, sebaiknya hapus layar pemuatan dalam metode onAdDismissedFullScreenContent().

Contoh di GitHub

Langkah berikutnya

Pelajari topik berikut: