Rozpocznij

Z tego przewodnika dowiesz się, jak za pomocą dodatku do reklam natywnych wdrożyć w aplikacji Unity reklamy natywne AdMob, a także poznasz kilka ważnych kwestii, które warto wziąć pod uwagę.

Reklamy natywne odpowiadają zarówno formie, jak i funkcjom miejsca, w którym się wyświetlają. Pasują też do projektu wizualnego aplikacji, w której są umieszczone. Format reklamy natywnej AdMob umożliwia wydawcom renderowanie reklam, które pasują wyglądem do treści. Możesz użyć tej technologii do wdrożenia renderowania niestandardowego, które w pełni wykorzystuje potencjał kodu natywnego w aplikacjach Unity.

Reklamy natywne są wyświetlane przy użyciu tych samych GameObjects, za pomocą których tworzysz aplikacje, i można je formatować tak, aby pasowały do wyglądu interfejsu użytkownika, w którym się znajdują. Gdy reklama natywna się załaduje, aplikacja otrzyma obiekt natywny zawierający jej komponenty, a aplikacja Unity (a nie pakiet SDK) wyświetli te komponenty.

Wymagania wstępne

Wczytywanie formatów reklam natywnych

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę AdLoader.Builder, aby dostosować ją podczas tworzenia. Metoda ForNativeAd() konfiguruje obiekt AdLoader do obsługi reklam natywnych.

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

Rejestrowanie zdarzeń reklam AdLoadera

Aby otrzymywać powiadomienia o tym, czy reklama natywna została wczytana, czy nie, dodaj delegaty do klasy AdLoader w przypadku wymienionych poniżej zdarzeń.

OnNativeAdLoaded

Wywoływane po prawidłowym wczytaniu reklamy natywnej. Aby uzyskać dostęp do wczytanej reklamy, musisz mieć delegata tego zdarzenia.

OnAdFailedToLoad

Wywoływane, gdy nie uda się wczytać reklamy natywnej.

Wczytaj reklamę

Po utworzeniu obiektu AdLoader wywołaj jego metodę LoadAd(), aby wysłać prośbę o reklamę:

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

Przygotuj żądanie reklamy

Poniższy fragment kodu pokazuje, jak utworzyć obiekt AdLoader skonfigurowany do wysyłania żądań reklam natywnych, ustawić delegatów do obsługi udanych i nieudanych wczytań reklam oraz wysłać żądanie 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 nieudanych wczytań reklam

Zdarzenie OnAdFailedToLoad jest typu EventHandle<AdFailedToLoadEventArgs>. Poniżej pokazujemy, jak przeanalizować przyczynę niepowodzenia wczytania reklamy na podstawie tego zdarzenia.

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

Gdy reklama natywna zostanie wczytana, wywoływane jest zdarzenie reklamy dla odpowiedniego formatu reklamy. Aplikacja jest wtedy odpowiedzialna za wyświetlanie reklamy, ale nie musi tego robić od razu.

Obsługa wczytywania reklam

Zdarzenie OnNativeAdLoaded jest typu EventHandler<NativeAdEventArgs>. Reklamę, umieszczoną w obiekcie NativeAd, można pobrać z NativeAdEventArgs w ten sposób:

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

Pobieranie komponentów reklam natywnych

Po wczytaniu reklam można uzyskać dostęp do ich komponentów w sposób pokazany poniżej. Zasoby graficzne są zwracane jako obiekty Texture2D, a zasoby tekstowe 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 do komponentów reklamy należy uzyskiwać dostęp tylko w głównym wątku, np. z poziomu metody Update() skryptu Unity. Pamiętaj też, że te komponenty nie zawsze są dostępne i przed wyświetleniem należy je sprawdzić:

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

Komponent Informacja

Jest to wymagane, aby wyświetlać komponent reklamy Informacja w ramach reklamy natywnej. Ważne jest też, aby komponent reklamy Informacja był dobrze widoczny, dlatego należy odpowiednio dobrać kolory tła i obrazy.

Rejestrowanie obiektów GameObject w komponencie reklamy

Aby komponent reklamy wyświetlał się w aplikacji Unity, musisz zarejestrować GameObject. Jeśli rejestracja się powiedzie, metoda użyta do zarejestrowania GameObject zwróci wartość bool. W przypadku List<GameObject> metoda zwraca wartość int wskazującą liczbę zarejestrowanych GameObject.

Jeśli rejestracja komponentu reklamy się nie powiedzie, wyświetlenia i kliknięcia powiązanej reklamy natywnej nie będą rozpoznawane.

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

GameObject zarejestrowany w przypadku komponentu reklamy musi mieć komponent Convex Collider, który odzwierciedla rozmiar i kształt GameObject. Jeśli w GameObjectobiektach zarejestrowanych w komponentach do reklamCollider brakuje komponentów lub są one nieprawidłowo skonfigurowane, reklamy natywne nie będą działać prawidłowo.

W poniższym fragmencie kodu do elementu GameObject dodano element BoxCollider, który używa elementu TextMesh do wyświetlania komponentu reklamy w postaci nagłówka reklamy natywnej. Gdy BoxCollider zostanie dołączony do GameObject, automatycznie dostosuje się do tekstu 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>();

Prezentacja

Poniższy kod pokazuje, jak pobrać komponent ikony z poprawnie wczytanej reklamy natywnej, wyświetlić komponent reklamy z ikoną, ustawiając teksturę Quad, i zarejestrować GameObject, aby wyświetlać komponent. Ten proces pobierania komponentu reklamy i rejestrowania go w klasie reklamy natywnej należy powtórzyć w przypadku każdego komponentu wyświetlanego przez aplikację.

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;
}