Anzeigen mit Prämie


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.

Fallstudie 1, Fallstudie 2.

Vorbereitung

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:

  1. Laden Sie eine Anzeige.
  2. Callbacks registrieren
  3. 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.

  1. Fügen Sie dem C++-Code Ihrer App den folgenden Header hinzu:

     #include "firebase/gma/rewarded_ad.h"

  2. Deklarieren und instanziieren Sie ein RewardedAd-Objekt:

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();

  3. Initialisieren Sie die RewardedAd-Instanz mit der übergeordneten Ansicht, die in den Typ AdParent 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);
    
  4. Alternativ dazu, die Zukunft als Variable beizubehalten, können Sie den Status des Initialisierungsvorgangs regelmäßig prüfen, indem Sie InitializeLastResult() für das RewardedAd-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ückgegebene firebase::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