Diese Anleitung richtet sich an Publisher, die App-Open-Anzeigen mit dem Google Mobile Ads SDK einbinden.
App-Start-Anzeigen sind ein spezielles Anzeigenformat für Publisher, die die Ladebildschirme ihrer Apps monetarisieren möchten. App-Start-Anzeigen können jederzeit geschlossen werden. Sie 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. Hier ist ein Beispiel für eine App-Start-Anzeige:
Vorbereitung
- Führen Sie die Schritte im Startleitfaden aus.
Immer Testanzeigen verwenden
Verwenden Sie beim Entwickeln und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zu einer Kontosperrung kommen.
Testanzeigen lassen sich am einfachsten laden, wenn Sie unsere spezielle Test-Anzeigenblock-ID für App-Open-Anzeigen verwenden:
/21775744923/example/app-open
Sie ist speziell dafür konfiguriert, für jede Anfrage Testanzeigen zurückzugeben. Sie können sie also beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Denken Sie daran, sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID zu ersetzen.
Weitere Informationen zur Funktionsweise von Testanzeigen im Google Mobile Ads SDK 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 gebunden sind, auf eine lebenszyklusbewusste Weise verwalten, anstatt nur ein einzelnes Activity
zu verwenden:
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 in Ihre AndroidManifest.xml
ein:
<!-- TODO: Update to reference your actual package name. -->
<application
android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>
Dienstprogrammkomponente 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 Arbeit im Zusammenhang mit dem Laden und Anzeigen 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
Um die AppOpenAdManager
zu verwenden, rufen Sie die öffentlichen Wrapper-Methoden für die Singleton-Instanz MyApplication
auf. Die Klasse Application
interagiert mit dem restlichen Code und delegiert das Laden und Anzeigen der Anzeige an den Manager.
Anzeige laden
Als Nächstes müssen Sie die loadAd()
-Methode ausfüllen und die Rückrufe für das Laden von Anzeigen verarbeiten.
Java
Kotlin
Ersetzen Sie AD_UNIT_ID durch Ihre Anzeigenblock-ID.
Anzeige einblenden
Bei der gängigsten Implementierung von App-Start-Anzeigen wird versucht, eine App-Start-Anzeige kurz nach dem Start der App einzublenden. Wenn die Anzeige nicht bereit ist, werden die App-Inhalte gestartet und eine weitere Anzeige für die nächste Möglichkeit zum Einblenden einer App-Start-Anzeige wird vorab geladen. Leitfaden zu App-Start-Anzeigen
Im folgenden Code wird eine Anzeige eingeblendet und anschließend neu geladen:
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
Die FullScreenContentCallback
verarbeitet Ereignisse im Zusammenhang mit der Anzeige Ihrer AppOpenAd
. Bevor Sie AppOpenAd
anzeigen, müssen Sie den Callback festlegen:
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 der AppOpenAdManager
eine Methode hinzu, die prüft, 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
Damit die Anzeige ausgeliefert werden kann, benötigen Sie einen Activity
-Kontext. Wenn Sie die aktuell verwendete Aktivität im Blick behalten möchten, registrieren Sie sich für Application.ActivityLifecycleCallbacks
und implementieren Sie sie.
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
ermöglicht es Ihnen, auf alle Activity
-Ereignisse zu warten. Indem Sie darauf achten, wann Aktivitäten gestartet und beendet werden, können Sie eine Referenz auf die aktuelle Activity
beibehalten, die Sie dann zum Präsentieren Ihrer App-Open-Anzeige verwenden.
Auf Ereignisse zum Wechsel in den Vordergrund warten
So erfassen 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 Abhängigkeit der Build-Datei auf App-Ebene hinzu:
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' }
LifecycleObserver-Schnittstelle implementieren
Sie können auf Ereignisse im Vordergrund reagieren, indem Sie die DefaultLifecycleObserver
-Schnittstelle implementieren.
Implementieren Sie die 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
Bisher wird in der Dokumentation davon ausgegangen, dass Sie App-Start-Anzeigen nur einblenden, wenn Nutzer Ihre App in den Vordergrund holen, nachdem sie im Arbeitsspeicher angehalten wurde. Von einem „Kaltstart“ spricht man, wenn Ihre App gestartet wird, aber nicht zuvor im Arbeitsspeicher angehalten wurde.
Ein Beispiel für einen Kaltstart ist, wenn ein Nutzer Ihre App zum ersten Mal öffnet. Bei Kaltstarts ist keine zuvor geladene App-Start-Anzeige verfügbar, die sofort ausgeliefert werden kann. Die Verzögerung zwischen dem Anfordern einer Anzeige und dem Erhalt einer Anzeige kann dazu führen, dass Nutzer Ihre App kurzzeitig verwenden können, bevor sie von einer Anzeige überrascht werden, die nicht zum Kontext passt. Dies 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 wird dann nur auf dem Ladebildschirm eingeblendet. Wenn Ihre App vollständig geladen wurde und der Nutzer zum Hauptinhalt Ihrer App weitergeleitet wurde, darf die Anzeige nicht ausgeliefert werden.
Best Practices
Mit App-Start-Anzeigen können Sie den Ladebildschirm Ihrer App monetarisieren, wenn die App zum ersten Mal gestartet wird und wenn Nutzer zwischen Apps wechseln. Dabei ist es wichtig, Best Practices zu beachten, damit Ihre Nutzer die App gerne verwenden. Es empfiehlt sich, Folgendes zu tun:
- Blenden Sie die erste App-Start-Anzeige ein, nachdem die Nutzer Ihre App einige Male verwendet haben.
- Blenden Sie App-Start-Anzeigen ein, wenn Ihre Nutzer ansonsten darauf warten müssten, dass Ihre App geladen wird.
- 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: