App-Start-Anzeigen

Diese Anleitung richtet sich an Publisher, die App-Start-Anzeigen mit Google Mobile Ads SDK einbinden.

App-Start-Anzeigen sind ein spezielles Anzeigenformat für Publisher, die auf den Ladebildschirmen ihrer App Einnahmen erzielen möchten. App-Start-Anzeigen können jederzeit geschlossen werden und werden eingeblendet, wenn Nutzer Ihre App in den Vordergrund holen.

Bei App-Start-Anzeigen ist automatisch das Branding Ihrer App zu sehen, damit die Nutzer wissen, dass sie sich in Ihrer App befinden. So sieht eine App-Start-Anzeige aus:

Vorbereitung

Richten Sie Google Mobile Ads SDK ein, bevor Sie fortfahren.

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zur Sperrung Ihres Kontos kommen.

Testanzeigen lassen sich am einfachsten mit unserer speziellen Test-Anzeigenblock-ID für App-Start-Anzeigen laden:

/21775744923/example/app-open

Sie wurde speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können sie beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Ersetzen Sie sie vor der Veröffentlichung Ihrer App einfach durch Ihre eigene Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise von Google Mobile Ads SDK Testanzeigen finden Sie unter Testanzeigen aktivieren.

Application-Klasse erweitern

Erstellen Sie eine neue Klasse, die die Klasse Application erweitert. So können Sie Anzeigen, die an den Status der Anwendung und nicht an eine einzelne Activity gebunden sind, auf eine Weise verwalten, die den Lebenszyklus berücksichtigt:

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

Fügen Sie als Nächstes den folgenden Code zu AndroidManifest.xml hinzu:

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

Hilfskomponente implementieren

Ihre Anzeige sollte schnell eingeblendet werden. Laden Sie sie daher am besten, bevor Sie sie präsentieren müssen. So ist eine Anzeige verfügbar, sobald der Nutzer Ihre App öffnet.

Implementieren Sie eine Hilfskomponente AppOpenAdManager, um die Aufgaben im Zusammenhang mit dem Laden und Präsentieren von App-Start-Anzeigen zu kapseln:

Java

private class AppOpenAdManager {

  private static final String LOG_TAG = "AppOpenAdManager";
  private static final String AD_UNIT_ID = "/21775744923/example/app-open";

  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 val googleMobileAdsConsentManager =
  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

Rufen Sie zum Verwenden von AppOpenAdManager die öffentlichen Wrapper-Methoden für die Singleton-Instanz MyApplication auf. Die Klasse Application interagiert mit dem restlichen Code und delegiert die Aufgabe, die Anzeige zu laden und zu präsentieren, an den Manager.

Anzeige laden

Im nächsten Schritt müssen Sie die Methode loadAd() ausfüllen und die Callbacks für das Laden von Anzeigen verarbeiten.

Java

AppOpenAd.load(
    context,
    "AD_UNIT_ID",
    new AdManagerAdRequest.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",
  AdManagerAdRequest.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
    }
  },
)

Ersetzen Sie AD_UNIT_ID durch Ihre eigene Anzeigenblock-ID.

Anzeige präsentieren

Bei der häufigsten Implementierung von App-Start-Anzeigen wird versucht, eine App-Start-Anzeige beim Start der App zu präsentieren. Wenn die Anzeige nicht bereit ist, werden die App-Inhalte gestartet und eine weitere Anzeige für die nächste Gelegenheit zum Präsentieren einer App-Start-Anzeige vorab geladen. Implementierungsbeispiele finden Sie unter App-Start-Anzeigen.

Der folgende Code präsentiert eine Anzeige und lädt sie anschließend neu:

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

FullScreenContentCallback festlegen

Der FullScreenContentCallback verarbeitet Ereignisse im Zusammenhang mit der Präsentation von AppOpenAd. Legen Sie den Callback fest, bevor Sie AppOpenAd präsentieren:

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

Ablauf von Anzeigen berücksichtigen

Fügen Sie dem AppOpenAdManager eine Methode hinzu, mit der geprüft wird, wie lange es her ist, dass Ihre Anzeigenreferenz geladen wurde, damit keine abgelaufene Anzeige ausgeliefert wird. Prüfen Sie dann mit dieser Methode, ob die Anzeige noch gültig ist.

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

Aktuelle Aktivität im Blick behalten

Zum Präsentieren der Anzeige benötigen Sie einen Activity-Kontext. Registrieren und implementieren Sie Application.ActivityLifecycleCallbacks, um die aktuellste Aktivität im Blick zu behalten.

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 können Sie alle Activity-Ereignisse beobachten. Wenn Sie beobachten, wann Aktivitäten gestartet und beendet werden, können Sie eine Referenz auf die aktuelle Activity im Blick behalten, die Sie dann zum Präsentieren Ihrer App-Start-Anzeige verwenden.

Ereignisse im Vordergrund der App beobachten

So beobachten Sie Ereignisse im Vordergrund der App:

Bibliotheken zur Gradle-Datei hinzufügen

Wenn Sie über Ereignisse im Vordergrund der App benachrichtigt werden möchten, müssen Sie einen DefaultLifecycleObserver registrieren. Fügen Sie die entsprechende Abhängigkeit der Build-Datei auf App-Ebene hinzu:

Kotlin

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

Groovy

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

Lifecycle-Observer-Oberfläche implementieren

Sie können Ereignisse im Vordergrund beobachten, indem Sie die DefaultLifecycleObserver-Oberfläche implementieren.

Implementieren Sie onStart(), um die App-Start-Anzeige zu präsentieren.

Java

@Override
public void onStart(@NonNull LifecycleOwner owner) {
  DefaultLifecycleObserver.super.onStart(owner);
  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)
  }
}

Kaltstarts und Ladebildschirme

In der bisherigen Dokumentation wird davon ausgegangen, dass Sie App-Start-Anzeigen nur präsentieren, wenn Nutzer Ihre App in den Vordergrund holen, während sie im Arbeitsspeicher angehalten wird. „Kaltstarts“ treten auf, wenn Ihre App gestartet wird, aber zuvor nicht im Arbeitsspeicher angehalten wurde.

Ein Beispiel für einen Kaltstart ist, wenn ein Nutzer Ihre App zum ersten Mal öffnet. Bei Kaltstarts haben Sie keine zuvor geladene App-Start-Anzeige, die sofort präsentiert werden kann. Die Verzögerung zwischen dem Zeitpunkt, an dem Sie eine Anzeige anfordern, und dem Zeitpunkt, an dem Sie eine Anzeige erhalten, kann dazu führen, dass Nutzer Ihre App kurz verwenden können, bevor sie von einer Anzeige überrascht werden, die nicht zum Kontext passt. Das sollte vermieden werden, da es zu einer schlechten Nutzererfahrung führt.

Die bevorzugte Methode für App-Start-Anzeigen bei Kaltstarts ist die Verwendung eines Ladebildschirms zum Laden der Assets Ihres Spiels oder Ihrer App. Die Anzeige sollte nur auf dem Ladebildschirm eingeblendet werden. Wenn Ihre App vollständig geladen wurde und der Nutzer zum Hauptinhalt Ihrer App weitergeleitet wurde, sollte die Anzeige nicht mehr präsentiert werden.

Best Practices

Mit App-Start-Anzeigen können Sie auf dem Ladebildschirm Ihrer App Einnahmen erzielen, wenn die App zum ersten Mal gestartet wird und beim Wechsel zwischen Apps. Sie sollten jedoch Best Practices beachten, damit Ihre Nutzer Ihre App gerne verwenden. Es empfiehlt sich, Folgendes zu tun:

  • Präsentieren Sie die erste App-Start-Anzeige erst, nachdem Ihre Nutzer Ihre App einige Male verwendet haben.
  • Präsentieren Sie App-Start-Anzeigen, wenn Ihre Nutzer andernfalls warten müssten, bis Ihre App geladen ist.
  • Wenn sich die App-Start-Anzeige auf einem Ladebildschirm befindet und der Ladevorgang abgeschlossen ist, bevor die Anzeige beendet wird, können Sie den Ladebildschirm mit der Methode onAdDismissedFullScreenContent() beenden.

Beispiele auf GitHub

Nächste Schritte

Sehen Sie sich die folgenden Themen an: