Interstitial-Anzeigen

Interstitial-Anzeigen sind Vollbildanzeigen, die die Benutzeroberfläche einer App überlagern, bis sie vom Nutzer geschlossen werden. Sie werden in der Regel an natürlichen Übergangspunkten innerhalb einer App eingeblendet, z. B. zwischen Aktivitäten oder Levels. Wenn in einer App eine Interstitial-Anzeige eingeblendet wird, kann der Nutzer entweder auf die Anzeige tippen und zum Ziel weitergeleitet werden oder sie schließen und zur App zurückkehren. Fallstudie

In diesem Leitfaden erfahren Sie, wie Sie Interstitial-Anzeigen in eine iOS-App einbinden.

Vorbereitung

  • Google Mobile Ads SDK 8.0.0 oder höher
  • Führen Sie die Schritte im Startleitfaden aus.

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 Test-Anzeigenblock-ID für iOS-Interstitials verwenden:
/21775744923/example/interstitial

Es wurde speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können es in Ihren eigenen Apps verwenden, während Sie Code schreiben, testen und debuggen. Achten Sie darauf, sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID zu ersetzen.

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

Implementierung

Die wichtigsten Schritte zur Integration von Interstitial-Anzeigen:

  1. Laden Sie eine Anzeige.
  2. Registrieren Sie sich für Callbacks.
  3. Die Anzeige wird ausgeliefert.

Anzeige laden

Anzeigen werden mit der Methode load(adUnitID:request) der Klasse GAMInterstitialAd geladen.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
  private var interstitialAd: GADInterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

Für Callbacks registrieren

Wenn Sie Benachrichtigungen zu Präsentationsereignissen erhalten möchten, müssen Sie das GADFullScreenContentDelegate-Protokoll implementieren und der fullScreenContentDelegate-Property der zurückgegebenen Anzeige zuweisen. Das GADFullScreenContentDelegate-Protokoll verarbeitet Callbacks für den erfolgreichen oder fehlgeschlagenen Anzeigenbereitstellungsvorgang und für das Schließen der Anzeige. Im folgenden Code wird gezeigt, wie das Protokoll implementiert und der Anzeige zugewiesen wird:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
        interstitial?.fullScreenContentDelegate = self
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

Weisen Sie der zurückgegebenen Anzeige das Attribut fullScreenContentDelegate zu:

interstitialAd?.fullScreenContentDelegate = self

Implementieren Sie das Protokoll:

func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: GADFullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

GAMInterstitialAd ist ein Einmalobjekt. Das bedeutet, dass eine Interstitial-Anzeige, die einmal ausgeliefert wurde, nicht noch einmal ausgeliefert werden kann. Es empfiehlt sich, in der adDidDismissFullScreenContent:-Methode auf GADFullScreenContentDelegate eine weitere Interstitial-Anzeige zu laden, damit die nächste Interstitial-Anzeige geladen wird, sobald die vorherige geschlossen wird.

Anzeige präsentieren

Interstitials sollten bei natürlichen Pausen im Ablauf einer App eingeblendet werden. Ein gutes Beispiel hierfür sind die Pausen zwischen den Levels eines Spiels oder wenn der Nutzer eine Aufgabe abgeschlossen hat.

Swift

guard let interstitial = interstitial else {
  return print("Ad wasn't ready.")
}

// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)

SwiftUI

Überwachen Sie UI-Ereignisse in der Ansicht, um zu bestimmen, wann die Anzeige ausgeliefert werden soll.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

Interstitial-Anzeige über das Ansichtsmodell präsentieren:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(fromRootViewController: nil)
}

Objective-C

if (self.interstitial) {
  // The UIViewController parameter is nullable.
  [self.interstitial presentFromRootViewController:nil];
} else {
  NSLog(@"Ad wasn't ready");
}

Best Practices

Überlegen Sie, ob Interstitial-Anzeigen die richtige Art von Anzeigen für Ihre App sind.
Interstitial-Anzeigen funktionieren am besten in Apps mit natürlichen Übergangspunkten. Ein solcher Punkt wird durch den Abschluss einer Aufgabe in einer App wie dem Teilen eines Bildes oder dem Abschließen eines Spiellevels erstellt. Da Nutzer eine Pause in der Aktion erwarten, ist es einfach, eine Interstitial-Anzeige einzublenden, ohne die Nutzererfahrung zu beeinträchtigen. Berücksichtigen Sie, an welchen Stellen im Workflow Ihrer App Sie Interstitial-Anzeigen schalten und wie Nutzer wahrscheinlich reagieren.
Denken Sie daran, die Aktion zu pausieren, wenn eine Interstitial-Anzeige ausgeliefert wird.
Es gibt verschiedene Arten von Interstitial-Anzeigen, z. B. Text-, Bild- und Videoanzeigen. Achten Sie darauf, dass die Verwendung einiger Ressourcen in Ihrer App ausgesetzt wird, wenn eine Interstitialanzeige eingeblendet wird, damit die Anzeige diese Ressourcen nutzen kann. Wenn Sie beispielsweise die Anzeige eines Interstitials aufrufen, sollten Sie alle Audioausgaben Ihrer App pausieren. Sie können die Wiedergabe von Tönen im Ereignishandler adDidDismissFullScreenContent: fortsetzen, der aufgerufen wird, wenn der Nutzer die Interaktion mit der Anzeige beendet hat. Außerdem sollten Sie alle intensiven Rechenaufgaben (z. B. einen Gameloop) vorübergehend anhalten, während die Anzeige eingeblendet wird. So wird sichergestellt, dass die Grafik nicht zu langsam oder nicht reaktionsschnell ist und das Video nicht ruckelt.
Planen Sie ausreichend Zeit für das Laden ein.
Interstitial-Anzeigen sollten nicht nur zum richtigen Zeitpunkt ausgeliefert werden, sondern auch schnell geladen werden, damit Nutzer nicht warten müssen. Wenn Sie die Anzeige im Voraus laden, bevor Sie sie präsentieren möchten, ist in Ihrer App eine vollständig geladene Interstitial-Anzeige verfügbar, wenn es an der Zeit ist, sie einzublenden.
Überschütten Sie die Nutzer nicht mit Anzeigen.
Die Häufigkeit von Interstitial-Anzeigen in Ihrer App zu erhöhen, mag zwar eine gute Möglichkeit sein, den Umsatz zu steigern, kann aber auch die Nutzerfreundlichkeit beeinträchtigen und die Klickrate senken. Achten Sie darauf, dass Nutzer nicht so häufig unterbrochen werden, dass sie Ihre App nicht mehr richtig nutzen können.
Verwenden Sie den Callback zum Abschluss des Ladevorgangs nicht, um das Interstitial anzuzeigen.
Das kann zu einer schlechten Nutzererfahrung führen. Laden Sie die Anzeige stattdessen vorab, bevor Sie sie ausliefern müssen. Prüfen Sie dann unter GAMInterstitialAd, ob die canPresentFromRootViewController:error:-Methode bereit ist, angezeigt zu werden.

Beispiele auf GitHub

Vollständige Beispiele für Interstitial-Anzeigen in Ihrer bevorzugten Sprache ansehen:

Nächste Schritte