Bei Anzeigen mit Prämie haben Nutzer die Möglichkeit, mit ihnen zu interagieren und dafür In-App-Prämien zu erhalten. In dieser Anleitung erfahren Sie, wie Sie Anzeigen mit Prämie mithilfe des Google Mobile Ads C++ SDK in Android- und iOS-Apps einbinden.
Vorbereitung
- Führen Sie die Schritte unter Jetzt starten aus.
- (Nur Android) Vertrautheit mit der Arbeit mit JNI-
jobject
-Referenzen (siehe Android-JNI-Tipps).
Immer Testanzeigen verwenden
Verwenden Sie beim Entwickeln und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zu einer Kontosperrung kommen.
Testanzeigen lassen sich am einfachsten mit unserer speziellen Testanzeigenblock-ID für Anzeigen mit Prämie laden. Diese ID variiert je nach Geräteplattform:
- Android:
ca-app-pub-3940256099942544/5224354917
- iOS:
ca-app-pub-3940256099942544/1712485313
Sie wurden speziell konfiguriert, um für jede Anfrage Testanzeigen zurückzugeben. Sie können sie 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:
- Laden Sie eine Anzeige.
- Callbacks registrieren
- 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 den folgenden Header 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 der übergeordneten Ansicht, die in den TypAdParent
umgewandelt wird. Die übergeordnete Ansicht ist eine JNI-jobject
-Referenz auf ein Android-Activity
oder ein Zeiger auf 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);
Alternativ dazu, die Zukunft als Variable beizubehalten, können Sie den Status des Initialisierungsvorgangs regelmäßig prüfen, indem Sie
InitializeLastResult()
für dasRewardedAd
-Objekt aufrufen. 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 Futures verwenden, um den Abschlussstatus von Methodenaufrufen zu überwachen.
Anzeige laden
Eine Anzeige wird 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 sowie ein AdRequest
-Objekt benötigen. Es wird eine firebase::Future
zurückgegeben, mit der Sie den Status und das Ergebnis des Ladevorgangs überwachen können.
Der folgende Code zeigt, wie eine Anzeige geladen wird, sobald RewardedAd
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);
Callbacks registrieren
Sie müssen die FullScreenContentListener
-Klasse erweitern, um Benachrichtigungen zu Präsentations- und Lebenszyklusereignissen für Anzeigen mit Prämie zu erhalten. Ihre benutzerdefinierte FullScreenContentListener
-Unterklasse kann über die Methode RewardedAd::SetFullScreenContentListener()
registriert werden. Sie erhält dann Callbacks, wenn die Anzeige erfolgreich oder nicht erfolgreich präsentiert wird und wenn sie geschlossen wird.
Der folgende Code zeigt, wie Sie die Klasse erweitern und der Anzeige zuweisen:
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 nicht noch einmal ausgeliefert werden kann, nachdem sie bereits einmal ausgeliefert wurde. Es empfiehlt sich, in der Methode OnAdDismissedFullScreenContent()
Ihres FullScreenContentListener
eine weitere Anzeige mit Prämie zu laden, damit die nächste Anzeige mit Prämie geladen wird, sobald die vorherige geschlossen wird.
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 UserEarnedReward
-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.
Der folgende Code zeigt, 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 die Initialisierung in einem Vermittlungsnetzwerk noch nicht abgeschlossen ist. - Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?
Es empfiehlt sich, Anzeigen erst zu laden, wenn die SDK-Initialisierung abgeschlossen ist. Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, wird vom Google Mobile Ads C++ SDK trotzdem eine Anzeige von diesem Netzwerk angefordert. Wenn die Initialisierung eines Vermittlungsnetzwerks also nach dem Zeitlimit abgeschlossen wird, können zukünftige Anzeigenanfragen in dieser Sitzung trotzdem beantwortet werden.
Sie können den Initialisierungsstatus aller Adapter während der gesamten App-Sitzung weiterhin abrufen, indem Sie
GetInitializationStatus()
aufrufen.- Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?
AdapterStatus.description()
beschreibt, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu bearbeiten. Den Quellcode unserer Beispiel-App für die Kurzanleitung auf GitHub finden Sie hier.
Zusätzliche Ressourcen
Beispiel in GitHub
- Den Quellcode unserer Beispiel-App für die Kurzanleitung finden Sie auf GitHub.