Reklamy natywne

Reklamy natywne to komponenty reklamowe, które są wyświetlane użytkownikom za pomocą komponentów interfejsu użytkownika dostępnych na danej platformie. Są one wyświetlane za pomocą tych samych typów widoków, których używasz do tworzenia układów, i można je sformatować tak, aby pasowały do projektu graficznego aplikacji.

Gdy wczytuje się reklama natywna, aplikacja otrzymuje obiekt reklamy zawierający jej komponenty. Za wyświetlanie reklamy odpowiada aplikacja, a nie pakiet SDK do reklam mobilnych Google.

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

Na tej stronie dowiesz się, jak za pomocą pakietu SDK wczytywać reklamy natywne. Wskazówka: więcej informacji o reklamach natywnych znajdziesz w Przewodniku po reklamach natywnych.

Możesz też zapoznać się z sukcesami naszych klientów: studium przypadku 1, studium przypadku 2.

Wymagania wstępne

Zawsze testuj reklamy za pomocą reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam produkcyjnych.

Najłatwiejszym sposobem wczytania reklam testowych jest użycie dedykowanego identyfikatora jednostki reklamowej testowej w przypadku reklam natywnych na Androidzie:

ca-app-pub-3940256099942544/2247696110

Jest 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, 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 Google znajdziesz w artykule Reklamy testowe.

Wczytywanie reklam

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę Builder, dzięki której możesz ją dostosować podczas tworzenia. Dodając do AdLoader odbiorców podczas tworzenia, aplikacja określa, jakie typy reklam natywnych jest gotowa wyświetlać. Następnie AdLoader wysyła żądanie tylko tych typów.

Tworzenie AdLoader

Ten 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.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

Metoda forNativeAd() odpowiada za przygotowanie danych AdLoader do formatu NativeAd. Gdy reklama zostanie wczytana, wywoływana jest metoda onNativeAdLoaded() obiektu listenera.

Konfigurowanie klasy AdListener za pomocą klasy AdLoader (opcjonalnie)

Podczas tworzenia funkcji AdLoader funkcja withAdListener ustawia parametr AdListener dla ładowarki. Metoda przyjmuje jako jedyny parametr obiekt AdListener, który odbiera wywołania zwrotne z obiektu AdLoader, gdy występują zdarzenia cyklu życia reklamy:

Java

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

Kotlin

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

Wyślij żądanie

Gdy skończysz tworzyć AdLoader, możesz go użyć do żądania reklam. Możesz to zrobić na 2 sposoby: loadAd()loadAds().

loadAd()

Ta metoda wysyła żądanie dotyczące pojedynczej reklamy.

Java

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

Kotlin

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

loadAds()

Ta metoda wysyła żądanie dotyczące wielu reklam (maksymalnie 5):

Java

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

Kotlin

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

Obie metody przyjmują jako pierwszy parametr obiekt AdRequest. Jest to ta sama klasa AdRequest, która jest używana w przypadku banerów i reklam pełnoekranowych. Możesz używać metod klasy AdRequest do dodawania informacji o kierowaniu, tak jak w przypadku innych formatów reklam.

Wczytywanie wielu reklam (opcjonalnie)

Metoda loadAds() przyjmuje dodatkowy parametr: liczbę reklam, które pakiet SDK powinien spróbować załadować dla żądania. Liczba ta jest ograniczona do 5 wartości, a nie ma gwarancji, że pakiet SDK zwróci dokładnie taką liczbę reklam, o którą proszono.

Zwrócone reklamy Google będą się od siebie różnić, ale nie ma gwarancji, że reklamy z rezerwowanych zasobów reklamowych lub od zewnętrznych kupujących będą unikalne.

Jeśli korzystasz z zapośredniczenia, nie używaj metody loadAds(), ponieważ żądania dotyczące wielu reklam natywnych obecnie nie działają w przypadku identyfikatorów jednostek reklamowych skonfigurowanych pod kątem zapośredniczenia.

Wywołania zwrotne

Po wywołaniu metody loadAd() wykonywane jest jedno wywołanie zwrotne wcześniej zdefiniowanej metody listenera w celu dostarczenia obiektu reklamy natywnej lub zgłoszenia błędu.

Po wywołaniu funkcji loadAds() następuje kilka takich wywołań zwrotnych (co najmniej 1 i nie więcej niż liczba żądanych reklam). Aplikacje, które wyświetlają wiele reklam, powinny w swojej implementacji wywołania zwrotnego wywołać funkcję AdLoader.isLoading(), aby określić, czy proces wczytywania został zakończony.

Oto przykład pokazujący, jak sprawdzić wartość 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 nativeAd) {
        ...
        // 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)

Zwolnij zasoby

Pamiętaj, aby w załadowanych reklamach natywnych używać metody destroy(). Dzięki temu zwolnione zostaną wykorzystane zasoby i zapobiegnie to wyciekom pamięci.

Upewnij się, że wszystkie odwołania NativeAd są niszczone w metodzie onDestroy() aktywności.

W funkcji onNativeAdLoaded callback usuń wszystkie istniejące reklamy natywne, które zostaną odwoływane.

Kolejną ważną rzeczą jest sprawdzenie, czy aktywność została zniszczona. Jeśli tak, wywołaj funkcję destroy() z zwróconej reklamy i zwracaj natychmiast:

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd 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;
        }
        ...
    }
}).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()

Sprawdzone metody

Podczas wczytywania reklam przestrzegaj tych zasad.

  • Aplikacje, które korzystają z reklam natywnych na liście, powinny z wyprzedzeniem przechowywać w pamięci podręcznej listę reklam.

  • Podczas wstępnego buforowania reklam wyczyść pamięć podręczną i ponownie załaduj reklamy po upływie godziny.

  • Nie wywołuj funkcji loadAd() ani loadAds() na elemencie AdLoader, dopóki pierwsze żądanie nie zostanie załadowane.

  • Ogranicz buforowanie reklam natywnych tylko do tego, co jest potrzebne. Na przykład podczas wstępnego buforowania przechowuj w pamięci podręcznej tylko reklamy, które są widoczne na ekranie. Reklamy natywne zajmują dużo pamięci, a ich buforowanie bez ich niszczenia powoduje nadmierne wykorzystanie pamięci.

  • usuwać reklamy natywne, gdy nie są już używane.

Sprzętowe przyspieszanie reklam wideo

Aby reklamy wideo wyświetlały się w natywnym widoku reklamy, musisz włączyć przyspieszenie sprzętowe.

Przyspieszenie sprzętowe jest domyślnie włączone, ale niektóre aplikacje mogą je wyłączyć. Jeśli dotyczy to Twojej aplikacji, zalecamy włączenie akceleracji sprzętowej dla klas aktywności, które korzystają z reklam.

Włączanie akceleracji sprzętowej

Jeśli aplikacja nie działa prawidłowo po włączeniu akceleracji sprzętowej na całym urządzeniu, możesz kontrolować ją w poszczególnych działaniach. Aby włączyć lub wyłączyć akcelerację sprzętową, użyj atrybutu android:hardwareAccelerated w elementach <application> i <activity> w pliku AndroidManifest.xml. W tym przykładzie przyspieszenie sprzętowe jest włączone w przypadku całej aplikacji, ale wyłączone w przypadku jednej 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 na ten temat. Pamiętaj, że poszczególnych wyświetleń reklam nie można włączyć do akceleracji sprzętowej, jeśli aktywność jest wyłączona. Akceleracja sprzętowa musi być włączona w samej aktywności.

Wyświetlanie reklamy

Po załadowaniu reklamy pozostaje tylko wyświetlić ją użytkownikom. Aby dowiedzieć się, jak to zrobić, zapoznaj się z przewodnikiem dotyczącym zaawansowanych funkcji natywnych.