Anzeigen mit Prämie

Anzeigen mit Prämie können von Nutzern genutzt werden, um eine Prämie für In-App-Prämien zu erhalten. In diesem Leitfaden wird erläutert, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Hier finden Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.

Vorbereitung

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

Immer mit Testanzeigen testen

Achten Sie beim Erstellen und Testen Ihrer Apps darauf, Testanzeigen und keine aktiven Anzeigen zu verwenden. Andernfalls kann Ihr Konto gesperrt werden.

Testanzeigen lassen sich am einfachsten mit der entsprechenden Testanzeigenblock-ID für iOS-Anzeigen mit Prämie laden:

ca-app-pub-3940256099942544/1712485313

Es wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können es in Ihren eigenen Apps verwenden, wenn Sie programmieren, testen und Fehler beheben möchten. Ersetzen Sie sie vor der Veröffentlichung 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 verarbeiten

Anzeige laden

Eine Anzeige wird mit der statischen loadWithAdUnitID:request:completionHandler:-Methode in der Klasse GADRewardedAd geladen. Für die Lademethode sind Ihre Anzeigenblock-ID, ein GADRequest-Objekt und ein Abschluss-Handler erforderlich, der aufgerufen wird, wenn die Anzeige erfolgreich ist oder fehlschlägt. Das geladene GADRewardedAd-Objekt wird als Parameter im Abschluss-Handler angegeben. Das folgende Beispiel zeigt, 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 SSV-Callbacks (serverseitige Überprüfung)

Apps, für die zusätzliche Daten in serverseitigen Überprüfungs-Callbacks erforderlich sind, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. 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 Suchparameters custom_data nicht im SSV-Callback enthalten.

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

Um Benachrichtigungen für Präsentationsereignisse zu erhalten, müssen Sie das GADFullScreenContentDelegate-Protokoll implementieren und dem Attribut fullScreenContentDelegate der zurückgegebenen Anzeige zuweisen. Mit dem GADFullScreenContentDelegate-Protokoll werden Callbacks verarbeitet, wenn die Anzeige erfolgreich oder nicht erfolgreich ausgeliefert wird oder abgelehnt wird. Im folgenden Code sehen Sie, 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. Eine Anzeige mit Prämie kann also nicht mehr ausgeliefert werden. Als Best Practice wird empfohlen, eine weitere Anzeige mit Prämie in der Methode adDidDismissFullScreenContent: auf GADFullScreenContentDelegate zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige Anzeige geschlossen ist.

Die Anzeige einblenden und das Prämienereignis verarbeiten

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

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

Der folgende Code stellt die beste Methode zum Schalten 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 Sie den Prämienbetrag benötigen, bevor der userDidEarnReward-Callback ausgelöst wird, hat GADRewardedAd die Property adReward, mit der Sie den Prämienbetrag nach dem Laden der Anzeige prüfen können.
Gibt es eine Zeitüberschreitung beim Initialisierungsaufruf?
Nach 10 Sekunden ruft das Google Mobile Ads SDK die GADInitializationCompletionHandler für die Methode startWithCompletionHandler: auf, auch wenn ein Vermittlungsnetzwerk die Initialisierung noch nicht abgeschlossen hat.
Was kann ich tun, wenn einige Vermittlungsnetzwerke nach dem Initialisierungs-Callback nicht bereit sind?

Wir empfehlen, eine Anzeige in den GADInitializationCompletionHandler zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, wird es vom Google Mobile Ads SDK nach einer Anzeige gefragt. Wenn ein Vermittlungsnetzwerk nach dem Zeitlimit die Initialisierung beendet, kann es zukünftige Anzeigenanfragen in dieser Sitzung weiter verarbeiten.

Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung weiterhin abfragen. Rufen Sie dazu GADMobileAds.initializationStatus auf.

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

Mit dem Attribut description eines GADAdapterStatus-Objekts wird beschrieben, warum ein Adapter nicht für die Verarbeitung von Anzeigenanfragen bereit ist.

Wird der Abschluss-Handler userDidEarnRewardHandler immer vor der delegierten Methode adDidDismissFullScreenContent: aufgerufen?

Bei Google Anzeigen erfolgen alle userDidEarnRewardHandler-Aufrufe vor dem adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, hängt die Callbackreihenfolge von der Implementierung des SDK des Drittanbieter-Werbenetzwerks ab. Bei Werbenetzwerk-SDKs, die eine einzelne delegierte Methode mit Prämieninformationen bieten, ruft der Vermittlungsadapter userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub

Nächste Schritte

Weitere Informationen zum Datenschutz für Nutzer