Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer im Austausch mit ihnen interagieren können. für In-App-Prämien. Dieser Leitfaden zeigt Ihnen, wie Sie Anzeigen mit Prämie aus AdMob in einer iOS-App. Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.
Vorbereitung
- Google Mobile Ads SDK 8.0.0 oder höher.
- Arbeiten Sie den Startleitfaden durch.
Verwenden Sie immer Testanzeigen
Verwenden Sie beim Entwickeln und Testen Ihrer Apps nur Testanzeigen, Live-Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Die einfachste Methode zum Laden von Testanzeigen ist die Verwendung unserer Testanzeigenblock-ID für iOS. Anzeigen mit Prämie:
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. Machen Sie einfach ersetzen Sie sie vor dem Veröffentlichen Ihrer App durch Ihre Anzeigenblock-ID.
Weitere Informationen zur Funktionsweise von Testanzeigen im Mobile Ads SDK finden Sie unter Testanzeigen.
Implementierung
Die wichtigsten Schritte beim Einbinden von Anzeigen mit Prämie:
- Anzeige laden
- [Optional] SSV-Callbacks prüfen
- Für Rückrufe registrieren
- Anzeige einblenden und Prämienereignis bearbeiten
Anzeige laden
Das Laden einer Anzeige erfolgt über den load(adUnitID:request)
für die Klasse GADRewardedAd
.
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 validieren
Apps, die zusätzliche Daten serverseitig
Verifizierung Callbacks die Methode
Datenfunktion von Anzeigen mit Prämie. Beliebiger Stringwert, der in einer Anzeige mit Prämie festgelegt ist
wird an den custom_data
-Abfrageparameter des SSV-Callbacks übergeben. Falls nein
festgelegt ist, ist der Wert des Suchparameters custom_data
nicht gleich
im SSV-Callback vorhanden sind.
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 Rückrufe registrieren
Um Benachrichtigungen über Präsentationsereignisse zu erhalten, müssen Sie
das Protokoll GADFullScreenContentDelegate
und weisen Sie es dem
fullScreenContentDelegate
-Eigenschaft der zurückgegebenen Anzeige. Die
Das GADFullScreenContentDelegate
-Protokoll verarbeitet Rückrufe, wenn die Anzeige
erfolgreich oder nicht erfolgreich präsentiert und wenn sie geschlossen wird. Die folgenden
Code veranschaulicht, 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 Objekt zur einmaligen Verwendung. Das bedeutet, dass eine Anzeige mit Prämie, die einmal ausgeliefert wurde, nicht noch einmal ausgeliefert werden kann. Es empfiehlt sich, eine weitere
Anzeige mit Prämie zu laden,
in der Methode adDidDismissFullScreenContent:
für GADFullScreenContentDelegate
sodass die nächste Anzeige mit Prämie geladen wird,
geschlossen.
Anzeige einblenden und Prämienereignis bearbeiten
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.
Bei der Präsentation Ihrer Anzeige müssen Sie ein GADUserDidEarnRewardHandler
-Objekt angeben
für den Umgang mit der Prämie.
Der folgende Code stellt die beste Methode zum Ausliefern einer Anzeige mit Prämie dar.
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 geschaltet werden soll.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
So präsentieren Sie die Anzeige mit Prämie aus dem Ansichtsmodell:
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
userDidEarnReward
-Rückruf benötigen ausgelöst wird,GADRewardedAd
hat eineadReward
Property, 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
wurden demstartWithCompletionHandler:
-Methode verwenden, auch wenn ein Vermittlungsnetzwerk die Initialisierung abgeschlossen. - Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?
Wir empfehlen, eine Anzeige im
GADInitializationCompletionHandler
Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK das Werbenetzwerk weiterhin nach einer Anzeige an. Wenn also ein Die Initialisierung des Vermittlungsnetzwerks ist nach dem Zeitlimit abgeschlossen, es kann jedoch weiterhin für zukünftige Anzeigenanfragen in dieser Sitzung.Sie können den Initialisierungsstatus aller Adapter durchgehend abfragen App-Sitzung durch Aufrufen von
GADMobileAds.initializationStatus
.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
Die Eigenschaft
description
einesGADAdapterStatus
-Objekts beschreibt, warum ein Der Adapter ist nicht für die Bearbeitung von Anzeigenanfragen bereit.- Wird der Abschluss-Handler
userDidEarnRewardHandler
immer vor der DelegatmethodeadDidDismissFullScreenContent:
aufgerufen? Bei Google Ads erfolgen alle
userDidEarnRewardHandler
-Aufrufe. vor demadDidDismissFullScreenContent:
. Für Anzeigen, die über mediation, das Drittanbieter-Werbenetzwerk Die Callback-Reihenfolge wird von der Implementierung des SDKs bestimmt. Für Werbenetzwerk-SDKs, die eine einzelne delegierte Methode mit Prämieninformationen bereitstellen, kann der Vermittlungsadapter RuftuserDidEarnRewardHandler
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