Anzeigen mit Prämie

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer im Gegenzug für In-App-Prämien interagieren können. In diesem Leitfaden erfahren Sie, wie Sie Anzeigen mit Prämie aus AdMobin eine iOS-App einbinden. Hier finden Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.

Voraussetzungen

  • Google Mobile Ads SDK 8.0.0 oder höher.
  • Arbeiten Sie den Startleitfaden durch.

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen und keine Liveanzeigen. Andernfalls kann Ihr Konto gesperrt werden.

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

ca-app-pub-3940256099942544/1712485313

Er wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können ihn beim Programmieren, Testen und Debuggen kostenlos in Ihren eigenen Apps verwenden. Ersetzen Sie sie einfach durch Ihre eigene Anzeigenblock-ID, bevor Sie Ihre App veröffentlichen.

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 Rückrufe registrieren
  • Die Anzeige präsentieren und das Prämienereignis verarbeiten

Anzeige laden

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
    } catch {
      print("Rewarded ad failed to load with error: \(error.localizedDescription)")
    }
  }
}

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] Rückrufe der serverseitigen Überprüfung (SSV) validieren

Apps, die zusätzliche Daten für Callbacks bei der serverseitigen Überprüfung erfordern, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Jeder Stringwert, der für ein Objekt für Anzeigen 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 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

do {
  rewardedAd = try await GADRewardedAd.load(
    withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
  let options = GADServerSideVerificationOptions()
  options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedAd.serverSideVerificationOptions = options
} catch {
  print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}

Objective-C

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

Für Rückrufe registrieren

Um Benachrichtigungen zu Präsentationsereignissen zu erhalten, müssen Sie das GADFullScreenContentDelegate-Protokoll implementieren und der fullScreenContentDelegate-Eigenschaft der zurückgegebenen Anzeige zuweisen. Das GADFullScreenContentDelegate-Protokoll verarbeitet Callbacks, wenn die Anzeige erfolgreich oder nicht erfolgreich ausgeliefert und geschlossen wird. Der folgende Code zeigt, wie das Protokoll implementiert und der Anzeige zugewiesen wird:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Rewarded ad failed to load with error: \(error.localizedDescription)")
    }
  }

  /// 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. Sobald eine Anzeige mit Prämie eingeblendet ist, kann sie nicht noch einmal präsentiert werden. Es empfiehlt sich, eine weitere Anzeige mit Prämie in der Methode adDidDismissFullScreenContent: auf GADFullScreenContentDelegate zu laden. Dann wird die nächste Anzeige mit Prämie geladen, sobald die vorherige geschlossen wird.

Die Anzeige präsentieren und das Prämienereignis verarbeiten

Bevor Nutzern eine Anzeige mit Prämie präsentiert wird, müssen Sie ihnen ausdrücklich die Möglichkeit geben, sich die Inhalte der Anzeige mit Prämie anzusehen, um eine Prämie zu erhalten. Anzeigen mit Prämie müssen immer aktiviert werden.

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

Mit dem folgenden Code wird die beste Methode zum Ausliefern einer Anzeige mit Prämie dargestellt.

Swift

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

  // The UIViewController parameter is an optional.
  ad.present(fromRootViewController: nil) {
    let reward = ad.adReward
    print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
    // TODO: Reward the user.
  }
}

Objective-C

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

Häufig gestellte Fragen

Kann ich die Details zur Prämie für GADRewardedAd einsehen?
Ja. Wenn Sie den Prämienbetrag benötigen, bevor der userDidEarnReward-Callback ausgelöst wird, hat GADRewardedAd die Property adReward, die Sie überprüfen können, um den Prämienbetrag zu überprüfen, nachdem die Anzeige geladen wurde.
Gibt es eine Zeitüberschreitung für den Initialisierungsaufruf?
Nach 10 Sekunden ruft das Google Mobile Ads SDK den für die Methode startWithCompletionHandler: bereitgestellten GADInitializationCompletionHandler auf, selbst 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 GADInitializationCompletionHandler zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK von diesem Netzwerk eine Anzeige an. Wenn also ein Vermittlungsnetzwerk die Initialisierung nach dem Zeitlimit beendet, können zukünftige Anzeigenanfragen in dieser Sitzung weiterhin bearbeitet werden.

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

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

Die Eigenschaft description eines GADAdapterStatus-Objekts gibt an, warum ein Adapter nicht für die Verarbeitung von Anzeigenanfragen bereit ist.

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

Bei Google Ads erfolgen alle userDidEarnRewardHandler-Aufrufe vor adDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, richtet sich die Callback-Reihenfolge nach der Implementierung des SDK des Drittanbieter-Werbenetzwerks. Bei Werbenetzwerk-SDKs, die eine einzelne Delegationsmethode mit Prämieninformationen bereitstellen, ruft der Vermittlungsadapter userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub

Nächste Schritte

Weitere Informationen zum Datenschutz für Nutzer