Reklamy z nagrodą

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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++.

Przeczytaj historie sukcesu klientów: studium przypadku 1 i studium przypadku 2.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

Tworząc i testując aplikacje, korzystaj z reklam testowych, a nie z aktywnych reklam produkcyjnych. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego 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 tak skonfigurowane, aby zwracać reklamy testowe dla każdego żądania. Możesz używać ich samodzielnie we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

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

Wdrażanie

Główne kroki integracji reklam z nagrodą:

  1. Wczytaj reklamę.
  2. Zarejestruj się na oddzwonienie.
  3. 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 do integracji reklam z nagrodą w Twojej aplikacji jest utworzenie i zainicjowanie wystąpienia RewardedAd.

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

     #include "firebase/gma/rewarded_ad.h"
    

  2. Zadeklaruj obiekt RewardedAd i utwórz go:

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

  3. Zainicjuj instancję RewardedAd, korzystając z przesyłania AdParent w widoku nadrzędnym. Widok nadrzędny to odniesienie JNI jobject do Androida Activity lub wskaźnik do 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. Zamiast zachowywać przyszłość jako zmienną, możesz co jakiś czas sprawdzać stan operacji inicjowania, wywołując obiekt InitializeLastResult() w obiekcie RewardedAd. Może to być przydatne do śledzenia procesu 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 firebase::Future znajdziesz w artykule Korzystanie z Futures do monitorowania stanu zakończenia wywołań metod.

Wczytywanie reklamy

Wczytywanie reklamy odbywa się za pomocą metody LoadAd() na obiekcie RewardedAd. Aby ją wczytać, musisz zainicjować obiekt RewardedAd oraz mieć identyfikator jednostki reklamowej i obiekt AdRequest. Zwracany jest firebase::Future, którego możesz 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);

Zarejestruj się na oddzwonienie

Aby otrzymywać powiadomienia o zdarzeniach wyświetlania reklam z nagrodą i zdarzeniach cyklu życia, musisz rozszerzyć klasę FullScreenContentListener. Własna podklasa FullScreenContentListener może zostać zarejestrowana za pomocą metody RewardedAd::SetFullScreenContentListener(). Będzie ona otrzymywać wywołania zwrotne po pomyślnym lub nieskutecznym wyświetlaniu reklamy albo po jej odrzuceniu.

Ten kod pokazuje, jak wydłużyć 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 jednorazowy obiekt. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej ponownie wyświetlić. Sprawdzoną metodą jest wczytanie kolejnej reklamy z nagrodą w metodzie OnAdDismissedFullScreenContent() strony FullScreenContentListener, dzięki czemu następna reklama zacznie się wczytywać po zamknięciu poprzedniej.

Wyświetlaj reklamę i obsługuj zdarzenie związane z nagrodą

Zanim wyświetlisz użytkownikowi reklamę z nagrodą, musisz mu zaproponować wyraźnie wyświetlenie treści z nagrodą. Reklamy z nagrodą zawsze muszą być opcjonalne.

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

Poniższy 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 firebase::Future zwracany przez Initialize(), nawet jeśli sieć zapośredniczenia nadal nie zakończyła inicjowania.
Co jeśli niektóre sieci zapośredniczeń nie są gotowe, gdy otrzymam wywołanie inicjujące?

Sprawdzoną metodą jest wczytanie reklam po zainicjowaniu pakietu SDK. Nawet jeśli sieć zapośredniczenia nie jest gotowa, pakiet SDK do reklam mobilnych Google C++ nadal będzie wysyłać do niej żądania reklamy. Oznacza to, że nawet po zakończeniu inicjowania sieci zapośredniczeń może ona nadal realizować żądania reklamy wysyłane w ramach tej sesji.

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

Jak sprawdzić, dlaczego dana sieć zapośredniczeń nie jest gotowa?

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

Dodatkowe materiały

Przykład w GitHubie