Reklamy z nagrodą

Reklamy z nagrodą umożliwiają użytkownikom interakcję z nimi 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, studium przypadku 2.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie aktywnych reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najprostszym sposobem wczytywania reklam testowych jest użycie naszego dedykowanego identyfikatora testowej 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 specjalnie skonfigurowane tak, aby zwracać reklamy testowe w odpowiedzi na każde żądanie. Możesz ich używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, by przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

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

Implementacja

Najważniejsze czynności, jakie musisz wykonać, aby zintegrować reklamy z nagrodą:

  1. Wczytaj reklamę.
  2. Zarejestruj się na wywołania zwrotne
  3. Wyświetlać reklamę i obsługiwać zdarzenie nagrody.

Skonfiguruj: RewardedAd

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

  1. Dodaj ten nagłówek do kodu C++ aplikacji:

     #include "firebase/gma/rewarded_ad.h"
    

  2. Zadeklaruj i utwórz instancję RewardedAd:

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

  3. Zainicjuj instancję RewardedAd za pomocą widoku nadrzędnego rzutu na typ AdParent. Widok nadrzędny jest odwołaniem do systemu Android Activity lub wskaźnikiem do systemu iOS UIView w JNI.jobject

    // 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. Zamiast przechowywać przyszłość jako zmienną, możesz okresowo sprawdzać stan operacji inicjowania, wywołując InitializeLastResult() w obiekcie RewardedAd. Dzięki temu możesz śledzić proces inicjowania w globalnej pętli 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 o pracy z funkcją firebase::Future znajdziesz w artykule Używanie transakcji terminowych do monitorowania stanu ukończenia wywołań metod.

Wczytaj reklamę

Wczytywanie reklamy odbywa się za pomocą metody LoadAd() na obiekcie RewardedAd. Metoda wczytywania wymaga zainicjowania obiektu RewardedAd oraz posiadania identyfikatora jednostki reklamowej i obiektu AdRequest. Zwracany jest interfejs firebase::Future, którego możesz użyć do monitorowania stanu i wyniku operacji wczytywania.

Ten kod pokazuje, jak wczytać reklamę po zainicjowaniu 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);

Zarejestruj się na wywołania zwrotne

Aby otrzymywać powiadomienia o prezentacji reklam z nagrodą i zdarzeniach cyklu życia, musisz przedłużyć klasę FullScreenContentListener. Twoją niestandardową podklasę FullScreenContentListener możesz zarejestrować za pomocą metody RewardedAd::SetFullScreenContentListener() i będzie ona otrzymywać wywołania zwrotne po pomyślnym lub nieudanym wyświetleniu reklamy oraz po jej odrzuceniu.

Ten kod pokazuje, jak rozszerzyć zajęcia i przypisać je 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 jest obiektem jednorazowym. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej wyświetlić ponownie. Sprawdzoną metodą jest wczytywanie kolejnej reklamy z nagrodą za pomocą metody OnAdDismissedFullScreenContent() interfejsu FullScreenContentListener, tak aby następna reklama z nagrodą zaczęła ładować się zaraz po zamknięciu poprzedniej.

Wyświetlanie reklamy i obsługa zdarzenia związanego z nagrodą

Przed wyświetleniem reklamy z nagrodą musisz dać mu możliwość wyraźnego wyboru treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą muszą zawsze być włączone.

Podczas wyświetlania reklamy musisz udostępnić obiekt UserEarnedReward, który obsługuje 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 w języku C++ do reklam mobilnych Google uzupełni parametr firebase::Future zwrócony przez Initialize(), nawet jeśli sieć zapośredniczenia nadal nie zakończyła inicjowania sieci.
Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjowania?

Sprawdzoną metodą jest wczytywanie reklam po zakończeniu inicjowania pakietu SDK. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google w C++ będzie nadal wysyłać do niej żądanie reklamy. Jeśli sieć zapośredniczeń zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać kolejne żądania reklamy w tej sesji.

Możesz nadal sondować stan inicjowania wszystkich adapterów podczas sesji aplikacji, wywołując GetInitializationStatus().

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

AdapterStatus.description() wyjaśnia, dlaczego adapter nie jest gotowy do obsługi żądań reklamy. Przykład rejestrowania stanu adaptera zapośredniczenia znajdziesz w kodzie źródłowym naszej przykładowej aplikacji krótkiego wprowadzenia na GitHubie.

Dodatkowe materiały

Przykład w GitHubie