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 wersji C++.
Przeczytaj kilka historii sukcesu klientów: studium przypadku 1, studium przypadku 2.
Wymagania wstępne
- Pierwsze kroki
- (Tylko na Androidzie) Znajomość obsługi pliku JNI
jobject
(zobacz wskazówki dotyczące JNI na Androida).
Zawsze testuj z reklamami testowymi
Podczas tworzenia i testowania aplikacji korzystaj z reklam testowych, a nie reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie w przypadku reklam z nagrodą identyfikatora dedykowanej testowej jednostki reklamowej, 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 tylko, aby 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
Główne kroki integracji reklam z nagrodą:
- Wczytaj reklamę.
- Zarejestruj się na wywołania zwrotne.
- Wyświetla reklamę i obsługuje zdarzenie nagrody.
Konfigurowanie urządzenia RewardedAd
Reklamy z nagrodą są wyświetlane w obiektach RewardedAd
. Pierwszym krokiem do zintegrowania reklam z nagrodą z aplikacją jest utworzenie i zainicjowanie wystąpienia elementu RewardedAd
.
Dodaj ten nagłówek do kodu C++ aplikacji:
#include "firebase/gma/rewarded_ad.h"
Zadeklaruj i utwórz instancję
RewardedAd
:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Zainicjuj instancję
RewardedAd
, korzystając z widoku nadrzędnego rzutu na typAdParent
. Widok nadrzędny jest odwołaniem do systemu AndroidActivity
w formacie JNIjobject
lub wskaźnikiemUIView
w 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);
Zamiast zachowywać przyszłość jako zmienną, możesz okresowo sprawdzać stan operacji inicjowania, wywołując
InitializeLastResult()
w obiekcieRewardedAd
. Może to ułatwić śledzenie 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 metodą firebase::Future
znajdziesz w artykule o używaniu 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 typ 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 wywołania zwrotne
Aby otrzymywać powiadomienia o prezentacji reklam z nagrodą i zdarzeniach cyklu życia, musisz wydłużyć klasę FullScreenContentListener
. Twoja podklasa niestandardowa FullScreenContentListener
może zostać zarejestrowana za pomocą metody RewardedAd::SetFullScreenContentListener()
i będzie otrzymywać wywołania zwrotne po pomyślnym lub nieudanym pokazaniu reklamy oraz po jej odrzuceniu.
Z poniższego kodu dowiesz się, 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
to obiekt jednorazowy. Oznacza to, że raz wyświetlonej reklamy z nagrodą
nie można wyświetlić ponownie. Sprawdzoną metodą jest wczytanie kolejnej reklamy z nagrodą w metodzie OnAdDismissedFullScreenContent()
na koncie FullScreenContentListener
, tak aby kolejna reklama z nagrodą zaczęła się ładować natychmiast po zamknięciu poprzedniej.
Wyświetlanie reklamy i obsługa zdarzenia nagrody
Przed wyświetleniem reklamy z nagrodą musisz dać mu wyraźne prawo do obejrzenia treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą muszą zawsze być opcjonalne.
Podczas wyświetlania reklamy musisz podać obiekt UserEarnedReward
w celu obsługi nagrody 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 jest jakiś czas oczekiwania na wywołanie inicjowania?
- Po 10 sekundach pakiet SDK w języku C++ do reklam mobilnych Google wypełnia żądanie
firebase::Future
zwrócone przez metodęInitialize()
, nawet jeśli sieć zapośredniczeń nadal nie została zainicjowana. - Co zrobić, jeśli niektóre sieci zapośredniczeń nie są gotowe na moje 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 języku C++ będzie nadal wysyłać do niej prośbę o wyświetlenie reklamy. Jeśli więc sieć zapośredniczeń zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać przyszłe żądania reklamy w tej sesji.
Możesz kontynuować sondowanie stanu inicjowania wszystkich adapterów podczas sesji aplikacji, wywołując metodę
GetInitializationStatus()
.- Jak mogę sprawdzić, dlaczego dana sieć zapośredniczeń nie jest gotowa?
AdapterStatus.description()
podaje, 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 z krótkim wprowadzeniem na GitHubie.
Dodatkowe materiały
Przykład w GitHubie
- Wyświetl kod źródłowy naszej przykładowej aplikacji szybkiego startu na GitHubie.