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
- Führen Sie die Schritte im Startleitfaden aus.
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 the
fullScreenContentDelegate` 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, hatGADRewardedAd
eineadReward
-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 diestartWithCompletionHandler:
-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
einesGADAdapterStatus
-Objekts beschreibt, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu bearbeiten.- Wird der
userDidEarnRewardHandler
-Abschluss-Handler immer vor der DelegatenmethodeadDidDismissFullScreenContent:
aufgerufen? Bei Google-Anzeigen erfolgen alle
userDidEarnRewardHandler
-Aufrufe 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 Werbenetzwerken, die eine einzelne Delegatenmethode mit Informationen zu Prämien bereitstellen, ruft der VermittlungsadapteruserDidEarnRewardHandler
voradDidDismissFullScreenContent:
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