Anzeigen mit Prämie

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer interagieren können, um In-App-Prämien zu erhalten. In diesem Leitfaden erfahren Sie, 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

Bevor Sie fortfahren, richten Sie Google Mobile Ads SDK ein.

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zu einer 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 ist speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können sie in Ihren eigenen Apps beim Programmieren, Testen und Debuggen 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 Testanzeigen.

Implementierung

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

  • Anzeige laden
  • [Optional] SSV-Callbacks validieren
  • Für Callbacks registrieren
  • Anzeige einblenden und Ereignis mit Prämie verarbeiten

Anzeige laden

Anzeigen werden mit der Methode load(adUnitID:request) der Klasse GADRewardedAd 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 Bestätigungs-Callbacks erfordern, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Alle Stringwerte, die für ein Anzeigenobjekt mit Prämie festgelegt sind, werden an den Abfrageparameter custom_data des SSV-Callbacks übergeben. Wenn kein benutzerdefinierter Datenwert festgelegt ist, ist der Wert des Suchparameters custom_data im SSV-Callback nicht vorhanden.

Im folgenden Codebeispiel wird gezeigt, 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 der Eigenschaft fullScreenContentDelegate der zurückgegebenen Anzeige den Wert GADFullScreenContentDelegate zuweisen:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

Das GADFullScreenContentDelegate-Protokoll verarbeitet Callbacks, wenn die Anzeige erfolgreich oder nicht erfolgreich präsentiert 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 einblenden und Ereignis mit Prämie verarbeiten

Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich explizit dafür zu entscheiden, sich den Anzeigeninhalt im Austausch für eine Belohnung anzusehen. Anzeigen mit Prämie müssen immer eine Opt-in-Option sein.

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

Der folgende Code zeigt die beste Methode zum Anzeigen 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

Warten Sie auf UI-Ereignisse in der Ansicht, um zu bestimmen, wann die Anzeige eingeblendet 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 die GADRewardedAd erhalten?
Ja. Wenn Sie den Prämienbetrag benötigen, bevor der Callback userDidEarnReward ausgelöst wird, können Sie die Property adReward von GADRewardedAd verwenden, um den Prämienbetrag nach dem Laden der Anzeige zu prüfen.
Gibt es ein Zeitlimit für den Initialisierungsaufruf?
Nach 10 Sekunden ruft Google Mobile Ads SDK die GADInitializationCompletionHandler auf, die für die Methode startWithCompletionHandler: bereitgestellt wurde, auch wenn ein Vermittlungsnetzwerk die Initialisierung noch nicht abgeschlossen hat.
Was ist, 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, fordert Google Mobile Ads SDK trotzdem eine Anzeige von diesem Netzwerk an. Wenn die Initialisierung eines Vermittlungsnetzwerks nach dem Zeitlimit abgeschlossen wird, können zukünftige Anzeigenanfragen in dieser Sitzung also weiterhin verarbeitet werden.

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?

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

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

Bei Google-Anzeigen erfolgen alle userDidEarnRewardHandler-Aufrufe vor adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, wird die Callback-Reihenfolge durch die SDK-Implementierung 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

Vollständige Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache:

Nächste Schritte

Weitere Informationen zum Datenschutz für Nutzer