Anzeigen mit Prämie

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer interagieren können, wenn sie eine In-App-Prämie erhalten. In diesem Leitfaden erfahren Sie, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Einige Erfolgsgeschichten von Kunden lesen: Fallstudie 1, Fallstudie 2

Voraussetzungen

  • Google Mobile Ads SDK 8.0.0 oder höher
  • Folgen Sie der Anleitung im Startleitfaden.

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen statt Live-Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.

Am einfachsten laden Sie die Testanzeigen mit der ID des entsprechenden Testanzeigenblocks für iOS-Anzeigen mit Prämie:

ca-app-pub-3940256099942544/1712485313

Es wurde speziell für die Rückgabe von Testanzeigen für jede Anfrage konfiguriert und kann in Ihren eigenen Apps beim Codieren, Testen und Debuggen verwendet werden. Ersetzen Sie diese vor dem Veröffentlichen Ihrer App einfach durch Ihre eigene Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise der Testanzeigen des Mobile Ads SDK finden Sie unter Testanzeigen.

Implementierung

So binden Sie Interstitial-Anzeigen mit Prämie ein:

  • Anzeige laden
  • [Optional] SSV-Callbacks validieren
  • Für Callbacks registrieren
  • Die Anzeige einblenden und das Prämienereignis bearbeiten

Anzeige laden

Eine Anzeige wird mithilfe der statischen Methode loadWithAdUnitID:request:completionHandler: in der Klasse GADRewardedAd geladen. Für die Lademethode sind Ihre Anzeigenblock-ID, ein GADRequest-Objekt und ein Abschluss-Handler erforderlich, die aufgerufen werden, wenn das Laden der Anzeige erfolgreich ist oder fehlschlägt. Das geladene GADRewardedAd-Objekt wird als Parameter im Abschluss-Handler bereitgestellt. Im folgenden Beispiel wird gezeigt, wie ein GADRewardedAd in eine ViewController-Klasse geladen wird.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[Optional] Validierung der serverseitigen Bestätigung (SSV)

Bei Apps, für die zusätzliche Daten in serverseitigen Bestätigungs-Callbacks erforderlich sind, sollte die benutzerdefinierte Datenfunktion von Anzeigen mit Prämie verwendet werden. Jeder Stringwert, der für ein Anzeigenobjekt mit Prämie festgelegt ist, wird an den Abfrageparameter custom_data des SSV-Callbacks übergeben. Wenn kein benutzerdefinierter Datenwert festgelegt ist, ist der Wert des custom_data-Abfrageparameters nicht im SSV-Callback vorhanden.

Im folgenden Codebeispiel wird gezeigt, wie Sie benutzerdefinierte Daten für ein Anzeigenobjekt mit Prämie festlegen, bevor Sie eine Anzeige anfordern.

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

Objective-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

Für Callbacks registrieren

Wenn Sie Benachrichtigungen zu Präsentationsereignissen erhalten möchten, müssen Sie das GADFullScreenContentDelegate-Protokoll implementieren und es der Property fullScreenContentDelegate der zurückgegebenen Anzeige zuweisen. Das Protokoll GADFullScreenContentDelegate verarbeitet Callbacks, wenn die Anzeige erfolgreich oder nicht erfolgreich präsentiert oder abgelehnt wurde. Der folgende Code zeigt, wie das Protokoll implementiert und der Anzeige zugewiesen wird:

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

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

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.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.");
}

GADRewardedAd ist ein Objekt zur einmaligen Verwendung. Wenn eine Anzeige mit Prämie präsentiert wurde, kann sie also nicht noch einmal ausgeliefert werden. Als Best Practice wird empfohlen, eine weitere Anzeige mit Prämie in der Methode adDidDismissFullScreenContent: von GADFullScreenContentDelegate zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige Anzeige verworfen wurde.

Die Anzeige einblenden und das Prämienereignis bearbeiten

Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie den Nutzern explizit die Möglichkeit geben, sich Anzeigen mit Prämie anzusehen. Anzeigen mit Prämie müssen immer aktiviert werden.

Wenn Sie Ihre Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler-Objekt angeben, mit dem die Prämie für den Nutzer verarbeitet werden soll.

Der folgende Code stellt die beste Methode zum Ausliefern einer Anzeige mit Prämie dar.

Swift

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

FAQ

Kann ich die Prämiendetails für die GADRewardedAd abrufen?
Ja. Wenn du den Prämienbetrag benötigst, bevor der userDidEarnReward-Callback ausgelöst wird, gibt es in GADRewardedAd eine adReward-Property, über die du den Prämienbetrag nach dem Laden der Anzeige prüfen kannst.
Gibt es eine Zeitüberschreitung für den Initialisierungsaufruf?
Nach 10 Sekunden ruft das Google Mobile Ads SDK die GADInitializationCompletionHandler auf, die der Methode startWithCompletionHandler: zur Verfügung gestellt wurde, auch wenn ein Vermittlungsnetzwerk die Initialisierung noch nicht abgeschlossen hat.
Was kann ich tun, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?

Wir empfehlen, eine Anzeige in den GADInitializationCompletionHandler zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK dieses Netzwerk immer noch auf eine Anzeige. Wenn also ein Vermittlungsnetzwerk nach dem Zeitlimit die Initialisierung abgeschlossen hat, kann es zukünftige Anzeigenanfragen in dieser Sitzung verarbeiten.

Sie können den Initialisierungsstatus aller Adapter während der gesamten Anwendungssitzung durch Aufrufen von GADMobileAds.initializationStatus abfragen.

Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?

Das Attribut description eines GADAdapterStatus-Objekts beschreibt, warum ein Adapter noch nicht für die Verarbeitung von Anzeigenanfragen bereit ist.

Wird der Abschluss-Handler für userDidEarnRewardHandler immer vor der Delegierungsmethode adDidDismissFullScreenContent: aufgerufen?

Bei Google Anzeigen erfolgen alle userDidEarnRewardHandler-Aufrufe vor dem adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, wird die Callback-Reihenfolge durch das SDK des Drittanbieter-Werbenetzwerks bestimmt. Bei Werbenetzwerk-SDKs, die eine einzelne Delegatmethode mit Prämieninformationen bereitstellen, ruft der Vermittlungsadapter userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub