Ten przewodnik jest przeznaczony dla wydawców, którzy integrują reklamy otwierające aplikację za pomocą pakietu SDK do reklam mobilnych Google.
Reklamy wyświetlane przy otwarciu aplikacji to specjalny format reklam przeznaczony dla wydawców, którzy chcą zarabiać na ekranach wczytywania aplikacji. Reklamy wyświetlane przy otwarciu aplikacji można w każdej chwili zamknąć. Są one przeznaczone do wyświetlania, gdy użytkownicy przenoszą aplikację na pierwszy plan.
Reklamy wyświetlane przy otwarciu aplikacji automatycznie wyświetlają nieduże pole z oznaczeniem marki, dzięki czemu użytkownicy wiedzą, że znajdują się w Twojej aplikacji. Oto przykład reklamy wyświetlanej przy otwarciu aplikacji:
Wymagania wstępne
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze testuj za pomocą reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych zamiast reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora jednostki reklamowej testowej w przypadku reklam otwierających aplikację:
ca-app-pub-3940256099942544/9257395921
Został on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go identyfikatorem swojej jednostki reklamowej.
Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych Google znajdziesz w artykule Włączanie reklam testowych.
Rozszerzanie klasy Application
Utwórz nową klasę, która rozszerza klasę Application
. Umożliwia to zarządzanie reklamami powiązanymi ze stanem aplikacji, a nie z pojedynczym Activity
, z uwzględnieniem cyklu życia:
Java
public class MyApplication extends Application
implements ActivityLifecycleCallbacks, DefaultLifecycleObserver {
private AppOpenAdManager appOpenAdManager;
private Activity currentActivity;
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(this);
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
appOpenAdManager = new AppOpenAdManager();
}
Kotlin
class MyApplication :
MultiDexApplication(), Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver {
private lateinit var appOpenAdManager: AppOpenAdManager
private var currentActivity: Activity? = null
override fun onCreate() {
super<MultiDexApplication>.onCreate()
registerActivityLifecycleCallbacks(this)
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
appOpenAdManager = AppOpenAdManager()
}
Następnie dodaj ten kod do pliku AndroidManifest.xml
:
<!-- TODO: Update to reference your actual package name. -->
<application
android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>
Wdrażanie komponentu narzędziowego
Reklama powinna wyświetlać się szybko, dlatego najlepiej jest ją wczytać, zanim będzie potrzebna. Dzięki temu reklama będzie gotowa do wyświetlenia, gdy tylko użytkownik otworzy aplikację.
Zaimplementuj komponent narzędziowy AppOpenAdManager
, aby enkapsulować pracę związaną z wczytywaniem i wyświetlaniem reklam wyświetlanych przy otwarciu aplikacji:
Java
private class AppOpenAdManager {
private static final String LOG_TAG = "AppOpenAdManager";
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";
private AppOpenAd appOpenAd = null;
private boolean isLoadingAd = false;
private boolean isShowingAd = false;
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private long loadTime = 0;
/** Constructor. */
public AppOpenAdManager() {}
Kotlin
private inner class AppOpenAdManager {
private var appOpenAd: AppOpenAd? = null
private var isLoadingAd = false
var isShowingAd = false
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private var loadTime: Long = 0
Aby użyć AppOpenAdManager
, wywołaj publiczne metody opakowujące w instancji singletona
MyApplication
. Klasa Application
współpracuje z pozostałą częścią kodu, przekazując zadanie wczytywania i wyświetlania reklamy do menedżera.
Wczytywanie reklamy
Następnym krokiem jest wypełnienie loadAd()
i obsługa wywołań zwrotnych wczytywania reklamy.
Java
Kotlin
Zastąp AD_UNIT_ID identyfikatorem swojej jednostki reklamowej.
Wyświetl reklamę
Najczęstsza implementacja reklamy wyświetlanej przy otwarciu aplikacji polega na próbie wyświetlenia reklamy przy otwarciu aplikacji w pobliżu uruchomienia aplikacji, rozpoczęciu wyświetlania treści aplikacji, jeśli reklama nie jest gotowa, i wstępnym wczytaniu innej reklamy na następną okazję do wyświetlenia reklamy przy otwarciu aplikacji. Przykłady implementacji znajdziesz w wskazówkach dotyczących reklam wyświetlanych przy otwarciu aplikacji.
Poniższy kod wyświetla reklamę, a następnie ją ponownie wczytuje:
Java
public void showAdIfAvailable(
@NonNull final Activity activity,
@NonNull OnShowAdCompleteListener onShowAdCompleteListener) {
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(TAG, "The app open ad is already showing.");
return;
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (appOpenAd == null) {
Log.d(TAG, "The app open ad is not ready yet.");
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
return;
}
isShowingAd = true;
appOpenAd.show(activity);
}
Kotlin
fun showAdIfAvailable(activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener) {
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(TAG, "The app open ad is already showing.")
return
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (appOpenAd == null) {
Log.d(TAG, "The app open ad is not ready yet.")
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
return
}
isShowingAd = true
appOpenAd?.show(activity)
}
Ustawianie FullScreenContentCallback
FullScreenContentCallback
obsługuje zdarzenia związane z wyświetlaniem AppOpenAd
. Zanim wyświetlisz AppOpenAd
, ustaw wywołanie zwrotne:
Java
appOpenAd.setFullScreenContentCallback(
new FullScreenContentCallback() {
@Override
public void onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
Log.d(TAG, "Ad dismissed fullscreen content.");
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null;
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
}
@Override
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
// Called when full screen content failed to show.
Log.d(TAG, adError.getMessage());
appOpenAd = null;
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
}
@Override
public void onAdShowedFullScreenContent() {
Log.d(TAG, "Ad showed fullscreen content.");
}
@Override
public void onAdImpression() {
// Called when an impression is recorded for an ad.
Log.d(TAG, "The ad recorded an impression.");
}
@Override
public void onAdClicked() {
// Called when ad is clicked.
Log.d(TAG, "The ad was clicked.");
}
});
Kotlin
appOpenAd?.fullScreenContentCallback =
object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
Log.d(TAG, "Ad dismissed fullscreen content.")
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
// Called when full screen content failed to show.
Log.d(TAG, adError.message)
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
}
override fun onAdShowedFullScreenContent() {
Log.d(TAG, "Ad showed fullscreen content.")
}
override fun onAdImpression() {
// Called when an impression is recorded for an ad.
Log.d(TAG, "The ad recorded an impression.")
}
override fun onAdClicked() {
// Called when ad is clicked.
Log.d(TAG, "The ad was clicked.")
}
}
Uwzględnij czas wygaśnięcia reklamy
Aby uniknąć wyświetlania wygasłych reklam, dodaj do AppOpenAdManager
metodę, która sprawdza, ile czasu minęło od wczytania odwołania do reklamy. Następnie użyj tej metody, aby sprawdzić, czy reklama jest nadal ważna.
Java
/** Check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
long dateDifference = (new Date()).getTime() - loadTime;
long numMilliSecondsPerHour = 3600000;
return (dateDifference < (numMilliSecondsPerHour * numHours));
}
/** Check if ad exists and can be shown. */
private boolean isAdAvailable() {
// For time interval details, see: https://support.google.com/admob/answer/9341964
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}
Kotlin
/** Check if ad was loaded more than n hours ago. */
private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
val dateDifference: Long = Date().time - loadTime
val numMilliSecondsPerHour: Long = 3600000
return dateDifference < numMilliSecondsPerHour * numHours
}
/** Check if ad exists and can be shown. */
private fun isAdAvailable(): Boolean {
// For time interval details, see: https://support.google.com/admob/answer/9341964
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
}
Śledzenie bieżącej aktywności
Aby wyświetlać reklamę, musisz mieć kontekst Activity
. Aby śledzić najnowszą aktywność, zarejestruj i wdroż Application.ActivityLifecycleCallbacks
.
Java
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {}
@Override
public void onActivityStarted(@NonNull Activity activity) {
// An ad activity is started when an ad is showing, which could be AdActivity class from Google
// SDK or another activity class implemented by a third party mediation partner. Updating the
// currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
// one that shows the ad.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity;
}
}
@Override
public void onActivityResumed(@NonNull Activity activity) {}
@Override
public void onActivityPaused(@NonNull Activity activity) {}
@Override
public void onActivityStopped(@NonNull Activity activity) {}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {}
Kotlin
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
// An ad activity is started when an ad is showing, which could be AdActivity class from Google
// SDK or another activity class implemented by a third party mediation partner. Updating the
// currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
// one that shows the ad.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity
}
}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
registerActivityLifecycleCallbacks
umożliwia nasłuchiwanie wszystkich zdarzeń Activity
. Nasłuchując momentów rozpoczęcia i zakończenia aktywności, możesz śledzić odwołanie do bieżącego Activity
, które następnie wykorzystasz do wyświetlania reklamy otwieranej w aplikacji.
Nasłuchiwanie zdarzeń przejścia aplikacji na pierwszy plan
Aby nasłuchiwać zdarzeń pierwszego planu aplikacji:
Dodaj biblioteki do pliku Gradle.
Aby otrzymywać powiadomienia o zdarzeniach związanych z przełączaniem aplikacji na pierwszy plan, musisz zarejestrować DefaultLifecycleObserver
. Dodaj jego zależność do pliku kompilacji na poziomie aplikacji:
Kotlin
dependencies { implementation("com.google.android.gms:play-services-ads:24.5.0") implementation("androidx.lifecycle:lifecycle-process:2.8.3") }
Zakręcony
dependencies { implementation 'com.google.android.gms:play-services-ads:24.5.0' implementation 'androidx.lifecycle:lifecycle-process:2.8.3' }
Implementowanie interfejsu obserwatora cyklu życia
Możesz nasłuchiwać zdarzeń przejścia na pierwszy plan, implementując interfejs DefaultLifecycleObserver
.
Aby wyświetlić reklamę wyświetlaną przy otwarciu aplikacji, zaimplementuj funkcję onStart()
.
Java
@Override
public void onStart(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onStart(owner);
// Show the ad (if available) when the app moves to foreground.
appOpenAdManager.showAdIfAvailable(currentActivity);
}
Kotlin
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
currentActivity?.let {
// Show the ad (if available) when the app moves to foreground.
appOpenAdManager.showAdIfAvailable(it)
}
}
Uruchamianie „na zimno” i ekrany wczytywania
Dokumentacja zakłada, że reklamy wyświetlane przy otwarciu aplikacji są wyświetlane tylko wtedy, gdy użytkownicy przywracają aplikację do pierwszego planu, gdy jest ona zawieszona w pamięci. „Uruchomienia na zimno” występują, gdy aplikacja jest uruchamiana, ale nie została wcześniej zawieszona w pamięci.
Przykładem uruchomienia „na zimno” jest sytuacja, gdy użytkownik otwiera aplikację po raz pierwszy. W przypadku uruchamiania „na zimno” nie masz wcześniej wczytanej reklamy wyświetlanej przy otwarciu aplikacji, która jest gotowa do natychmiastowego wyświetlenia. Opóźnienie między wysłaniem żądania reklamy a otrzymaniem odpowiedzi może spowodować, że użytkownicy będą mogli przez chwilę korzystać z aplikacji, zanim zaskoczy ich reklama wyświetlona bez kontekstu. Należy tego unikać, ponieważ negatywnie wpływa to na wrażenia użytkowników.
Najlepszym sposobem na używanie reklam wyświetlanych przy otwarciu aplikacji podczas uruchamiania „na zimno” jest użycie ekranu wczytywania do wczytania zasobów gry lub aplikacji i wyświetlanie reklamy tylko na tym ekranie. Jeśli aplikacja została wczytana i użytkownik został przekierowany do głównej treści aplikacji, nie wyświetlaj reklamy.
Sprawdzone metody
Reklamy wyświetlane przy otwarciu aplikacji pomagają zarabiać na ekranie wczytywania aplikacji, gdy jest ona uruchamiana po raz pierwszy i podczas przełączania się między aplikacjami. Ważne jest jednak, aby pamiętać o sprawdzonych metodach, dzięki którym użytkownicy będą mogli wygodnie korzystać z aplikacji. Najlepiej:
- Pokazuj pierwszą reklamę wyświetlaną przy otwarciu aplikacji dopiero wtedy, gdy użytkownicy skorzystają już kilka razy z Twojej aplikacji.
- Wyświetlaj reklamy wyświetlane przy otwarciu aplikacji w czasie, gdy użytkownicy czekają na wczytanie aplikacji.
- Jeśli ekran wczytywania znajduje się pod reklamą wyświetlaną przy otwarciu aplikacji i wczyta się przed zamknięciem reklamy, możesz go zamknąć, korzystając z metody
onAdDismissedFullScreenContent()
.
Przykłady w GitHubie
Dalsze kroki
Zapoznaj się z tymi tematami: