Anzeigen mit Prämie

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer interagieren können, um Prämien in der App zu erhalten. In dieser Anleitung erfahren Sie, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.

Vorbereitung

Richten Sie Google Mobile Ads SDK ein, bevor Sie fortfahren.

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zur Sperrung Ihres Kontos kommen.

Testanzeigen lassen sich unter iOS am einfachsten mit unserer speziellen Test-Anzeigenblock-ID für Anzeigen mit Prämie laden:

ca-app-pub-3940256099942544/1712485313

Sie wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können sie beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Ersetzen Sie sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise von Google Mobile Ads SDK Testanzeigen finden Sie unter Test Anzeigen.

Implementierung

Die wichtigsten Schritte zum Einbinden von Anzeigen mit Prämie sind:

  • Anzeige laden
  • [Optional] SSV-Callbacks validieren
  • Für Callbacks registrieren
  • Anzeige präsentieren und Prämienereignis verarbeiten

Anzeige laden

Eine Anzeige wird mit der load(adUnitID:request) Methode in der GADRewardedAd Klasse geladen.

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: RewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await RewardedAd.load(
        with: "ca-app-pub-3940256099942544/1712485313", request: Request())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest request]
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
        return;
      }
      self.rewardedAd = ad;
      self.rewardedAd.fullScreenContentDelegate = self;
    }];

[Optional] Serverseitige Überprüfung (SSV) von Callbacks validieren

Apps, die zusätzliche Daten in serverseitigen Überprüfungs Callbacks benötigen, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Jeder Stringwert, der für ein Anzeigenobjekt mit Prämie festgelegt wurde, wird an den Abfrageparameter custom_data des SSV-Callbacks übergeben. Wenn kein benutzerdefinierter Datenwert festgelegt ist, ist der Wert des Abfrageparameters custom_data im SSV-Callback nicht vorhanden.

Das folgende Codebeispiel zeigt, wie Sie benutzerdefinierte Daten für ein Anzeigenobjekt mit Prämie festlegen, bevor Sie eine Anzeige anfordern:

Swift

private func validateServerSideVerification() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    let options = ServerSideVerificationOptions()
    options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
    rewardedAd?.serverSideVerificationOptions = options
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                        request:[GADRequest request]
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

Ersetzen Sie SAMPLE_CUSTOM_DATA_STRING durch Ihre benutzerdefinierten Daten.

Für Callbacks registrieren

Wenn Sie Benachrichtigungen zu Präsentationsereignissen erhalten möchten, müssen Sie GADFullScreenContentDelegate der Eigenschaft fullScreenContentDelegate der zurückgegebenen Anzeige zuweisen:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

Das Protokoll GADFullScreenContentDelegate verarbeitet Callbacks für den Fall, dass die Anzeige erfolgreich oder nicht erfolgreich präsentiert wird und wenn sie geschlossen wird. Der folgende Code zeigt, wie das Protokoll implementiert wird:

Swift

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

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

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

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

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
  // Clear the rewarded ad.
  rewardedAd = nil
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called with error: \(error.localizedDescription).")
}

SwiftUI

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

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

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

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

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

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the rewarded ad.
  self.rewardedAd = nil;
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}

Anzeige präsentieren und Prämienereignis verarbeiten

Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich Inhalte von Anzeigen mit Prämie im Austausch gegen eine Prämie anzusehen. Anzeigen mit Prämie müssen immer eine Opt-in-Funktion haben.

Wenn Sie Ihre Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.

Der folgende Code zeigt die beste Methode zum Präsentieren einer Anzeige mit Prämie:

Swift

rewardedAd.present(from: self) {
  let reward = rewardedAd.adReward
  print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")

  // TODO: Reward the user.
}

SwiftUI

Achten Sie auf UI-Ereignisse in der Ansicht, um zu bestimmen, wann die Anzeige präsentiert werden soll.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

Präsentieren Sie die Anzeige mit Prämie aus dem Ansichtsmodell:

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

  rewardedAd.present(from: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

[self.rewardedAd presentFromRootViewController:self
                      userDidEarnRewardHandler:^{
                        GADAdReward *reward = self.rewardedAd.adReward;
                        NSString *rewardMessage = [NSString
                            stringWithFormat:@"Reward received with currency %@ , amount %lf",
                                             reward.type, [reward.amount doubleValue]];
                        NSLog(@"%@", rewardMessage);

                        // TODO: Reward the user.
                      }];

FAQ

Kann ich die Prämiendetails für GADRewardedAd abrufen?
Ja. Wenn Sie den Prämienbetrag abrufen möchten, bevor der userDidEarnReward Callback ausgelöst wird, hat GADRewardedAdadReward die Eigenschaft mit der Sie den Prämienbetrag überprüfen können, nachdem die Anzeige geladen wurde.
Gibt es ein Zeitlimit für den Initialisierungsaufruf?
Nach 10 Sekunden ruft Google Mobile Ads SDK den GADInitializationCompletionHandler auf, der der startWithCompletionHandler: Methode bereitgestellt wurde, auch wenn die Initialisierung eines Vermittlungsnetzwerks noch nicht abgeschlossen ist.
Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?

Wir empfehlen, eine Anzeige in GADInitializationCompletionHandler zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, Google Mobile Ads SDK fordert dieses Netzwerk trotzdem eine Anzeige an. Wenn die Initialisierung eines Vermittlungsnetzwerks nach dem Zeitlimit abgeschlossen ist, kann es weiterhin zukünftige Anzeigenanfragen in dieser Sitzung verarbeiten.

Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung abfragen, indem Sie GADMobileAds.initializationStatus aufrufen.

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

Die Eigenschaft description eines GADAdapterStatus-Objekts beschreibt, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu verarbeiten.

Wird der userDidEarnRewardHandler Completion-Handler immer vor der adDidDismissFullScreenContent: Delegate-Methode aufgerufen?

Bei Google-Anzeigen erfolgen alle userDidEarnRewardHandler-Aufrufe vor adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlungausgeliefert werden, bestimmt die Implementierung des SDK des Drittanbieter-Werbenetzwerks die Reihenfolge der Callbacks. Bei SDKs von Werbenetzwerken, die eine einzelne Delegate-Methode mit Prämieninformationen bereitstellen, ruft der Vermittlungsadapter userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub

Sehen Sie sich die vollständigen Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache an:

Nächste Schritte

Weitere Informationen zum Datenschutz von Nutzern.