Wczytywanie reklamy natywnej

Reklamy natywne to komponenty reklam, które są wyświetlane użytkownikom za pomocą komponentów interfejsu natywnych dla danej platformy. Są wyświetlane przy użyciu tych samych typów widoków, których używasz już do tworzenia układów, i można je sformatować tak, aby pasowały do wyglądu aplikacji.

Gdy reklama natywna się wczytuje, aplikacja otrzymuje obiekt reklamy zawierający jej komponenty i to aplikacja, a nie Google Mobile Ads SDK (Legacy), odpowiada za ich wyświetlanie.

Ogólnie rzecz biorąc, skuteczne wdrożenie reklam natywnych składa się z 2 etapów: wczytania reklamy za pomocą pakietu SDK, a następnie wyświetlenia jej treści w aplikacji.

Na tej stronie dowiesz się, jak używać pakietu SDK do wczytywania reklam natywnych. Wskazówka: więcej informacji o reklamach natywnych znajdziesz w naszym poradniku dotyczącym reklam natywnych.

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

Wymagania wstępne

Zanim przejdziesz dalej, skonfiguruj Google Mobile Ads SDK (Legacy).

Zawsze przeprowadzaj testy z użyciem reklam testowych

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

Najprostszym sposobem na wczytanie reklam testowych jest użycie naszego dedykowanego identyfikatora testowej jednostki reklamowej dla reklam natywnych na Androidzie:

ca-app-pub-3940256099942544/2247696110

Został on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

Szczegółowe informacje o reklamach testowych w Google Mobile Ads SDK (Legacy) znajdziesz w artykule Włączanie reklam testowych.

Wczytywanie reklam

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę Builder umożliwiającą dostosowywanie jej podczas tworzenia. Dodając detektory do obiektu AdLoader podczas jego tworzenia, aplikacja określa, jakie typy reklam natywnych jest gotowa odbierać. AdLoader żąda wtedy tylko tych typów.

Tworzenie obiektu AdLoader

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

Java

// It is recommended to call AdLoader.Builder on a background thread.
new Thread(
        () -> {
          AdLoader adLoader =
              new AdLoader.Builder(context, "AD_UNIT_ID")
                  .forNativeAd(
                      new NativeAd.OnNativeAdLoadedListener() {
                        @Override
                        // The native ad loaded successfully. You can show the ad.
                        public void onNativeAdLoaded(@NonNull NativeAd nativeAd) {}
                      })
                  .withAdListener(
                      new AdListener() {
                        @Override
                        // The native ad load failed. Check the adError message for failure
                        // reasons.
                        public void onAdFailedToLoad(@NonNull LoadAdError adError) {}
                      })
                  // Use the NativeAdOptions.Builder class to specify individual options
                  // settings.
                  .withNativeAdOptions(new NativeAdOptions.Builder().build())
                  .build();
        })
    .start();

Kotlin

// It is recommended to call AdLoader.Builder on a background thread.
CoroutineScope(Dispatchers.IO).launch {
  val adLoader =
    AdLoader.Builder(context, "AD_UNIT_ID")
      .forNativeAd { nativeAd ->
        // The native ad loaded successfully. You can show the ad.
      }
      .withAdListener(
        object : AdListener() {
          override fun onAdFailedToLoad(adError: LoadAdError) {
            // The native ad load failed. Check the adError message for failure reasons.
          }
        }
      )
      // Use the NativeAdOptions.Builder class to specify individual options settings.
      .withNativeAdOptions(NativeAdOptions.Builder().build())
      .build()
}

Zastąp AD_UNIT_ID identyfikatorem urządzenia testowego.

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

Konfigurowanie obiektu AdListener za pomocą obiektu AdLoader (opcjonalnie)

Podczas tworzenia AdLoader funkcja withAdListener ustawia AdListener dla modułu ładującego. Metoda przyjmuje AdListener jako jedyny parametr, który otrzymuje wywołania zwrotne z AdLoader, gdy wystąpią zdarzenia cyklu życia reklamy:

Java

adLoaderBuilder.withAdListener(
    // Override AdListener callbacks here.
    new AdListener() {});

Kotlin

adLoaderBuilder.withAdListener(
  // Override AdListener callbacks here.
  object : AdListener() {}
)

Wyślij żądanie

Po utworzeniu AdLoader możesz użyć go do wysyłania żądań reklam. Możesz to zrobić na 2 sposoby: loadAd() i 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 kilku reklam (maksymalnie 5):

Java

// Load three native ads.
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

// Load three native ads.
adLoader.loadAds(AdRequest.Builder().build(), 3)

Obie metody przyjmują obiekt AdRequest jako pierwszy parametr. 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, aby dodawać informacje 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ć wczytać w ramach żądania. Ta liczba jest ograniczona do 5 i nie ma gwarancji, że pakiet SDK zwróci dokładnie żądaną liczbę reklam.

Zwrócone reklamy Google będą się od siebie różnić, ale nie ma gwarancji, że reklamy z zarezerwowanych 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 wielu reklam natywnych nie działają w przypadku identyfikatorów jednostek reklamowych, które zostały skonfigurowane na potrzeby zapośredniczenia.

Wywołania zwrotne

Po wywołaniu loadAd() następuje pojedyncze wywołanie zwrotne do zdefiniowanych wcześniej metod detektora, aby dostarczyć obiekt reklamy natywnej lub zgłosić błąd.

Po wywołaniu metody loadAds() wykonywanych jest kilka takich wywołań zwrotnych (co najmniej jedno i nie więcej niż liczba żądanych reklam). Aplikacje, które żądają wielu reklam, powinny wywoływać metodę AdLoader.isLoading() w implementacjach wywołań zwrotnych, aby określić, czy proces wczytywania został zakończony.

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

Java

adLoaderBuilder
    .forNativeAd(
        nativeAd -> {
          // This callback is invoked when a native ad is successfully loaded.
        })
    .build();

Kotlin

adLoaderBuilder
  .forNativeAd { nativeAd ->
    // This callback is invoked when a native ad is successfully loaded.
  }
  .build()

Zwalnianie zasobów

Pamiętaj, aby w przypadku wczytanych reklam natywnych używać metody destroy(). Zwalnia to wykorzystywane zasoby i zapobiega wyciekom pamięci.

Sprawdź, czy wszystkie odwołania do NativeAd zostały usunięte w metodzie onDestroy() aktywności.

W wywołaniu zwrotnym onNativeAdLoaded pamiętaj o zniszczeniu wszystkich istniejących reklam natywnych, które zostaną wyrejestrowane.

Innym kluczowym sprawdzeniem jest to, czy aktywność została zniszczona. Jeśli tak, wywołaj destroy() na zwróconej reklamie i natychmiast wróć:

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Sprawdzone metody

Podczas wczytywania reklam przestrzegaj tych zasad.

  • Aplikacje, które używają reklam natywnych na liście, powinny wstępnie zapisać listę reklam w pamięci podręcznej.

  • Jeśli wstępnie buforujesz reklamy, po godzinie wyczyść pamięć podręczną i ponownie załaduj stronę.

  • Nie wywołuj loadAd() ani loadAds() w AdLoader, dopóki nie zakończy się wczytywanie pierwszego żądania.
  • Ogranicz buforowanie reklam natywnych tylko do tego, co jest potrzebne. Na przykład podczas wstępnego zapisywania w pamięci podręcznej zapisuj tylko te reklamy, które są od razu widoczne na ekranie. Reklamy natywne mają duże wykorzystanie pamięci, a buforowanie ich bez niszczenia powoduje nadmierne zużycie pamięci.

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

Akceleracja sprzętowa w przypadku reklam wideo

Aby reklamy wideo wyświetlały się prawidłowo w widokach 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 przypadku klas Activity, które korzystają z reklam.

Włączanie akceleracji sprzętowej

Jeśli aplikacja nie działa prawidłowo z włączoną globalnie akceleracją sprzętową, możesz ją kontrolować również w przypadku poszczególnych działań. Aby włączyć lub wyłączyć akcelerację sprzętową, użyj atrybutu android:hardwareAccelerated dla elementów <application> i <activity> w pliku AndroidManifest.xml. W tym przykładzie akceleracja sprzętowa jest włączona w całej aplikacji, ale wyłączona w 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 kontrolowania akceleracji sprzętowej znajdziesz w przewodniku po akceleracji sprzętowej. Pamiętaj, że nie można włączyć akceleracji sprzętowej w przypadku wyświetleń pojedynczych reklam, jeśli aktywność jest wyłączona, więc aktywność musi mieć włączoną akcelerację sprzętową.

Wyświetlanie reklamy

Po wczytaniu reklamy wystarczy ją wyświetlić użytkownikom. Więcej informacji znajdziesz w artykule Zaawansowane reklamy natywne lub Pełnoekranowe reklamy natywne.