Reklamy natywne

Reklamy natywne to zasoby reklamy, które są wyświetlane użytkownikom za pomocą komponentów interfejsu natywnego na platformie. Są wyświetlane z użyciem tych samych typów widoków danych, w których masz już opracowane układy, a także można je formatować, by pasowały do wyglądu i stylu elementów, w których mieszkają. W przypadku kodowania oznacza to, że po załadowaniu reklamy natywnej obiekt otrzymuje obiekt NativeAd, który zawiera zawarte w niej zasoby, a aplikacja (a nie pakiet SDK do reklam mobilnych Google) odpowiada za ich wyświetlanie.

Ogólnie rzecz biorąc, wdrożenie reklam natywnych składa się z 2 etapów: wczytania reklamy za pomocą pakietu SDK i wyświetlania treści reklamy w aplikacji. Ta strona dotyczy korzystania z pakietu SDK do wczytywania reklam natywnych.

Wymagania wstępne

Wczytywanie reklamy

Reklamy natywne są ładowane przez klasę AdLoader, która ma własną klasę Builder, aby dostosować ją podczas tworzenia. Gdy dodasz detektory do obiektu AdLoader podczas tworzenia aplikacji, aplikacja określa typy reklam natywnych, które może je odbierać. Następnie AdLoader żąda tylko tych typów.

Tworzenie modułu AdLoader

Poniższy kod pokazuje, jak utworzyć AdLoader, który może wczytywać reklamy natywne:

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd NativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

Przygotowanie do formatu reklam natywnych

Pierwsza z powyższych metod odpowiada za przygotowanie elementu AdLoader na potrzeby formatu reklamy natywnej:

forNativeAd()
Wywoływanie tej metody powoduje skonfigurowanie żądania AdLoader tak, by wysyłał żądania reklam natywnych. Po załadowaniu reklamy wywołany jest obiekt onNativeAdLoaded() detektora.

Gdy AdLoader wysyła żądanie reklamy, Google wybiera i zwraca reklamę, która maksymalizuje zysk wydawcy.

Używanie AdListener z AdLoader

Podczas tworzenia obiektu AdLoader powyżej funkcja withAdListener ustawia AdListener.

Ten krok jest opcjonalny. Ta metoda pobiera AdListener jako jedyny parametr, który otrzymuje wywołania zwrotne z AdLoader, gdy mają miejsce zdarzenia cyklu życia reklamy:

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

Wczytuję reklamy

Po stworzeniu AdLoader możesz go używać do wczytywania reklam. Możesz to zrobić na 2 sposoby: loadAd() lub loadAds().

Metoda loadAd() wysyła żądanie pojedynczej reklamy:

loadAd()
Ta metoda wysyła żądanie pojedynczej reklamy.

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

Metoda loadAds() wysyła żądanie wielu reklam (maksymalnie 5):

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

Obie z tych metod jako pierwszy parametr pobierają obiekt AdRequest. Jest to ta sama klasa AdRequest, która jest używana w banerach i reklamach pełnoekranowych. Możesz też używać metod klasy AdRequest, by dodawać informacje o kierowaniu tak samo jak w przypadku innych formatów reklam.

loadAds() pobiera dodatkowy parametr: liczbę reklam, które pakiet SDK powinien ładować w żądaniu. Liczba ta jest ograniczona do maksymalnie 5. Nie gwarantujemy, że pakiet SDK zwróci dokładną liczbę żądanych reklam. Jeśli wywołanie loadAds() spowoduje zwrócenie wielu reklam, będą się one różnić od siebie.

Po wywołaniu loadAd() nastąpi wywołanie zwrotne do metod detektora zdefiniowanych powyżej, aby wyświetlić obiekt reklamy natywnej lub zgłosić błąd.

Po wywołaniu loadAds() zostanie wykonanych wiele wywołań zwrotnych (co najmniej 1 i nie więcej niż wymagana liczba reklam). Aplikacje wysyłające wiele reklam powinny wywoływać metodę AdLoader.isLoading() w implementacjach wywołania zwrotnego, aby ustalić, czy proces wczytywania się zakończył.

Oto przykład, który pokazuje, jak sprawdzić isLoading() w wywołaniu zwrotnym onNativeAdLoaded():

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd ad) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

Czyszczenie

Pamiętaj, by w załadowanych reklamach natywnych zastosować metodę destroy(). To pozwala zwolnić niewykorzystane zasoby i zapobiega wyciekom pamięci.

Upewnij się, że wszystkie odniesienia do NativeAd zostały zniszczone w metodzie onDestroy().

W wywołaniu zwrotnym onNativeAdLoaded musisz zniszczyć wszystkie istniejące reklamy natywne, które zostaną wycofane.

Inny kluczowy mechanizm to sprawdzanie, czy aktywność jest niszczona. Jeśli tak, wywołaj destroy() w zwróconej reklamie i natychmiast zwróć:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd ad) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            ad.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

Zawsze testuj z reklamami testowymi

Tworząc i testując aplikacje, upewnij się, że korzystasz z reklam testowych, a nie z aktywnych reklam produkcyjnych. W przeciwnym razie możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora testowej jednostki reklamowej na potrzeby zaawansowanej reklamy natywnej dla Androida:

ca-app-pub-3940256099942544/2247696110

Została ona specjalnie skonfigurowana pod kątem zwracania reklam testowych dla każdego żądania. Możesz używać jej we własnych aplikacjach podczas programowania, testowania i debugowania. Wystarczy, że zastąpisz go identyfikatorem jednostki reklamowej przed opublikowaniem aplikacji.

Więcej informacji o działaniu reklam testowych pakietu SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Kiedy żądać reklam

Aplikacje, w których wyświetlają się reklamy natywne, są dostępne bez zbędnej zwłoki przed wyświetleniem. W wielu przypadkach jest to zalecana metoda. Na przykład aplikacja z listą elementów zawierających reklamy natywne może się wczytywać do całej listy, ponieważ niektóre reklamy wyświetlają się dopiero po przewinięciu widoku przez użytkownika, a inne w ogóle mogą nie być widoczne.

Akceleracja sprzętowa na potrzeby reklam wideo

Aby reklamy wideo wyświetlały się w wyświetleniach reklam natywnych, musisz włączyć akcelerację sprzętową.

Akceleracja sprzętowa jest domyślnie włączona, ale niektóre aplikacje mogą ją wyłączyć. Jeśli dotyczy to Twojej aplikacji, zalecamy włączenie akceleracji sprzętowej w klasach aktywności, które używają reklam.

Włączanie akceleracji sprzętowej

Jeśli aplikacja działa nieprawidłowo po włączeniu akceleracji sprzętowej na całym świecie, możesz ją kontrolować dla poszczególnych aktywności. Aby włączyć lub wyłączyć akcelerację sprzętową, możesz użyć atrybutu android:hardwareAccelerated elementów <application> i <activity> w AndroidManifest.xml. Ten przykład włącza akcelerację sprzętową w całej aplikacji, ale wyłącza ją w 1 aktywności:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

Więcej informacji o opcjach sterowania akceleracją sprzętową znajdziesz w przewodniku po akceleracji sprzętowej. Pamiętaj, że przy włączonej akceleracji sprzętowej nie można włączyć pojedynczych widoków reklam dla akceleracji sprzętowej, więc ta aktywność musi mieć włączoną akcelerację sprzętową.

Wyświetlanie reklamy natywnej

Po załadowaniu reklamy pozostaje tylko jej wyświetlanie użytkownikom. Aby dowiedzieć się, jak to zrobić, przeczytaj nasz przewodnik dla zaawansowanych reklam natywnych.

,

Reklamy natywne to zasoby reklamy, które są wyświetlane użytkownikom za pomocą komponentów interfejsu natywnego na platformie. Są wyświetlane z użyciem tych samych typów widoków danych, w których masz już opracowane układy, a także można je formatować, by pasowały do wyglądu i stylu elementów, w których mieszkają. W przypadku kodowania oznacza to, że po załadowaniu reklamy natywnej obiekt otrzymuje obiekt NativeAd, który zawiera zawarte w niej zasoby, a aplikacja (a nie pakiet SDK do reklam mobilnych Google) odpowiada za ich wyświetlanie.

Ogólnie rzecz biorąc, wdrożenie reklam natywnych składa się z 2 etapów: wczytania reklamy za pomocą pakietu SDK i wyświetlania treści reklamy w aplikacji. Ta strona dotyczy korzystania z pakietu SDK do wczytywania reklam natywnych.

Wymagania wstępne

Wczytywanie reklamy

Reklamy natywne są ładowane przez klasę AdLoader, która ma własną klasę Builder, aby dostosować ją podczas tworzenia. Gdy dodasz detektory do obiektu AdLoader podczas tworzenia aplikacji, aplikacja określa typy reklam natywnych, które może je odbierać. Następnie AdLoader żąda tylko tych typów.

Tworzenie modułu AdLoader

Poniższy kod pokazuje, jak utworzyć AdLoader, który może wczytywać reklamy natywne:

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd NativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

Przygotowanie do formatu reklam natywnych

Pierwsza z powyższych metod odpowiada za przygotowanie elementu AdLoader na potrzeby formatu reklamy natywnej:

forNativeAd()
Wywoływanie tej metody powoduje skonfigurowanie żądania AdLoader tak, by wysyłał żądania reklam natywnych. Po załadowaniu reklamy wywołany jest obiekt onNativeAdLoaded() detektora.

Gdy AdLoader wysyła żądanie reklamy, Google wybiera i zwraca reklamę, która maksymalizuje zysk wydawcy.

Używanie AdListener z AdLoader

Podczas tworzenia obiektu AdLoader powyżej funkcja withAdListener ustawia AdListener.

Ten krok jest opcjonalny. Ta metoda pobiera AdListener jako jedyny parametr, który otrzymuje wywołania zwrotne z AdLoader, gdy mają miejsce zdarzenia cyklu życia reklamy:

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

Wczytuję reklamy

Po stworzeniu AdLoader możesz go używać do wczytywania reklam. Możesz to zrobić na 2 sposoby: loadAd() lub loadAds().

Metoda loadAd() wysyła żądanie pojedynczej reklamy:

loadAd()
Ta metoda wysyła żądanie pojedynczej reklamy.

Java

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())

Metoda loadAds() wysyła żądanie wielu reklam (maksymalnie 5):

Java

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

Obie z tych metod jako pierwszy parametr pobierają obiekt AdRequest. Jest to ta sama klasa AdRequest, która jest używana w banerach i reklamach pełnoekranowych. Możesz też używać metod klasy AdRequest, by dodawać informacje o kierowaniu tak samo jak w przypadku innych formatów reklam.

loadAds() pobiera dodatkowy parametr: liczbę reklam, które pakiet SDK powinien ładować w żądaniu. Liczba ta jest ograniczona do maksymalnie 5. Nie gwarantujemy, że pakiet SDK zwróci dokładną liczbę żądanych reklam. Jeśli wywołanie loadAds() spowoduje zwrócenie wielu reklam, będą się one różnić od siebie.

Po wywołaniu loadAd() nastąpi wywołanie zwrotne do metod detektora zdefiniowanych powyżej, aby wyświetlić obiekt reklamy natywnej lub zgłosić błąd.

Po wywołaniu loadAds() zostanie wykonanych wiele wywołań zwrotnych (co najmniej 1 i nie więcej niż wymagana liczba reklam). Aplikacje wysyłające wiele reklam powinny wywoływać metodę AdLoader.isLoading() w implementacjach wywołania zwrotnego, aby ustalić, czy proces wczytywania się zakończył.

Oto przykład, który pokazuje, jak sprawdzić isLoading() w wywołaniu zwrotnym onNativeAdLoaded():

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd ad) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

Czyszczenie

Pamiętaj, by w załadowanych reklamach natywnych zastosować metodę destroy(). To pozwala zwolnić niewykorzystane zasoby i zapobiega wyciekom pamięci.

Upewnij się, że wszystkie odniesienia do NativeAd zostały zniszczone w metodzie onDestroy().

W wywołaniu zwrotnym onNativeAdLoaded musisz zniszczyć wszystkie istniejące reklamy natywne, które zostaną wycofane.

Inny kluczowy mechanizm to sprawdzanie, czy aktywność jest niszczona. Jeśli tak, wywołaj destroy() w zwróconej reklamie i natychmiast zwróć:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd ad) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            ad.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

Zawsze testuj z reklamami testowymi

Tworząc i testując aplikacje, upewnij się, że korzystasz z reklam testowych, a nie z aktywnych reklam produkcyjnych. W przeciwnym razie możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora testowej jednostki reklamowej na potrzeby zaawansowanej reklamy natywnej dla Androida:

ca-app-pub-3940256099942544/2247696110

Została ona specjalnie skonfigurowana pod kątem zwracania reklam testowych dla każdego żądania. Możesz używać jej we własnych aplikacjach podczas programowania, testowania i debugowania. Wystarczy, że zastąpisz go identyfikatorem jednostki reklamowej przed opublikowaniem aplikacji.

Więcej informacji o działaniu reklam testowych pakietu SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Kiedy żądać reklam

Aplikacje, w których wyświetlają się reklamy natywne, są dostępne bez zbędnej zwłoki przed wyświetleniem. W wielu przypadkach jest to zalecana metoda. Na przykład aplikacja z listą elementów zawierających reklamy natywne może się wczytywać do całej listy, ponieważ niektóre reklamy wyświetlają się dopiero po przewinięciu widoku przez użytkownika, a inne w ogóle mogą nie być widoczne.

Akceleracja sprzętowa na potrzeby reklam wideo

Aby reklamy wideo wyświetlały się w wyświetleniach reklam natywnych, musisz włączyć akcelerację sprzętową.

Akceleracja sprzętowa jest domyślnie włączona, ale niektóre aplikacje mogą ją wyłączyć. Jeśli dotyczy to Twojej aplikacji, zalecamy włączenie akceleracji sprzętowej w klasach aktywności, które używają reklam.

Włączanie akceleracji sprzętowej

Jeśli aplikacja działa nieprawidłowo po włączeniu akceleracji sprzętowej na całym świecie, możesz ją kontrolować dla poszczególnych aktywności. Aby włączyć lub wyłączyć akcelerację sprzętową, możesz użyć atrybutu android:hardwareAccelerated elementów <application> i <activity> w AndroidManifest.xml. Ten przykład włącza akcelerację sprzętową w całej aplikacji, ale wyłącza ją w 1 aktywności:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

Więcej informacji o opcjach sterowania akceleracją sprzętową znajdziesz w przewodniku po akceleracji sprzętowej. Pamiętaj, że przy włączonej akceleracji sprzętowej nie można włączyć pojedynczych widoków reklam dla akceleracji sprzętowej, więc ta aktywność musi mieć włączoną akcelerację sprzętową.

Wyświetlanie reklamy natywnej

Po załadowaniu reklamy pozostaje tylko jej wyświetlanie użytkownikom. Aby dowiedzieć się, jak to zrobić, przeczytaj nasz przewodnik dla zaawansowanych reklam natywnych.