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ą w aplikacjach 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
- Wykonaj czynności opisane w sekcji Rozpocznij.
- (Tylko Android) Znajomość obsługi plików referencyjnych JNI
jobject
(zobacz wskazówki dotyczące Androida JNI).
Zawsze korzystaj z reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie produkcyjnych reklam. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.
Najprostszy sposób wczytywania reklam testowych to użycie dedykowanego testowego identyfikatora jednostki reklamowej na potrzeby 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 specjalnie skonfigurowane tak, by zwracały reklamy testowe w przypadku każdego żądania. 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 w pakiecie SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.
Implementacja
Oto główne etapy integracji z reklamami z nagrodą:
- Wczytaj reklamę.
- Zarejestruj się na wywołania zwrotne.
- Wyświetl reklamę i obsługuje zdarzenie nagrody.
Skonfiguruj: RewardedAd
Reklamy z nagrodą są wyświetlane w obiektach RewardedAd
, więc pierwszym krokiem do integracji reklam z nagrodą z aplikacją jest utworzenie i zainicjowanie wystąpienia RewardedAd
.
Dodaj ten nagłówek do kodu C++ aplikacji:
#include "firebase/gma/rewarded_ad.h"
Zadeklaruj i utwórz instancję obiektu
RewardedAd
:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Zainicjuj instancję
RewardedAd
za pomocą rzutowania widoku nadrzędnego na typAdParent
. Widok nadrzędny to odniesieniejobject
JNI doActivity
lub wskaźnik doUIView
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 zachowania przyszłości jako zmiennej możesz okresowo sprawdzać stan operacji inicjowania, wywołując funkcję
InitializeLastResult()
w obiekcieRewardedAd
. Może to pomóc w śledzeniu 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 o używaniu przyszłości do monitorowania stanu zakończenia wywołań metod.
Wczytywanie reklamy
Reklamę można wczytać za pomocą metody LoadAd()
w obiekcie RewardedAd
. Metoda wczytywania wymaga zainicjowania obiektu RewardedAd
oraz posiadania identyfikatora jednostki reklamowej i obiektu AdRequest
. Zwrócony zostanie firebase::Future
, którego możesz używać do monitorowania stanu i wyniku operacji wczytywania.
Ten kod pokazuje, jak wczytać reklamę po zainicjowaniu interfejsu 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 wyświetlaniu reklam z nagrodą i zdarzeniach cyklu życia, musisz rozszerzyć klasę FullScreenContentListener
. Swoją niestandardową podklasę FullScreenContentListener
możesz zarejestrować za pomocą metody RewardedAd::SetFullScreenContentListener()
i będzie ona otrzymywać wywołania zwrotne, gdy reklama wyświetli się z powodzeniem lub niepowodzeniem, a także 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
to obiekt jednorazowy. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej wyświetlić ponownie. Zalecamy wczytanie kolejnej reklamy z nagrodą za pomocą metody OnAdDismissedFullScreenContent()
na koncie FullScreenContentListener
, tak aby następna reklama z nagrodą zaczęła się wczytywać zaraz po odrzuceniu poprzedniej.
Wyświetl reklamę i obsługuj zdarzenie nagrody.
Przed wyświetleniem użytkownikom reklamy z nagrodą musisz dać im wyraźną zgodę na obejrzenie jej treści w zamian za nagrodę. Reklamy z nagrodą muszą być zawsze opcjonalne.
Gdy wyświetlasz reklamę, musisz podać obiekt UserEarnedReward
do 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 istnieje limit czasu oczekiwania na wywołanie inicjujące?
- Po 10 sekundach pakiet SDK do reklam mobilnych Google w C++ wykonuje zadanie
firebase::Future
zwrócone przezInitialize()
, nawet jeśli sieć zapośredniczenia nie zakończyła jeszcze inicjalizacji. - Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjujące?
Sprawdzoną metodą jest wczytywanie reklam po zainicjowaniu pakietu SDK. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK C++ do reklam mobilnych Google będzie nadal wysyłać do tej sieci żądanie reklamy. Jeśli więc sieć zapośredniczenia zakończy inicjowanie po upływie czasu oczekiwania, może nadal obsługiwać przyszłe żądania reklamy w tej sesji.
Możesz nadal przeprowadzać sondowanie stanu inicjowania wszystkich adapterów w trakcie sesji aplikacji, wywołując funkcję
GetInitializationStatus()
.- Jak sprawdzić, dlaczego dana sieć zapośredniczenia nie jest gotowa?
Kolumna
AdapterStatus.description()
wyjaśnia, dlaczego adapter nie jest gotowy do obsługi żądań reklamy. Przykład logowania stanu adaptera zapośredniczenia znajdziesz w kodzie źródłowym przykładowej aplikacji z krótkim wprowadzeniem w GitHubie.
Dodatkowe materiały
Przykład w GitHubie
- Wyświetl kod źródłowy naszej przykładowej aplikacji krótkiego wprowadzenia w usłudze GitHub.