Rozpocznij

Ten przewodnik pokazuje, jak używać dodatku reklam natywnych do implementacji reklam natywnych AdMob w aplikacji Unity. Znajdziesz w nim też kilka ważnych kwestii.

Reklamy natywne pasują zarówno do stylu, jak i funkcji materiałów, wśród których są umieszczane. Są też dopasowane do projektu aplikacji, w której żyją. Format reklam natywnych AdMob pozwala wydawcom renderować reklamy, które nie wyróżniają się z treści. Możesz korzystać z tej technologii do wdrożenia niestandardowych wizualizacji, które w pełni wykorzystują potencjał natywnego kodu w aplikacjach Unity.

Reklamy natywne wyświetlają się przy użyciu tych samych typów elementów GameObjects, z którymi już tworzysz aplikacje. Możesz je sformatować tak, aby pasowały do projektu wizualnego aplikacji, w której są umieszczone. Po załadowaniu reklamy natywnej aplikacja odbiera obiekt natywny, który zawiera jej zasoby, i wyświetla ją aplikacja Unity (a nie pakiet SDK).

Wymagania wstępne

Wczytaj formaty reklam natywnych

Reklamy natywne są ładowane przez klasę AdLoader, która ma własną klasę AdLoader.Builder, aby dostosować ją podczas tworzenia. Metoda ForNativeAd() konfiguruje AdLoader na potrzeby obsługi reklam natywnych.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
}

Zarejestruj się na potrzeby zdarzeń reklamowych AdLoader

Aby otrzymywać powiadomienia o wczytywaniu reklamy natywnej lub o tym, że nie udało się jej wczytać, dodaj do klasy AdLoader delegacje dla zdarzeń wymienionych poniżej.

OnNativeAdLoaded

Wywoływane po załadowaniu reklamy natywnej. Dostęp do załadowanej reklamy wymaga przekazania dostępu do tego zdarzenia.

Niepowodzenie testu reklamy

Wywoływane, gdy nie można wczytać reklamy natywnej.

Wczytaj reklamę

Gdy utworzysz AdLoader, wywołaj jego metodę LoadAd(), aby wysłać żądanie reklamy:

adLoader.LoadAd(new AdRequest.Builder().Build());

Tworzenie żądania reklamy razem

Fragment kodu poniżej pokazuje, jak utworzyć element AdLoader skonfigurowany pod kątem wysyłania reklam natywnych, przekazywania przedstawicieli do udanych i nieudanych żądań reklam oraz wysyłania żądań reklamy.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
    adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
    adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

Obsługa załadowanych reklam

Zdarzenie OnAdFailedToLoad jest typu EventHandle<AdFailedToLoadEventArgs>. Poniżej znajdziesz przyczyny analizy tego problemu.

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    Debug.Log("Native ad failed to load: " + args.Message);
}

Wyświetlanie reklamy natywnej

Po wczytaniu reklamy natywnej wywoływane jest zdarzenie dotyczące odpowiedniego formatu reklamy. Będzie ona wówczas odpowiedzialna za wyświetlanie reklamy, chociaż nie musi to robić od razu.

Obsługa obciążenia reklamy

Zdarzenie OnNativeAdLoaded jest typu EventHandler<NativeAdEventArgs>. Reklama umieszczona w obiekcie NativeAd może zostać pobrana z domeny NativeAdEventArgs, jak pokazano poniżej:

private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

Pobieranie zasobów reklamy natywnej

Po wczytaniu reklam ich zasoby będą dostępne w sposób podany poniżej. Zasoby graficzne są zwracane jako obiekty Texture2D, a zasoby tekstowe są zwracane jako obiekty string.

private bool nativeAdLoaded;
private NativeAd nativeAd;

void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for the icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        // Get string for headline asset of native ad.
        string headline = this.nativeAd.GetHeadlineText();
    }
}

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}

Pamiętaj, że zasoby reklamowe powinny być dostępne tylko w głównym wątku, np. przy użyciu metody Update() ze skryptu Unity. Pamiętaj też, że te zasoby nie zawsze są obecne i należy je sprawdzić przed wyświetleniem:

  • GetStarRating()
  • GetStore()
  • GetPrice()
  • GetAdvertiser()
  • GetIconTexture()

Zasób Informacja

Zasób reklamy Informacja jest wymagany w ramach reklamy natywnej. Ważne jest też, aby komponent reklamy Informacja był łatwo widoczny, więc wybierz właściwe kolory i obrazy.

Rejestrowanie obiektów GameObjects w przypadku zasobu reklamy

Musisz zarejestrować GameObject, aby komponent reklamy wyświetlał się w Twojej aplikacji Unity. Jeśli rejestracja zakończy się powodzeniem, metoda użyta do zarejestrowania GameObject zwróci bool. W przypadku List<GameObject> metoda zwraca int, która wskazuje zarejestrowaną liczbę liczników GameObject.

Jeśli rejestracja zasobu reklamy się nie powiedzie, wyświetlenia i kliknięcia odpowiedniej reklamy natywnej nie zostaną rozpoznane.

if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register the icon ad asset.
}

GameObject zarejestrowany dla zasobu reklamy musi zawierać komponent konwertowalny, który odzwierciedla rozmiar i kształt elementu GameObject. Jeśli w obiektach GameObject zarejestrowanych w zasobach reklamowych brakuje komponentów Collider lub są one nieprawidłowo skonfigurowane, reklamy natywne nie będą działać prawidłowo.

We fragmencie kodu poniżej do elementu GameObject dodawany jest BoxCollider, który wyświetla komponent z nagłówkiem reklamy natywnej za pomocą TextMesh. Po dołączeniu elementu BoxCollider do GameObject będzie on automatycznie skalowany, aby dopasować się do komponentu komponentu TextMesh.

// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;

// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;

// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();

Demo

Poniższy kod pokazuje, jak pobrać zasób ikony reklamy z wczytaną reklamą natywną, wyświetlić go, ustawiając teksturę Quad i rejestrując GameObject, aby umożliwić wyświetlenie zasobu. Proces pobierania zasobu reklamy i rejestrowania go w klasie reklamy natywnej należy powtarzać dla każdego zasobu wyświetlanego w aplikacji.

private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
        icon.transform.position = new Vector3(1, 1, 1);
        icon.transform.localScale = new Vector3(1, 1, 1);
        icon.GetComponent<Renderer>().material.mainTexture = iconTexture;

        // Register GameObject that will display icon asset of native ad.
        if (!this.nativeAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}