Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer interagieren können, um Prämien in der App zu erhalten. In dieser Anleitung erfahren Sie, wie Sie Anzeigen mit Prämie von AdMob in eine iOS-App einbinden. Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.
Vorbereitung
Richten Sie Google Mobile Ads SDK ein, bevor Sie fortfahren.
Immer mit Testanzeigen testen
Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zur Sperrung Ihres Kontos kommen.
Testanzeigen lassen sich unter iOS am einfachsten mit unserer speziellen Test-Anzeigenblock-ID für Anzeigen mit Prämie laden:
ca-app-pub-3940256099942544/1712485313
Sie wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können sie beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Ersetzen Sie sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID.
Weitere Informationen zur Funktionsweise von Google Mobile Ads SDK Testanzeigen finden Sie unter Test Anzeigen.
Implementierung
Die wichtigsten Schritte zum Einbinden von Anzeigen mit Prämie sind:
- Anzeige laden
- [Optional] SSV-Callbacks validieren
- Für Callbacks registrieren
- Anzeige präsentieren und Prämienereignis verarbeiten
Anzeige laden
Eine Anzeige wird mit der load(adUnitID:request)
Methode in der GADRewardedAd Klasse geladen.
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] Serverseitige Überprüfung (SSV) von Callbacks validieren
Apps, die zusätzliche Daten in serverseitigen
Überprüfungs Callbacks benötigen, sollten die
Funktion für benutzerdefinierte Daten von Anzeigen mit Prämie verwenden. Jeder Stringwert, der für ein Anzeigenobjekt mit Prämie festgelegt wurde, wird an den Abfrageparameter custom_data des SSV-Callbacks übergeben. Wenn kein benutzerdefinierter Datenwert festgelegt ist, ist der Wert des Abfrageparameters custom_data im SSV-Callback nicht vorhanden.
Das folgende Codebeispiel zeigt, wie Sie benutzerdefinierte Daten für ein Anzeigenobjekt mit Prämie festlegen, bevor Sie eine Anzeige anfordern:
Swift
Objective-C
Ersetzen Sie SAMPLE_CUSTOM_DATA_STRING durch Ihre benutzerdefinierten Daten.
und muss möglicherweise decodiert werden, wenn er aus dem SSV-Callback geparst wird.Für Callbacks registrieren
Wenn Sie Benachrichtigungen zu Präsentationsereignissen erhalten möchten, müssen Sie GADFullScreenContentDelegate der Eigenschaft fullScreenContentDelegate der zurückgegebenen Anzeige zuweisen:
Swift
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
Objective-C
self.rewardedAd.fullScreenContentDelegate = self;
Das Protokoll GADFullScreenContentDelegate 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 präsentieren und Prämienereignis verarbeiten
Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich Inhalte von Anzeigen mit Prämie im Austausch gegen eine Prämie anzusehen. Anzeigen mit Prämie müssen immer eine Opt-in-Funktion haben.
Wenn Sie Ihre Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.
Der folgende Code zeigt die beste Methode zum Präsentieren 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
Achten 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
}
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(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 Prämiendetails für
GADRewardedAdabrufen? - Ja. Wenn Sie den Prämienbetrag abrufen möchten, bevor der
userDidEarnRewardCallback ausgelöst wird, hatGADRewardedAdadRewarddie Eigenschaft mit der Sie den Prämienbetrag überprüfen können, nachdem die Anzeige geladen wurde. - Gibt es ein Zeitlimit für den Initialisierungsaufruf?
- Nach 10 Sekunden ruft Google Mobile Ads SDK den
GADInitializationCompletionHandlerauf, der derstartWithCompletionHandler:Methode bereitgestellt wurde, auch wenn die Initialisierung eines Vermittlungsnetzwerks noch nicht abgeschlossen ist. - Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?
Wir empfehlen, eine Anzeige in
GADInitializationCompletionHandlerzu laden. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, Google Mobile Ads SDK fordert dieses Netzwerk trotzdem eine Anzeige an. Wenn die Initialisierung eines Vermittlungsnetzwerks nach dem Zeitlimit abgeschlossen ist, kann es weiterhin zukünftige Anzeigenanfragen in dieser Sitzung verarbeiten.Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung abfragen, indem Sie
GADMobileAds.initializationStatusaufrufen.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
Die Eigenschaft
descriptioneinesGADAdapterStatus-Objekts beschreibt, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu verarbeiten.- Wird der
userDidEarnRewardHandlerCompletion-Handler immer vor deradDidDismissFullScreenContent:Delegate-Methode aufgerufen? Bei Google-Anzeigen erfolgen alle
userDidEarnRewardHandler-Aufrufe voradDidDismissFullScreenContent:. Bei Anzeigen, die über die Vermittlungausgeliefert werden, bestimmt die Implementierung des SDK des Drittanbieter-Werbenetzwerks die Reihenfolge der Callbacks. Bei SDKs von Werbenetzwerken, die eine einzelne Delegate-Methode mit Prämieninformationen bereitstellen, ruft der VermittlungsadapteruserDidEarnRewardHandlervoradDidDismissFullScreenContent:auf.
Beispiele auf GitHub
Sehen Sie sich die vollständigen Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache an:
Nächste Schritte
Weitere Informationen zum Datenschutz von Nutzern.