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ą. Są też dopasowane do wyglądu aplikacji, w której się znajdują. 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 (zamiast pakietu SDK) wyświetli je.

Wymagania wstępne

Wczytywanie formatów reklam natywnych

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę AdLoader.Builder do dostosowywania 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ć żądanie reklamy:

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

Przygotowywanie żądania 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 był wyświetlany 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 int wskazujący 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 prawidłowo wczytanej reklamy natywnej, wyświetlić komponent reklamy z ikoną, ustawiając teksturę elementu Quad, i zarejestrować element GameObject, który będzie używany do wyświetlania komponentu. 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;
}