Bei Anzeigen mit Prämie können Nutzer mit ihnen interagieren, um In-App-Prämien zu erhalten. In diesem Leitfaden erfahren Sie, wie Sie mit dem Google Mobile Ads C++ SDK Anzeigen mit Prämie in Android- und iOS-Apps einbinden.
Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.
Vorbereitung
- Führen Sie die Schritte unter Jetzt starten aus.
- (Nur Android) Erfahrung mit JNI-
jobject
-Referenzen (siehe Tipps zu JNI für Android).
Verwenden Sie immer Testanzeigen
Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von aktiven Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Am einfachsten lassen sich Testanzeigen laden, wenn Sie die spezielle Testanzeigenblock-ID für Anzeigen mit Prämie verwenden, die je nach Geräteplattform variiert:
- Android:
ca-app-pub-3940256099942544/5224354917
- iOS:
ca-app-pub-3940256099942544/1712485313
Sie wurden speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können sie in Ihren eigenen Apps verwenden, während Sie Code schreiben, testen und Fehler beheben. Ersetzen Sie sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID.
Weitere Informationen zur Funktionsweise von Testanzeigen im Mobile Ads SDK finden Sie unter Testanzeigen.
Implementierung
Die wichtigsten Schritte zur Einbindung von Anzeigen mit Prämie sind:
- Laden Sie eine Anzeige.
- Registrieren Sie sich für Callbacks.
- Blenden Sie die Anzeige ein und verarbeiten Sie das Prämienereignis.
RewardedAd
konfigurieren
Anzeigen mit Prämie werden in RewardedAd
-Objekten präsentiert. Der erste Schritt zur Einbindung von Anzeigen mit Prämie in Ihre App besteht also darin, eine Instanz von RewardedAd
zu erstellen und zu initialisieren.
Fügen Sie dem C++-Code Ihrer App die folgende Kopfzeile hinzu:
#include "firebase/gma/rewarded_ad.h"
Deklarieren und instanziieren Sie ein
RewardedAd
-Objekt:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Initialisieren Sie die
RewardedAd
-Instanz mit Ihrer übergeordneten Ansicht, die in einenAdParent
-Typ umgewandelt wurde. Die übergeordnete Ansicht ist eine JNI-jobject
-Referenz auf eine Android-Activity
oder ein iOS-UIView
.// my_ad_parent is a jobject reference to an Android Activity or // a pointer to an iOS UIView. firebase::gma::AdParent ad_parent = static_cast<firebase::gma::AdParent>(my_ad_parent); firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
Anstatt den Future als Variable zu speichern, können Sie den Status des Initialisierungsvorgangs auch regelmäßig prüfen, indem Sie
InitializeLastResult()
auf dasRewardedAd
-Objekt anwenden. Das kann hilfreich sein, um den Initialisierungsprozess in Ihrer globalen Spielschleife im Blick zu behalten.// Monitor the status of the future in your game loop: firebase::Future<void> result = rewarded_ad->InitializeLastResult(); if (result.status() == firebase::kFutureStatusComplete) { // Initialization completed. if(future.error() == firebase::gma::kAdErrorCodeNone) { // Initialization successful. } else { // An error has occurred. } } else { // Initialization on-going. }
Weitere Informationen zur Arbeit mit firebase::Future
finden Sie unter Mit Futures den Abschlussstatus von Methodenaufrufen überwachen.
Anzeige laden
Anzeigen werden mit der Methode LoadAd()
für ein RewardedAd
-Objekt geladen. Für die Methode „load“ müssen Sie das RewardedAd
-Objekt initialisiert haben und die Anzeigenblock-ID und ein AdRequest
-Objekt haben. Es wird eine firebase::Future
zurückgegeben, mit der Sie den Status und das Ergebnis des Ladevorgangs überwachen können.
Im folgenden Code wird gezeigt, wie eine Anzeige geladen wird, nachdem RewardedAd
erfolgreich initialisiert wurde:
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);
Für Callbacks registrieren
Sie müssen die FullScreenContentListener
-Klasse erweitern, um Benachrichtigungen zur Präsentation von Anzeigen mit Prämie und zu Lebenszyklusereignissen zu erhalten. Ihre benutzerdefinierte FullScreenContentListener
-Unterklasse kann über die Methode RewardedAd::SetFullScreenContentListener()
registriert werden. Sie erhält Rückrufe, wenn die Anzeige erfolgreich oder nicht erfolgreich präsentiert wird oder geschlossen wird.
Im folgenden Code wird gezeigt, wie die Klasse erweitert und der Anzeige zugewiesen wird:
class ExampleFullScreenContentListener : public firebase::gma::FullScreenContentListener { public: ExampleFullScreenContentListener() {} void OnAdClicked() override { // This method is invoked when the user clicks the ad. } void OnAdDismissedFullScreenContent() override { // This method is invoked when the ad dismisses full screen content. } void OnAdFailedToShowFullScreenContent(const AdError& error) override { // This method is invoked when the ad failed to show full screen content. // Details about the error are contained within the AdError parameter. } void OnAdImpression() override { // This method is invoked when an impression is recorded for an ad. } void OnAdShowedFullScreenContent() override { // This method is invoked when the ad showed its full screen content. } }; ExampleFullScreenContentListener* example_full_screen_content_listener = new ExampleFullScreenContentListener(); rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);
RewardedAd
ist ein Einmalobjekt. Das bedeutet, dass eine Anzeige mit Prämie, die einmal ausgeliefert wurde, nicht noch einmal ausgeliefert werden kann. Es wird empfohlen, in der OnAdDismissedFullScreenContent()
-Methode Ihrer FullScreenContentListener
eine weitere Anzeige mit Prämie zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige geschlossen wurde.
Anzeige ausliefern und das 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 UserEarnedReward
-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.
Im folgenden Code wird gezeigt, wie ein RewardedAd
angezeigt wird:
// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
public firebase::gma::UserEarnedRewardListener {
public:
ExampleUserEarnedRewardListener() { }
void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
// Reward the user!
}
};
ExampleUserEarnedRewardListener* user_earned_reward_listener =
new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);
FAQ
- Gibt es ein Zeitlimit für den Initialisierungsaufruf?
- Nach 10 Sekunden schließt das Google Mobile Ads C++ SDK die von
Initialize()
zurückgegebenefirebase::Future
ab, auch wenn ein Vermittlungsnetzwerk die Initialisierung noch nicht abgeschlossen hat. - Was passiert, wenn einige Vermittlungsnetzwerke noch nicht bereit sind, wenn ich den Callback zur Initialisierung erhalte?
Es wird empfohlen, Anzeigen erst nach Abschluss der SDK-Initialisierung zu laden. Auch wenn ein Vermittlungsnetzwerk noch nicht bereit ist, wird das Google Mobile Ads C++ SDK dieses Netzwerk trotzdem um eine Anzeige bitten. 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 durch Aufrufen von
GetInitializationStatus()
abfragen.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
AdapterStatus.description()
gibt an, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu bearbeiten. Im Quellcode unserer Beispiel-App für die Kurzanleitung auf GitHub finden Sie ein Beispiel für das Logging des Mediation-Adapter-Status.
Zusätzliche Ressourcen
Beispiel in GitHub
- Den Quellcode unserer Beispiel-App für die Kurzanleitung finden Sie auf GitHub.