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.
Immer mit Testanzeigen testen
Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von aktiven Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Am einfachsten lassen sich Testanzeigen mit unserer dedizierten Test-Anzeigenblock-ID für iOS-Anzeigen mit Prämie laden:
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 der serverseitigen Ü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. Jeder Stringwert, der für ein Anzeigenobjekt mit Prämie festgelegt ist, wird an den custom_data
-Abfrageparameter 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 Protokoll GADFullScreenContentDelegate
implementieren und dem Attribut fullScreenContentDelegate
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
Über die Benutzeroberfläche können Sie Ereignisse erfassen, 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
abrufen? - Ja. Wenn Sie den Prämienbetrag benötigen, bevor der
userDidEarnReward
-Callback ausgelöst wird, hatGADRewardedAd
eineadReward
-Eigenschaft, mit der Sie den Prämienbetrag überprüfen können, nachdem die Anzeige geladen wurde. - Gibt es eine Zeitüberschreitung für den Initialisierungsaufruf?
- Nach 10 Sekunden ruft das Google Mobile Ads SDK die
GADInitializationCompletionHandler
für die MethodestartWithCompletionHandler:
auf, auch wenn die Initialisierung des 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 weiterhin abfragen, indem Sie
GADMobileAds.initializationStatus
aufrufen.- 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 DelegatmethodeadDidDismissFullScreenContent:
aufgerufen? Bei Google Ads erfolgen alle
userDidEarnRewardHandler
-Aufrufe voradDidDismissFullScreenContent:
. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, bestimmt die Implementierung des SDKs des Drittanbieter-Werbenetzwerks die Callback-Reihenfolge. 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