Rozpocznij

Z tego przewodnika dowiesz się, jak używać dodatku do reklam natywnych, aby zaimplementować reklamy natywne AdMob w aplikacji Unity, oraz poznasz ważne kwestie, które należy wziąć pod uwagę.

Reklamy natywne pasują do formy i funkcji interfejsu użytkownika, w którym są umieszczane. Pasują też do wyglądu aplikacji, w której się znajdują. Format reklamy natywnej AdMob umożliwia wydawcom renderowanie reklam, które nie wyróżniają się z 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 typów GameObjects, których używasz do tworzenia aplikacji, i można je formatować tak, aby pasowały do wyglądu interfejsu użytkownika, w którym się znajdują. Gdy reklama natywna się wczyta, Twoja aplikacja otrzyma obiekt natywny zawierający jej komponenty, a aplikacja Unity (a nie SDK) je wyświetli.

Wymagania wstępne

Wczytywanie formatów reklam natywnych

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę AdLoader.Builder umożliwiającą dostosowanie jej podczas tworzenia. Metoda ForNativeAd() konfiguruje AdLoader do obsługi reklam natywnych.

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

Rejestrowanie zdarzeń reklamowych AdLoader

Aby otrzymywać powiadomienia o tym, że reklama natywna została wczytana lub nie udało się jej wczytać, dodaj delegaty do klasy AdLoader dla zdarzeń wymienionych poniżej.

OnNativeAdLoaded

Wywoływane, gdy reklama natywna zostanie wczytana. Aby uzyskać dostęp do wczytanej reklamy, musisz mieć delegata dla tego zdarzenia.

OnAdFailedToLoad

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

Wczytywanie reklamy

Gdy skończysz tworzyć AdLoader, wywołaj jego metodę LoadAd(), aby poprosić o reklamę:

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

Tworzenie żądania reklamy

Poniższy fragment kodu pokazuje, jak utworzyć AdLoader skonfigurowany do żądania reklam natywnych, ustawić delegaty dla 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 się wczyta, wywoływane jest zdarzenie reklamy dla odpowiedniego formatu reklamy. Twoja aplikacja jest wtedy odpowiedzialna za wyświetlenie reklamy, ale nie musi tego robić od razu.

Obsługa liczby reklam na stronie

Zdarzenie OnNativeAdLoaded jest typu EventHandler<NativeAdEventArgs>. Reklamę, która jest zamknięta w obiekcie NativeAd, można pobrać z NativeAdEventArgs w sposób pokazany poniżej:

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

Pobieranie komponentów reklamy natywnej

Gdy reklamy się wczytają, można uzyskać dostęp do ich komponentów w sposób pokazany poniżej. Komponenty graficzne są zwracane jako obiekty Texture2D, a komponenty 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 dostęp do komponentów reklamy powinien być możliwy tylko w wątku głównym, np. z metody Update() skryptu Unity. Pamiętaj też, że nie zawsze można mieć pewność, że te zasoby będą dostępne, dlatego przed ich wyświetleniem należy to sprawdzić:

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

Komponent Informacja

Wyświetlanie komponentu reklamy Informacja jako części reklamy natywnej jest wymagane. Ważne jest też, aby komponent Informacja był dobrze widoczny, dlatego odpowiednio dobierz kolory tła i obrazy.

Rejestrowanie obiektów GameObject dla komponentu reklamy

Aby komponent reklamy był wyświetlany w aplikacji Unity, musisz zarejestrować dla niego 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ę pomyślnie zarejestrowanych GameObject.

Jeśli rejestracja komponentu 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 komponentu reklamy musi mieć wypukły komponent Collider, który odpowiada rozmiarowi i kształtowi GameObject. Jeśli obiekty GameObject zarejestrowane dla komponentów reklamy nie mają komponentów Collider lub mają nieprawidłowo skonfigurowany komponent, reklamy natywne nie będą działać prawidłowo.

W poniższym fragmencie kodu do GameObject dodawany jest BoxCollider, który używa TextMesh do wyświetlania komponentu 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 pomyślnie wczytanej reklamy natywnej, wyświetlić komponent ikony reklamy, ustawiając teksturę Quad, i zarejestrować GameObject, który ma być używany do wyświetlania komponentu. Ten proces pobierania komponentu reklamy i rejestrowania go w klasie reklamy natywnej należy powtórzyć dla 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;
}