Anzeigen mit Prämie

Plattform auswählen:Android iOS Unity Flutter

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer im Austausch gegen In-App-Prämien interagieren können. In dieser Anleitung erfahren Sie, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Fallstudie 1 Fallstudie 2

Vorbereitung

Immer Testanzeigen verwenden

Verwenden Sie beim Entwickeln und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zu einer Kontosperrung kommen.

Am einfachsten lassen sich Anzeigen mit unserer speziellen Testanzeigenblock-ID für iOS-Prämienanzeigen testen:

ca-app-pub-3940256099942544/1712485313

Sie ist speziell dafür konfiguriert, für jede Anfrage Testanzeigen zurückzugeben. Sie können sie also beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Denken Sie daran, 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 zum Einbinden von Anzeigen mit Prämie sind:

  • Anzeige laden
  • [Optional] SSV-Callbacks validieren
  • Callbacks registrieren
  • Anzeige einblenden und Prämienereignis verarbeiten

Anzeige laden

Das Laden einer Anzeige erfolgt mit der Methode load(adUnitID:request) für die Klasse GADRewardedAd.

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] SSV-Callbacks (serverseitige Überprüfung) validieren

Apps, für die zusätzliche Daten in serverseitigen Bestätigungs-Callbacks erforderlich sind, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Alle Stringwerte, die für ein Objekt für Anzeigen 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 custom_data-Abfrageparameters nicht im SSV-Callback enthalten.

Im folgenden Codebeispiel wird gezeigt, wie benutzerdefinierte Daten für ein Objekt für eine Prämie vor dem Anfordern einer Anzeige festgelegt werden:

Swift

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;
              }];

Callbacks registrieren

Damit Sie Benachrichtigungen zu Präsentationsereignissen erhalten, müssen Sie die Eigenschaft GADFullScreenContentDelegate to thefullScreenContentDelegate` der zurückgegebenen Anzeige zuweisen:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

Das GADFullScreenContentDelegate-Protokoll 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 einblenden und Prämienereignis verarbeiten

Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, explizit zu entscheiden, ob sie sich den Inhalt der Anzeige mit Prämie ansehen möchten, um eine Prämie zu erhalten. Nutzer müssen immer die Möglichkeit haben, sich für Anzeigen mit Prämie zu entscheiden.

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

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 präsentiert werden soll.

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

Anzeige mit Prämie über das Ansichtsmodell präsentieren:

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 Details zur Prämie für GADRewardedAd erhalten?
Ja. Wenn Sie den Prämienbetrag vor dem Auslösen des userDidEarnReward-Callbacks benötigen, hat GADRewardedAd eine adReward-Eigenschaft, mit der Sie den Prämienbetrag nach dem Laden der Anzeige überprüfen können.
Gibt es ein Zeitlimit für den Initialisierungsaufruf?
Nach 10 Sekunden ruft das Google Mobile Ads SDK die GADInitializationCompletionHandler auf, die für die startWithCompletionHandler:-Methode bereitgestellt wurde, auch wenn die Initialisierung in einem Vermittlungsnetzwerk noch nicht abgeschlossen ist.
Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?

Wir empfehlen, eine Anzeige im GADInitializationCompletionHandler zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK trotzdem eine Anzeige von diesem Netzwerk an. Wenn die Initialisierung eines Vermittlungsnetzwerks also nach dem Zeitlimit abgeschlossen wird, können in dieser Sitzung weiterhin zukünftige Anzeigenanfragen verarbeitet werden.

Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung weiterhin abrufen, 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 bearbeiten.

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

Bei Google-Anzeigen erfolgen alle userDidEarnRewardHandler-Aufrufe vor adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, wird die Reihenfolge der Rückrufe durch die Implementierung des SDK des Drittanbieter-Werbenetzwerks bestimmt. Bei SDKs von Werbenetzwerken, die eine einzelne Delegatenmethode mit Informationen zu Prämien bereitstellen, ruft der Vermittlungsadapter userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub

Hier finden Sie vollständige Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache:

Nächste Schritte

Weitere Informationen zum Datenschutz