Dieser Leitfaden richtet sich an Publisher, die App-Start-Anzeigen integrieren.
App-Start-Anzeigen sind ein spezielles Anzeigenformat für Publisher, die ihre App-Ladebildschirme monetarisieren möchten. App-Start-Anzeigen können von Nutzern jederzeit geschlossen werden. App-Start-Anzeigen können ausgeliefert werden, wenn Nutzer Ihre App im Vordergrund zeigen.
Bei App-Start-Anzeigen wird automatisch ein kleiner Brandingbereich eingeblendet, damit Nutzer wissen, dass sie sich in Ihrer App befinden. Hier ein Beispiel für eine App-Start-Anzeige:
Folgende Schritte sind erforderlich, um App-Start-Anzeigen zu implementieren:
- Erstellen Sie eine Managerklasse, die eine Anzeige lädt, bevor Sie sie präsentieren müssen.
- Anzeigen während Ereignissen, bei denen die App im Vordergrund ist.
- Präsentations-Callbacks verarbeiten
Vorbereitung
- Folgen Sie der Einrichtungsanleitung in unserem Einstiegsleitfaden.
- Informationen zum Konfigurieren Ihres Geräts als Testgerät
Verwenden Sie immer Testanzeigen
Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von aktiven Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Am einfachsten lassen sich Testanzeigen laden, wenn Sie die spezielle Testanzeigenblock-ID für Anzeigen in geöffneten Apps verwenden:
ca-app-pub-3940256099942544/5575463023
Es wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können es beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Ersetzen Sie sie einfach vor der Veröffentlichung Ihrer App durch Ihre Anzeigenblock-ID.
Weitere Informationen zur Funktionsweise von Testanzeigen im Mobile Ads SDK finden Sie unter Testanzeigen.
Managerklasse implementieren
Ihre Anzeige sollte schnell ausgeliefert werden. Laden Sie sie daher am besten schon, bevor sie ausgeliefert werden soll. So ist eine Anzeige bereit, sobald der Nutzer Ihre App öffnet. Implementieren Sie eine Managerklasse, um Anzeigenanfragen zu senden, bevor die Anzeige ausgeliefert werden muss.
Erstellen Sie eine neue Singleton-Klasse namens AppOpenAdManager
und füllen Sie sie wie unten beschrieben aus:
Swift
class AppOpenAdManager: NSObject {
var appOpenAd: GADAppOpenAd?
var isLoadingAd = false.
var isShowingAd = false
static let shared = AppOpenAdManager()
private func loadAd() async {
// TODO: Implement loading an ad.
}
func showAdIfAvailable() {
// TODO: Implement showing an ad.
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil
}
}
Objective-C
@interface AppOpenAdManager ()
@property(nonatomic, strong) GADAppOpenAd *appOpenAd;
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@end
@implementation AppOpenAdManager
+ (nonnull AppOpenAdManager *)sharedInstance {
static AppOpenAdManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[AppOpenAdManager alloc] init];
});
return instance;
}
- (void)loadAd {
// TODO: Implement loading an ad.
}
// Add this method to the .h file.
- (void)showAdIfAvailable {
// TODO: Implement showing an ad.
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil;
}
@end
Anzeige laden
Im nächsten Schritt füllen Sie die loadAd()
-Methode aus.
Swift
private func loadAd() async {
// Do not load ad if there is an unused ad or one is already loading.
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
do {
appOpenAd = try await GADAppOpenAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
}
isLoadingAd = false
}
Objective-C
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
return;
}
self.isLoadingAd = YES;
[GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest request]
completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
self.isLoadingAd = NO;
if (error) {
NSLog(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
}];
}
Anzeige ausliefern
Im nächsten Schritt füllen Sie die showAdIfAvailable()
-Methode aus. Wenn keine Anzeige verfügbar ist, versucht die Methode, eine Anzeige zu laden.
Swift
func showAdIfAvailable() {
// If the app open ad is already showing, do not show the ad again.
guard !isShowingAd else { return }
// If the app open ad is not available yet but is supposed to show, load
// a new ad.
if !isAdAvailable() {
Task {
await loadAd()
}
return
}
if let ad = appOpenAd {
isShowingAd = true
ad.present(fromRootViewController: nil)
}
}
Objective-C
- (void)showAdIfAvailable {
// If the app open ad is already showing, do not show the ad again.
if (self.isShowingAd) {
return;
}
// If the app open ad is not available yet but is supposed to show, load a
// new ad.
if (![self isAdAvailable]) {
[self loadAd];
return;
}
self.isShowingAd = YES;
[self.appOpenAd presentFromRootViewController:nil];
}
Anzeige bei App-Vordergrund-Ereignissen ausliefern
Wenn die Anwendung aktiv ist, wird durch Drücken der Taste showAdIfAvailable()
eine Anzeige eingeblendet, sofern eine verfügbar ist, oder eine neue geladen.
Swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
func applicationDidBecomeActive(_ application: UIApplication) {
// Show the app open ad when the app is foregrounded.
AppOpenAdManager.shared.showAdIfAvailable()
}
}
Objective-C
@implementation AppDelegate
// ...
- (void) applicationDidBecomeActive:(UIApplication *)application {
// Show the app open ad when the app is foregrounded.
[AppOpenAdManager.sharedInstance showAdIfAvailable];
}
@end
Callbacks für Präsentationen verarbeiten
Wenn in Ihrer App eine App-Start-Anzeige ausgeliefert wird, sollten Sie die GADFullScreenContentDelegate
verwenden, um bestimmte Präsentationsereignisse zu verarbeiten. Insbesondere sollten Sie die nächste App-Start-Anzeige anfordern, sobald die erste Anzeige beendet ist.
Fügen Sie in der Klasse AppOpenAdManager
Folgendes hinzu:
Swift
class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
// ...
private func loadAd() async {
// Do not load ad if there is an unused ad or one is already loading.
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
do {
appOpenAd = try await GADAppOpenAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
appOpenAd?.fullScreenContentDelegate = self
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
}
isLoadingAd = false
}
// ...
// MARK: - GADFullScreenContentDelegate methods
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("App open ad will be presented.")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
appOpenAd = nil
isShowingAd = false
// Reload an ad.
Task {
await loadAd()
}
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
appOpenAd = nil
isShowingAd = false
// Reload an ad.
Task {
await loadAd()
}
}
}
Objective-C
@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@end
@implementation AppOpenAdManager
// ...
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
return;
}
self.isLoadingAd = YES;
[GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest request]
completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
self.isLoadingAd = NO;
if (error) {
NSLog(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
}];
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil;
}
// ...
#pragma mark - GADFullScreenContentDelegate methods
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"App open ad is will be presented.");
}
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
self.appOpenAd = nil;
self.isShowingAd = NO;
// Reload an ad.
[self loadAd];
}
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
self.appOpenAd = nil;
self.isShowingAd = NO;
// Reload an ad.
[self loadAd];
}
@end
Ablauf von Anzeigen berücksichtigen
Damit keine abgelaufene Anzeige ausgeliefert wird, können Sie dem App-Delegate eine Methode hinzufügen, die die verstrichene Zeit seit dem Laden Ihrer Anzeigenreferenz prüft.
Fügen Sie in Ihrem AppOpenAdManager
eine Date
-Eigenschaft mit dem Namen loadTime
hinzu und legen Sie die Eigenschaft fest, wenn Ihre Anzeige geladen wird. Sie können dann eine Methode hinzufügen, die true
zurückgibt, wenn seit dem Laden Ihrer Anzeige weniger als eine bestimmte Anzahl von Stunden vergangen ist. Prüfen Sie die Gültigkeit des Anzeigenverweises, bevor Sie versuchen, die Anzeige auszuliefern.
Swift
class AppOpenAdManager: NSObject, GADFullScreenContentDelegate {
var appOpenAd: GADAppOpenAd?
var isLoadingAd = false.
var isShowingAd = false
var loadTime: Date?
let fourHoursInSeconds = TimeInterval(3600 * 4)
// ...
private func loadAd() async {
// Do not load ad if there is an unused ad or one is already loading.
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
do {
appOpenAd = try await GADAppOpenAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/5575463023", request: GADRequest())
appOpenAd?.fullScreenContentDelegate = self
loadTime = Date()
} catch {
print("App open ad failed to load with error: \(error.localizedDescription)")
}
isLoadingAd = false
}
private func wasLoadTimeLessThanFourHoursAgo() -> Bool {
guard let loadTime = loadTime else { return false }
// Check if ad was loaded more than four hours ago.
return Date().timeIntervalSince(loadTime) < fourHoursInSeconds
}
private func isAdAvailable() -> Bool {
// Check if ad exists and can be shown.
return appOpenAd != nil && wasLoadTimeLessThanFourHoursAgo()
}
}
Objective-C
static NSTimeInterval const fourHoursInSeconds = 3600 * 4;
@interface AppOpenAdManager () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADAppOpenAd *appOpenAd
@property(nonatomic, assign) BOOL isLoadingAd;
@property(nonatomic, assign) BOOL isShowingAd;
@property(weak, nonatomic) NSDate *loadTime;
@end
@implementation AppOpenAdManager
// ...
- (void)loadAd {
// Do not load ad if there is an unused ad or one is already loading.
if (self.isLoadingAd || [self isAdAvailable]) {
return;
}
self.isLoadingAd = YES;
[GADAppOpenAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/5575463023"
request:[GADRequest request]
completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, NSError *_Nullable error) {
self.isLoadingAd = NO;
if (error) {
NSLog(@"Failed to load app open ad: %@", error);
return;
}
self.appOpenAd = appOpenAd;
self.appOpenAd.fullScreenContentDelegate = self;
self.loadTime = [NSDate date];
}];
}
- (BOOL)wasLoadTimeLessThanFourHoursAgo {
// Check if ad was loaded more than four hours ago.
return [[NSDate Date] timeIntervalSinceDate:self.loadTime] < fourHoursInSeconds;
}
- (BOOL)isAdAvailable {
// Check if ad exists and can be shown.
return self.appOpenAd != nil && [self wasLoadTimeLessThanFourHoursAgo];
}
@end
Kaltstarts und Ladebildschirme
In der Dokumentation wird davon ausgegangen, dass Sie App-Start-Anzeigen nur dann präsentieren, wenn Nutzer Ihre App in den Vordergrund stellen, während sie im Arbeitsspeicher angehalten ist. Ein Kaltstart tritt 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 gibt es keine zuvor geladene App-Start-Anzeige, die sofort ausgeliefert werden kann. Die Verzögerung zwischen der Anzeigenanfrage und der erneuten Auslieferung der Anzeige kann dazu führen, dass Nutzer Ihre App kurz verwenden können, bevor sie von einer Anzeige außerhalb des Kontexts überrascht werden. Dies sollte vermieden werden, da es die Nutzerfreundlichkeit beeinträchtigt.
App-Start-Anzeigen werden bei Kaltstarts vorzugsweise eingesetzt, wenn zum Laden der Spiel- oder App-Assets ein Ladebildschirm verwendet wird und die Anzeige nur auf dem Ladebildschirm eingeblendet wird. Wenn Ihre App vollständig geladen wurde und der Nutzer zu den Hauptinhalten Ihrer App weitergeleitet wurde, darf die Anzeige nicht ausgeliefert werden.
Best Practices
Google hat App-Start-Anzeigen entwickelt, damit Sie den Ladebildschirm Ihrer App monetarisieren können. Beachten Sie jedoch die Best Practices, damit Ihre Nutzer Ihre App gerne verwenden. Beachten Sie Folgendes:
- Warten Sie, bis Nutzer Ihre App einige Male verwendet haben, bevor Sie die erste App-Start-Anzeige präsentieren.
- App-Start-Anzeigen sollten zu Zeiten ausgeliefert werden, in denen Nutzer sonst auf das Laden Ihrer App warten müssten.
- 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
adDidDismissFullScreenContent
beenden.
Vollständiges Beispiel auf GitHub
Nächste Schritte
Weitere Informationen zum Datenschutz für Nutzer