Reklamy z nagrodą


Reklamy z nagrodą umożliwiają użytkownikom wchodzenie z nimi w zamianę za nagrody w aplikacji. Z tego przewodnika dowiesz się, jak zintegrować reklamy z nagrodą Aplikacje na Androida i iOS korzystające z pakietu SDK do reklam mobilnych Google w języku C++.

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

Wymagania wstępne

Zawsze testuj reklamy za pomocą reklam testowych

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

Najłatwiejszym sposobem wczytania reklam testowych jest użycie specjalnego identyfikatora testowego reklam z nagrodą, które 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 specjalnie skonfigurowane tak, aby wyświetlać reklamy testowe w przypadku każdego żądania. możesz używać go we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby zastąpić go własnym identyfikatorem jednostki reklamowej przed opublikowaniem .

Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz na stronie Reklamy testowe.

Implementacja

Najważniejsze czynności, które należy wykonać, aby zintegrować reklamy z nagrodą:

  1. Wczytaj reklamę.
  2. Rejestrowanie wywołań zwrotnych.
  3. Wyświetl reklamę i obsługuje zdarzenie nagrody.

Skonfiguruj: RewardedAd

Reklamy z nagrodą są wyświetlane w RewardedAd obiektach, więc pierwszy krok to integracja reklam z nagrodą z aplikacją polega na utworzeniu i zainicjowaniu instancji. z RewardedAd.

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

     #include "firebase/gma/rewarded_ad.h"
    

  2. Zadeklaruj i utwórz instancję obiektu RewardedAd:

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

  3. Zainicjuj wystąpienie RewardedAd, używając widoku nadrzędnego przekazanego do typu AdParent. Widok nadrzędny to odniesienie jobject JNI 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 zachowania przyszłości jako zmiennej możesz okresowo sprawdzić stan operacji inicjowania przez wywołanie InitializeLastResult() na obiekcie RewardedAd. Może to być przydatne do śledzenia procesu inicjalizacji 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 tutaj: Używaj transakcji terminowych do monitorowania stanu realizacji metody

Wczytywanie reklamy

Wczytywanie reklamy odbywa się za pomocą metody LoadAd() obiektu RewardedAd. Metoda wczytywania wymaga zainicjowania interfejsu RewardedAd oraz identyfikator jednostki reklamowej i obiekt AdRequest. Zwracana jest wartość firebase::Future, za pomocą której można monitorować stan i wynik operacji wczytywania.

Ten kod pokazuje, jak wczytać reklamę, gdy RewardedAd pomyślnie zainicjowano:

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 wyświetlaniu reklam z nagrodą i zdarzeniach cyklu życia, musisz rozszerzyć klasę FullScreenContentListener. Twój niestandardowy Podklasę FullScreenContentListener można zarejestrować w RewardedAd::SetFullScreenContentListener(), a otrzyma ona wywołania zwrotne, gdy reklama wyświetla się prawidłowo lub nieskutecznie, a także gdy odrzucana.

Poniższy kod pokazuje, jak rozszerzyć 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 wyświetlić ponownie. Najlepiej wczytywać kolejną reklamę z nagrodą za pomocą metody OnAdDismissedFullScreenContent() w Twoim FullScreenContentListener, aby następna reklama z nagrodą zaczęła się wczytywać, gdy tylko zamkniesz poprzednią.

Wyświetlanie reklamy i obsługa zdarzenia nagrody

Przed wyświetleniem użytkownikom reklam z nagrodą musisz przedstawić im wyraźną decyzję o wyświetleniu treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą muszą być zawsze opcjonalne.

Podczas wyświetlania reklamy musisz podać obiekt UserEarnedReward, który będzie obsługiwać nagrodę dla użytkownika.

Poniższy kod pokazuje, jak wyświetlić element 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 limit czasu oczekiwania na wywołanie inicjujące?
Po 10 sekundach pakiet SDK do reklam mobilnych Google w języku C++ wykona zadanie firebase::Future zwracany przez użytkownika Initialize(), nawet jeśli sieć zapośredniczenia nadal działa nie zakończył się inicjalizacji.
Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjujące?

Zalecamy wczytywanie reklam po zakończeniu inicjalizacji pakietu SDK. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google w C++ nadal wysyła do tej sieci żądanie reklamy. Jeśli więc sieć zapośredniczeń zostanie zainicjowana po upłynięciu czasu oczekiwania, może nadal obsługiwać przyszłe żądania reklamy w .

Podczas sesji aplikacji możesz nadal sprawdzać stan inicjalizacji wszystkich adapterów, wywołując funkcję GetInitializationStatus().

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

Artykuł AdapterStatus.description() wyjaśnia, dlaczego przejściówka nie jest gotowa do naprawy żądania reklamy. Zobacz kod źródłowy przykładowa aplikacja z krótkim wprowadzeniem znajdziesz na GitHubie przykład logowania stanu adaptera zapośredniczenia.

Dodatkowe materiały

Przykład w GitHubie