Reklamy z nagrodą

Reklamy z nagrodą umożliwiają użytkownikom interakcję z reklamą w zamian za nagrody w aplikacji. Z tego przewodnika dowiesz się, jak zintegrować reklamy z nagrodą z aplikacjami na Androida i iOS za pomocą pakietu SDK do reklam mobilnych Google w C++.

Zapoznaj się z historiami sukcesu klientów: studium przypadku 1 i studium przypadku 2.

Wymagania wstępne

Zawsze testuj z reklamami testowymi

Tworząc i testując aplikacje, upewnij się, że używasz reklam testowych zamiast produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora jednostki reklamowej dla reklam z nagrodą, który różni się w zależności od platformy urządzenia:

  • System Android: ca-app-pub-3940256099942544/5224354917
  • System iOS: ca-app-pub-3940256099942544/1712485313

Zostały one tak specjalne, aby zwracać reklamy testowe dla każdego żądania. Możesz ich używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, aby zastąpić go własnym identyfikatorem jednostki reklamowej przed opublikowaniem aplikacji.

Więcej informacji o działaniu reklam testowych pakietu SDK do reklam mobilnych znajdziesz w artykule Test Ads (Reklamy testowe).

Wdrażanie

Główne kroki integracji reklam z nagrodą:

  1. Wczytanie reklamy
  2. Zarejestruj się na potrzeby wywołań zwrotnych.
  3. Musi wyświetlać reklamę i obsługiwać zdarzenie związane z nagrodą.

Skonfiguruj RewardedAd

Reklamy z nagrodą wyświetlają się w obiektach RewardedAd, więc pierwszym krokiem w ramach integracji reklam z nagrodą jest utworzenie i zainicjowanie wystąpienia elementu RewardedAd.

  1. Dodaj ten kod do kodu aplikacji w C++:

     #include "firebase/gma/rewarded_ad.h"
    

  2. Zadeklaruj obiekt RewardedAd i utwórz jego instancję:

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

  3. Inicjuj instancję RewardedAd za pomocą widoku nadrzędnego w typie AdParent. Widok nadrzędny to odwołanie JNI jobject do Androida Activity lub wskaźnik do UIView iOS.

    // 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. Jako alternatywę zachowania przyszłości jako zmiennej możesz okresowo sprawdzać stan operacji inicjowania, wywołując obiekt InitializeLastResult() w obiekcie RewardedAd. Może to być przydatne przy śledzeniu procesu inicjowania w pętli globalnej gry.

    // 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.
    }
    

Więcej informacji na temat pracy z funkcją firebase::Future znajdziesz w sekcji Korzystanie z przyszłości w celu monitorowania stanu ukończenia wywołań metody.

Wczytywanie reklamy

Wczytanie reklamy odbywa się za pomocą metody LoadAd() na obiekcie RewardedAd. Aby załadować metodę, musisz zainicjować obiekt RewardedAd oraz mieć identyfikator jednostki reklamowej i obiekt AdRequest. Zwracany jest kod firebase::Future, którego można użyć do monitorowania stanu i wyniku operacji wczytywania.

Ten kod pokazuje, jak wczytać reklamę po zainicjowaniu tagu RewardedAd:

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);

Rejestrowanie połączeń zwrotnych

Aby otrzymywać powiadomienia o zdarzeniach wyświetlania reklamy z nagrodą i zdarzeniach cyklu życia, musisz rozszerzyć klasę FullScreenContentListener. Własną podklaskę FullScreenContentListener można zarejestrować za pomocą metody RewardedAd::SetFullScreenContentListener(). Będzie ona otrzymywać wywołania zwrotne, gdy reklama wyświetli się lub nie powiedzie, jak również po jej odrzuceniu.

Ten kod pokazuje, jak powiększyć klasę i przypisać ją do reklamy:

  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 to obiekt jednorazowy. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej ponownie wyświetlić. Sprawdzoną metodą jest wczytanie innej reklamy z nagrodą w metodzie OnAdDismissedFullScreenContent() w narzędziu FullScreenContentListener, dzięki czemu następna reklama zacznie się wyświetlać natychmiast po odrzuceniu poprzedniej.

Wyświetlanie reklamy i realizowanie zdarzenia związane z nagrodą

Przed wyświetleniem użytkownikom reklamy z nagrodą musisz umożliwić mu wyraźne wyświetlenie treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą zawsze muszą być zaakceptowane.

Gdy prezentujesz reklamę, musisz przekazać obiekt UserEarnedReward, by obsłużyć nagrodę dla użytkownika.

Ten kod pokazuje, jak wyświetlić RewardedAd:

// 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);

Najczęstsze pytania

Czy istnieje czas oczekiwania na wywołanie inicjowania?
Po 10 sekundach pakiet SDK do reklam mobilnych Google w C++ kończy działanie żądania firebase::Future zwrócone przez Initialize(), nawet jeśli sieć zapośredniczeń nie przeszła procesu inicjowania.
Co w sytuacji, gdy niektóre sieci zapośredniczenia nie są gotowe do pobrania, gdy otrzymam wywołanie inicjujące?

Sprawdzoną metodą wczytywania reklam po zakończeniu inicjowania pakietu SDK jest Nawet jeśli sieć zapośredniczenia nie jest gotowa, pakiet SDK do reklam mobilnych Google nadal będzie wysyłać do tej sieci żądanie reklamy. Jeśli więc sieć zapośredniczenia zakończy proces po przekroczeniu limitu czasu, może nadal obsługiwać kolejne żądania reklamy w tej sesji.

Możesz kontynuować ankietowanie stanu zainicjowania wszystkich adapterów podczas sesji aplikacji, wywołując GetInitializationStatus().

Jak mogę sprawdzić, dlaczego dana sieć zapośredniczenia nie jest gotowa?

AdapterStatus.description() opisuje, dlaczego adapter nie jest gotowy do obsługi żądań reklam. przykładowy kod adaptera zapośredniczenia znajdziesz w kodzie źródłowym naszej przykładowej aplikacji krótkiego wprowadzenia w GitHubie.

Dodatkowe materiały

Przykład w GitHubie