Reklamy wyświetlane przy otwarciu aplikacji pojawiają się, gdy użytkownicy otwierają aplikację lub do niej wracają. Użytkownicy mogą w każdej chwili zamknąć te reklamy. Aby zarabiać na ekranie wczytywania aplikacji, używaj reklam wyświetlanych przy otwarciu aplikacji. Więcej informacji znajdziesz w artykule Wskazówki i sprawdzone metody dotyczące reklam wyświetlanych przy otwarciu aplikacji.
Z tego przewodnika dowiesz się, jak zintegrować reklamy wyświetlane przy otwarciu aplikacji z aplikacją React Native.
Wymagania wstępne
Zanim przejdziesz dalej, wykonaj te czynności:
- Skonfiguruj Google Mobile Ads SDK for React Native.
- Włącz reklamy testowe i użyj tej testowej jednostki reklamowej:
Android
ca-app-pub-3940256099942544/9257395921
iOS
ca-app-pub-3940256099942544/5575463023
Wstępne ładowanie reklam
Wstępne ładowanie reklam w Google Mobile Ads SDK for React Native automatyzuje wczytywanie i buforowanie reklam.
Wstępne ładowanie reklam zapewnia te korzyści:
- Zarządzanie plikami referencyjnymi: przechowuje pliki referencyjne do momentu wyświetlenia reklam.
- Automatyczne ponowne wczytywanie: wczytuje nową reklamę, gdy zostanie pobrana z pamięci podręcznej.
- Zarządzane ponowne próby: wczytuje nową reklamę, gdy nie uda się wczytać poprzedniej.
- Obsługa wygasania: odświeża reklamy przed wygaśnięciem.
- Optymalizacja pamięci podręcznej: optymalizuje kolejność w pamięci podręcznej, aby wyświetlać reklamy o najwyższym priorytecie.
Aby dowiedzieć się, jak ręcznie wczytywać reklamy, zapoznaj się z przewodnikiem Wczytywanie pojedynczej reklamy wyświetlanej przy otwarciu aplikacji.
Rozpocznij wstępne wczytywanie
Aby rozpocząć wstępne wczytywanie reklam, wywołaj metodę AppOpenAdPreloader.start i przekaż wartość preloadId, ustawienia konfiguracji oraz wywołania zwrotne zdarzeń, aby monitorować zmiany stanu bufora:
export function startAppOpenAdPreloader(
adUnitId: string,
preloadId: string,
customPreloadCallback?: PreloadCallback,
): boolean {
const started = AppOpenAdPreloader.start(
preloadId,
{
request: {adUnitId},
bufferSize: 2,
},
{
// Called when an ad is preloaded into the buffer.
onAdPreloaded: (event) => {
console.log(`App open ad preloaded for ${event.preloadId}`);
customPreloadCallback?.onAdPreloaded?.(event);
},
// Called when an ad fails to preload.
onAdFailedToPreload: (error: LoadAdError) => {
console.error('Failed to preload app open ad:', error.message);
customPreloadCallback?.onAdFailedToPreload?.(error);
},
// Called when all preloaded ads in the buffer have been shown.
onAdsExhausted: () => {
console.log('App open ad buffer exhausted.');
customPreloadCallback?.onAdsExhausted?.();
},
},
);
return started;
}
preloadId to ciąg znaków, który jednoznacznie identyfikuje konfigurację wstępnego ładowania reklam. Jeśli adUnitId jest używany tylko w jednej konfiguracji wstępnego wczytywania w aplikacji, możesz użyć tego identyfikatora jednostki reklamowej jako identyfikatora wstępnego wczytywania. Jeśli aplikacja wymaga kilku modułów wstępnego wczytywania dla tego samego identyfikatora jednostki reklamowej, przekaż różne ciągi znaków dla każdego identyfikatora wstępnego wczytywania.
Gdy aplikacja pobiera wstępnie załadowaną reklamę z bufora, Google Mobile Ads SDK for React Native wysyła w tle żądanie reklamy zastępczej, aby ponownie wypełnić bufor. Jeśli w buforze nie ma już wstępnie załadowanych reklam, Google Mobile Ads SDK for React Native wywołuje wywołanie zwrotne onAdsExhausted.
Limity wstępnego buforowania
Google Mobile Ads SDK for React Native wymusza limit łącznej liczby wstępnie załadowanych reklam w całej aplikacji:
- Domyślny limit: Google przechowuje w pamięci maksymalnie 6 wstępnie załadowanych reklam.
- Zalecamy zachowanie rozmiaru bufora równego 2 dla każdego identyfikatora wstępnego wczytywania.
Jeśli aplikacja osiągnie limit, żądania w tle dotyczące wstępnie wczytanych reklam zostaną wstrzymane, dopóki istniejące reklamy nie zostaną odpytane i wyświetlone lub usunięte.
Ankieta i wyświetlenie reklamy
Aby sprawdzić, czy są dostępne wstępnie wczytane reklamy, i pobrać instancję reklamy, wywołaj metodę AppOpenAdPreloader.pollAd.
Aby nasłuchiwać zdarzeń prezentacji pełnoekranowej, przed wywołaniem metody show zarejestruj wywołania zwrotne we właściwości adEventCallback zwróconej instancji AppOpenAd:
export function showPreloadedAppOpenAd(
preloadId: string,
customAdEventCallback?: FullScreenAdEventCallback,
) {
if (!AppOpenAdPreloader.isAdAvailable(preloadId)) {
console.log('No preloaded app open ad available right now.');
return;
}
const ad = AppOpenAdPreloader.pollAd(preloadId);
if (!ad) {
return;
}
ad.adEventCallback = {
// Called when the ad is presented on screen.
onAdShowedFullScreenContent: () => {
console.log('Preloaded app open ad showed full screen content.');
customAdEventCallback?.onAdShowedFullScreenContent?.();
},
// Called when the ad is closed by the user.
onAdDismissedFullScreenContent: () => {
console.log('Preloaded app open ad dismissed full screen content.');
customAdEventCallback?.onAdDismissedFullScreenContent?.();
ad.destroy();
},
// Called when presentation fails.
onAdFailedToShowFullScreenContent: (error) => {
console.error('Failed to show preloaded app open ad:', error);
customAdEventCallback?.onAdFailedToShowFullScreenContent?.(error);
ad.destroy();
},
// Called when an impression is recorded.
onAdImpression: () => {
console.log('Preloaded app open ad recorded an impression.');
customAdEventCallback?.onAdImpression?.();
},
// Called when the user taps the ad.
onAdClicked: () => {
console.log('Preloaded app open ad was clicked.');
customAdEventCallback?.onAdClicked?.();
},
// Called when the ad is estimated to have earned money.
onAdPaid: (adValue) => {
console.log(
`Preloaded app open ad paid: ${adValue.amountMicros}` +
` ${adValue.currencyCode}`,
);
customAdEventCallback?.onAdPaid?.(adValue);
},
};
ad.show();
}
Aby zwolnić pamięć i zasoby, wywołaj metodę ad.destroy w wywołaniach zwrotnych onAdDismissedFullScreenContent i onAdFailedToShowFullScreenContent, gdy użytkownik zamknie reklamę lub gdy nie uda się jej wyświetlić.
Przeczytaj informacje o odpowiedzi.
Aby sprawdzić szczegóły następnej wstępnie załadowanej reklamy bez usuwania jej z pamięci podręcznej, wywołaj metodę AppOpenAdPreloader.peekAdResponseInfo:
export function peekAppOpenAdResponseInfo(
preloadId: string,
): ResponseInfo | null {
const responseInfo = AppOpenAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo) {
console.log('Next preloaded app open ad response info:', responseInfo);
}
return responseInfo;
}
Zarządzanie reklamami wyświetlanymi przy otwarciu aplikacji za pomocą menedżera na poziomie aplikacji
Reklamy wyświetlane przy otwarciu aplikacji są wyświetlane globalnie podczas uruchamiania aplikacji i przechodzenia na pierwszy plan, dlatego zalecamy zarządzanie stanem cyklu życia modułu wstępnego wczytywania w menedżerze na poziomie aplikacji poza drzewem komponentów React.
Korzystanie z menedżera na poziomie aplikacji zapewnia kilka kluczowych korzyści:
- Utrzymuje stan modułu wstępnego wczytywania niezależnie od nawigacji po poszczególnych ekranach i cyklu życia komponentu.
- Scentralizowanie wywołań zwrotnych zdarzeń reklamowych, śledzenia stanu i czyszczenia w jednej współdzielonej instancji w aplikacji.
- Kontroluje, kiedy nasłuchiwane są zdarzenia przełączenia aplikacji na pierwszy plan, zapobiegając powielaniu prezentacji po zamknięciu reklamy.
W tym przykładzie implementujemy menedżera na poziomie aplikacji za pomocą obiektu AppOpenAdPreloader:
export class AppOpenAdManager {
private adUnitId: string;
private preloadId: string;
private appStateSubscription?: NativeEventSubscription;
private startTimeoutId?: ReturnType<typeof setTimeout>;
constructor(adUnitId: string, preloadId: string) {
this.adUnitId = adUnitId;
this.preloadId = preloadId;
}
start(): boolean {
if (!AppOpenAdPreloader.getConfiguration(this.preloadId)) {
AppOpenAdPreloader.start(
this.preloadId,
{
request: {adUnitId: this.adUnitId},
bufferSize: 2,
},
{
onAdPreloaded: (event) => {
console.log(`App open ad preloaded for ${event.preloadId}`);
},
onAdFailedToPreload: (error: LoadAdError) => {
console.error('Failed to preload app open ad:', error.message);
},
onAdsExhausted: () => {
console.log('App open ad buffer exhausted.');
},
},
);
}
if (!this.appStateSubscription && !this.startTimeoutId) {
// Delay attaching the listener to ensure native dismissal transitions complete
this.startTimeoutId = setTimeout(() => {
this.startTimeoutId = undefined;
if (!this.appStateSubscription) {
this.appStateSubscription = AppState.addEventListener(
'change',
(nextAppState: AppStateStatus) => {
if (nextAppState === 'active') {
this.showAdIfAvailable();
}
},
);
}
}, APP_STATE_LISTENER_DELAY_MS);
}
return true;
}
pause(): void {
if (this.startTimeoutId) {
clearTimeout(this.startTimeoutId);
this.startTimeoutId = undefined;
}
this.appStateSubscription?.remove();
this.appStateSubscription = undefined;
}
stop(): void {
this.pause();
AppOpenAdPreloader.destroy(this.preloadId);
}
showAdIfAvailable() {
if (!AppOpenAdPreloader.isAdAvailable(this.preloadId)) {
console.log('App open ad is not preloaded or available right now.');
return;
}
const ad = AppOpenAdPreloader.pollAd(this.preloadId);
if (!ad) {
return;
}
// Pause listener while presenting the ad
this.pause();
ad.adEventCallback = {
onAdShowedFullScreenContent: () => {
console.log('Preloaded app open ad showed full screen content.');
},
onAdDismissedFullScreenContent: () => {
console.log('Preloaded app open ad dismissed full screen content.');
ad.destroy();
this.start();
},
onAdFailedToShowFullScreenContent: (error) => {
console.error('Failed to show preloaded app open ad:', error);
ad.destroy();
this.start();
},
};
ad.show();
}
}
Nasłuchiwanie zdarzeń przełączenia aplikacji na pierwszy plan
Aby wyświetlać reklamy displayowe, gdy aplikacja wraca na pierwszy plan, zarejestruj detektor change w module AppState w komponencie głównym aplikacji, np. App.tsx. Sprawdź, kiedy stan zmieni się na active.
Możesz na przykład wywołać metodę start w instancji menedżera reklam w komponencie App.tsx.
Wyświetlanie nakładek na reklamach lub stron docelowych, np. wyświetlanie reklam pełnoekranowych lub kliknięcie banera reklamowego, powoduje przeniesienie aplikacji do tła. Gdy użytkownik wróci do aplikacji, otrzyma ona nowe zdarzenie stanu active. Aby zapobiec niezamierzonemu wyświetlaniu reklamy lub pętli, w której po powrocie z reklamy wyświetla się reklama wyświetlana przy otwarciu aplikacji z pamięci podręcznej, wykonaj te czynności:
- Przed wyświetleniem reklamy pełnoekranowej usuń detektor zdarzeń
AppState. - Aby mieć pewność, że odtwarzanie zostanie wznowione, gdy użytkownik zamknie reklamę lub gdy reklama się nie wyświetli, dodaj ponownie detektor zdarzeń
AppStatew wywołaniach zwrotnychonAdDismissedFullScreenContentionAdFailedToShowFullScreenContent.
Pełny przykład kontrolowania wstrzymywania i wznawiania detektorów zdarzeń na pierwszym planie znajdziesz w implementacji AppOpenAdManager.
Informacje o uruchomieniach „na zimno” i ekranach wczytywania
Zimny start ma miejsce, gdy aplikacja uruchamia się od zera, np. gdy użytkownik otwiera ją po raz pierwszy lub po tym, jak urządzenie zamknęło ją, aby zwolnić pamięć. Podczas uruchamiania „na zimno” nie masz wcześniej wczytanej reklamy wyświetlanej przy otwarciu aplikacji, którą można by wyświetlić.
Z powodu opóźnień w żądaniach reklamy użytkownicy mogą wejść w interakcję z aplikacją, zanim pojawi się reklama. Reklamy wyświetlane przy otwarciu aplikacji pokazuj podczas uruchamiania „na zimno” tylko na ekranie wczytywania, gdy wczytują się zasoby aplikacji. Jeśli zasoby zostaną wczytane i użytkownik dotrze do głównej treści, zanim reklama się wczyta, nie wyświetlaj reklamy.
Czyszczenie zasobów
Gdy wstępne wczytywanie nie jest już wymagane w przypadku ekranu lub identyfikatora jednostki reklamowej, np. gdy opuszczasz ekran, który wstępnie wczytuje reklamy, wywołaj metodę AppOpenAdPreloader.destroy, aby zwolnić zasoby wstępnego wczytywania i zapobiec przechowywaniu nieużywanych obiektów reklamowych w pamięci:
export function destroyAppOpenAdPreloader(preloadId: string) {
AppOpenAdPreloader.destroy(preloadId);
}
Oprócz niszczenia kolejki wstępnego wczytywania pamiętaj o niszczeniu poszczególnych instancji reklam, gdy użytkownik odrzuci reklamę lub gdy nie uda się jej wyświetlić. Szczegółowe informacje znajdziesz w sekcji Sprawdzanie i wyświetlanie reklamy.
Zobacz pełny przykład
Poniższy przykładowy komponent rozpoczyna wstępne wczytywanie po zamontowaniu, śledzi liczbę dostępnych reklam i udostępnia elementy sterujące do wyświetlania wstępnie wczytanych reklam wyświetlanych przy otwarciu aplikacji:
Zastąp te elementy:
- APP_OPEN_AD_UNIT_ID identyfikatorem jednostki reklamowej.
- PRELOAD_ID, podając identyfikator wstępnego ładowania.
Dalsze kroki
Po zintegrowaniu reklam wyświetlanych przy otwarciu aplikacji zapoznaj się z tymi tematami: