Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer im Austausch gegen In-App-Prämien interagieren können. In dieser Anleitung wird beschrieben, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.
Vorbereitung
- Google Mobile Ads SDK 8.0.0 oder höher
- Führen Sie die Schritte im Startleitfaden aus.
Verwenden Sie immer Testanzeigen
Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von aktiven Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Am einfachsten lassen sich Testanzeigen laden, wenn Sie die spezielle Testanzeigenblock-ID für Anzeigen mit Prämie auf iOS-Geräten verwenden:
ca-app-pub-3940256099942544/1712485313
Es wurde speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können es in Ihren eigenen Apps verwenden, während Sie Code schreiben, testen und debuggen. Achten Sie darauf, 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
So integrieren Sie Anzeigen mit Prämie:
- Anzeige laden
- [Optional] SSV-Callbacks prüfen
- Für Callbacks registrieren
- Anzeige einblenden und Prämienereignis verarbeiten
Anzeige laden
Anzeigen werden mit der Methode load(adUnitID:request)
der Klasse GADRewardedAd
geladen.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
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)")
}
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, GADFullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: GADRewardedAd?
func loadAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad 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] Callbacks für die serverseitige Überprüfung (SSV) validieren
Für Apps, die in Callbacks für die serverseitige Überprüfung zusätzliche Daten benötigen, sollte die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwendet werden. Alle Stringwerte, die für ein Objekt mit 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 Abfrageparameters custom_data
nicht im SSV-Callback enthalten.
Im folgenden Codebeispiel wird gezeigt, wie Sie benutzerdefinierte Daten für ein Objekt mit Anzeigen 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 Callbacks registrieren
Wenn Sie Benachrichtigungen zu Präsentationsereignissen erhalten möchten, müssen Sie das GADFullScreenContentDelegate
-Protokoll implementieren und der fullScreenContentDelegate
-Property der zurückgegebenen Anzeige zuweisen. Das GADFullScreenContentDelegate
-Protokoll verarbeitet Callbacks für den erfolgreichen oder fehlgeschlagenen Anzeigenbereitstellungsvorgang und für das Schließen der Anzeige. Im folgenden Code wird gezeigt, wie das Protokoll implementiert und der Anzeige zugewiesen wird:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
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.")
}
}
SwiftUI
Weisen Sie der zurückgegebenen Anzeige das Attribut fullScreenContentDelegate
zu:
rewardedAd?.fullScreenContentDelegate = self
Implementieren Sie das Protokoll:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
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 Einmalobjekt. Das bedeutet, dass eine Anzeige mit Prämie, die einmal ausgeliefert wurde, nicht noch einmal ausgeliefert werden kann. Es wird empfohlen, am GADFullScreenContentDelegate
eine weitere Anzeige mit Prämie mit der Methode adDidDismissFullScreenContent:
zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige geschlossen wird.
Anzeige einblenden und Prämienereignis verarbeiten
Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich Anzeigeninhalte mit Prämie anzusehen. Anzeigen mit Prämie müssen immer optional sein.
Wenn Sie Ihre Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler
-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.
Im folgenden Code wird die beste Methode zum Präsentieren 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.
}
}
SwiftUI
Überwachen Sie UI-Ereignisse in der Ansicht, um zu bestimmen, wann die Anzeige ausgeliefert werden soll.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Anzeigen mit Prämie über das Ansichtsmodell präsentieren:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(fromRootViewController: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
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");
}
}
FAQ
- Kann ich die Prämiendetails für die
GADRewardedAd
erhalten? - Ja. Wenn Sie den Prämienbetrag vor dem Aufruf des
userDidEarnReward
-Callbacks benötigen, gibt es inGADRewardedAd
die PropertyadReward
, mit der Sie den Prämienbetrag nach dem Laden der Anzeige prü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 MethodestartWithCompletionHandler:
angegeben wurde, auch wenn die Initialisierung eines Vermittlungsnetzwerks noch nicht abgeschlossen ist. - Was passiert, wenn einige Vermittlungsnetzwerke noch nicht bereit sind, wenn ich den Callback zur Initialisierung erhalte?
Wir empfehlen, eine Anzeige innerhalb des
GADInitializationCompletionHandler
zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK dieses Netzwerk trotzdem um eine Anzeige an. Wenn die Initialisierung eines Vermittlungsnetzwerks also nach Ablauf der Zeitüberschreitung abgeschlossen ist, kann es weiterhin zukünftige Anzeigenanfragen in dieser Sitzung bearbeiten.Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung durch Aufrufen von
GADMobileAds.initializationStatus
abfragen.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
Die
description
-Eigenschaft einesGADAdapterStatus
-Objekts gibt an, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu bearbeiten.- Wird der Abschluss-Handler
userDidEarnRewardHandler
immer vor der delegierten MethodeadDidDismissFullScreenContent:
aufgerufen? Bei Google Ads erfolgen alle
userDidEarnRewardHandler
-Anrufe voradDidDismissFullScreenContent:
. 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 Anzeigennetzwerken, die eine einzelne delegierte Methode mit Prämieninformationen bereitstellen, ruft der VermittlungsadapteruserDidEarnRewardHandler
voradDidDismissFullScreenContent:
auf.
Beispiele auf GitHub
Vollständige Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache ansehen:
Nächste Schritte
Weitere Informationen zum Datenschutz für Nutzer