Anzeigen mit Prämie können von Nutzern genutzt werden, um eine Prämie für In-App-Prämien zu erhalten. In diesem Leitfaden wird erläutert, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Hier finden Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.
Vorbereitung
- Google Mobile Ads SDK 8.0.0 oder höher.
- Folgen Sie der Anleitung im Startleitfaden.
Immer mit Testanzeigen testen
Achten Sie beim Erstellen und Testen Ihrer Apps darauf, Testanzeigen und keine aktiven Anzeigen zu verwenden. Andernfalls kann Ihr Konto gesperrt werden.
Testanzeigen lassen sich am einfachsten mit der entsprechenden Testanzeigenblock-ID für iOS-Anzeigen mit Prämie laden:
ca-app-pub-3940256099942544/1712485313
Es wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können es in Ihren eigenen Apps verwenden, wenn Sie programmieren, testen und Fehler beheben möchten. Ersetzen Sie sie vor der Veröffentlichung Ihrer App einfach durch Ihre eigene Anzeigenblock-ID.
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 Callbacks registrieren
- Die Anzeige einblenden und das Prämienereignis verarbeiten
Anzeige laden
Eine Anzeige wird mit der statischen loadWithAdUnitID:request:completionHandler:
-Methode in der Klasse GADRewardedAd
geladen. Für die Lademethode sind Ihre Anzeigenblock-ID, ein GADRequest
-Objekt und ein Abschluss-Handler erforderlich, der aufgerufen wird, wenn die Anzeige erfolgreich ist oder fehlschlägt. Das geladene GADRewardedAd
-Objekt wird als Parameter im Abschluss-Handler angegeben. Das folgende Beispiel zeigt, wie ein GADRewardedAd
in eine ViewController
-Klasse geladen wird.
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") } ) } }
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] Validierung der SSV-Callbacks (serverseitige Überprüfung)
Apps, für die zusätzliche Daten in serverseitigen Überprüfungs-Callbacks erforderlich sind, sollten die Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Jeder Stringwert, der für ein Anzeigenobjekt mit Prämie festgelegt ist, wird an den Abfrageparameter custom_data
des SSV-Callbacks übergeben. Wenn kein benutzerdefinierter Datenwert festgelegt ist, ist der Wert des Suchparameters 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
GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error != error { rewardedInterstitialAd = ad let options = GADServerSideVerificationOptions() options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING" rewardedInterstitialAd.serverSideVerificationOptions = options }
Objective-C
GADRequest *request = [GADRequest request]; [GADRewardedInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313" request:request completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) { if (error) { // Handle Error return; } self.rewardedInterstitialAd = ad; GADServerSideVerificationOptions *options = [[GADServerSideVerificationOptions alloc] init]; options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING"; ad.serverSideVerificationOptions = options; }];
Für Callbacks registrieren
Um Benachrichtigungen für Präsentationsereignisse zu erhalten, müssen Sie das GADFullScreenContentDelegate
-Protokoll implementieren und dem Attribut fullScreenContentDelegate
der zurückgegebenen Anzeige zuweisen. Mit dem GADFullScreenContentDelegate
-Protokoll werden Callbacks verarbeitet, wenn die Anzeige erfolgreich oder nicht erfolgreich ausgeliefert wird oder abgelehnt wird. Im folgenden Code sehen Sie, wie das Protokoll implementiert und der Anzeige zugewiesen wird:
Swift
class ViewController: UIViewController, GADFullScreenContentDelegate { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GADRequest() GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") rewardedAd?.fullScreenContentDelegate = self } ) } /// 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. Eine Anzeige mit Prämie kann also
nicht mehr ausgeliefert werden. Als Best Practice wird empfohlen, eine weitere Anzeige mit Prämie in der Methode adDidDismissFullScreenContent:
auf GADFullScreenContentDelegate
zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige Anzeige geschlossen ist.
Die Anzeige einblenden und das Prämienereignis verarbeiten
Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich explizit Anzeigeninhalte mit Prämie anzusehen. Anzeigen mit Prämie müssen immer aktiviert werden.
Wenn Sie die Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler
-Objekt angeben, mit dem die Prämie für den Nutzer verarbeitet wird.
Der folgende Code stellt die beste Methode zum Schalten einer Anzeige mit Prämie dar.
Swift
func show() { if let ad = rewardedAd { ad.present(fromRootViewController: self) { let reward = ad.adReward print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)") // TODO: Reward the user. } } else { print("Ad wasn't ready") } }
Objective-C
- (void)show { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self 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
die PropertyadReward
, mit der Sie den Prämienbetrag nach dem Laden der Anzeige prüfen können. - Gibt es eine Zeitüberschreitung beim Initialisierungsaufruf?
- Nach 10 Sekunden ruft das Google Mobile Ads SDK die
GADInitializationCompletionHandler
für die MethodestartWithCompletionHandler:
auf, auch wenn ein Vermittlungsnetzwerk die Initialisierung noch nicht abgeschlossen hat. - Was kann ich tun, wenn einige Vermittlungsnetzwerke nach dem Initialisierungs-Callback nicht bereit sind?
Wir empfehlen, eine Anzeige in den
GADInitializationCompletionHandler
zu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, wird es vom Google Mobile Ads SDK nach einer Anzeige gefragt. Wenn ein Vermittlungsnetzwerk nach dem Zeitlimit die Initialisierung beendet, kann es zukünftige Anzeigenanfragen in dieser Sitzung weiter verarbeiten.Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung weiterhin abfragen. Rufen Sie dazu
GADMobileAds.initializationStatus
auf.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
Mit dem Attribut
description
einesGADAdapterStatus
-Objekts wird beschrieben, warum ein Adapter nicht für die Verarbeitung von Anzeigenanfragen bereit ist.- Wird der Abschluss-Handler
userDidEarnRewardHandler
immer vor der delegierten MethodeadDidDismissFullScreenContent:
aufgerufen? Bei Google Anzeigen erfolgen alle
userDidEarnRewardHandler
-Aufrufe vor demadDidDismissFullScreenContent:
. Bei Anzeigen, die über die Vermittlung ausgeliefert werden, hängt die Callbackreihenfolge von der Implementierung des SDK des Drittanbieter-Werbenetzwerks ab. Bei Werbenetzwerk-SDKs, die eine einzelne delegierte Methode mit Prämieninformationen bieten, ruft der VermittlungsadapteruserDidEarnRewardHandler
voradDidDismissFullScreenContent:
auf.
Beispiele auf GitHub
Nächste Schritte
Weitere Informationen zum Datenschutz für Nutzer