Rozpocznij

Z tego przewodnika dowiesz się, jak korzystać z dodatku do reklam natywnych, aby zaimplementować reklamy natywne AdMob w aplikacji w Unity, i poznać kilka ważnych kwestii.

Reklamy natywne pasują zarówno do postaci, jak i funkcji materiałów, wśród których są umieszczane. Pasują też do projektu wizualnego aplikacji, w której są umieszczone. Format reklam natywnych AdMob umożliwia wydawcom renderowanie reklam, które pasują do treści. Możesz użyć tej technologii do wdrożenia niestandardowych wizualizacji, które w pełni wykorzystują natywny kod natywny w aplikacjach Unity.

Reklamy natywne wyświetlają się przy użyciu tych samych typów znaczników GameObjects, za pomocą których tworzysz aplikacje. Można je sformatować tak, by pasowały do wizualnego wyglądu interfejsu, w którym się wyświetlają. Po wczytaniu reklamy natywnej aplikacja otrzymuje obiekt natywny zawierający zasoby i wyświetla je w aplikacji Unity (a nie SDK).

Wymagania wstępne

Wczytaj formaty reklam natywnych

Reklamy natywne są wczytywane za pomocą klasy AdLoader, która ma własną klasę AdLoader.Builder, która może je dostosować 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();
}

Zarejestruj się na potrzeby zdarzeń reklamowych AdLoader

Aby otrzymywać powiadomienia, gdy reklama natywna się wczyta lub nie uda się jej załadować, dodaj przedstawicieli do klasy AdLoader w przypadku zdarzeń wymienionych poniżej.

OnNativeAdLoaded

Wywoływana po wczytaniu reklamy natywnej. Dostęp do wczytanej reklamy wymaga dostępu do tego zdarzenia.

OnAdFailedToLoad

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

Wczytaj reklamę

Gdy skończysz tworzenie elementu AdLoader, wywołaj jego metodę LoadAd(), aby wysłać żądanie reklamy:

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

Łączenie żądania reklamy w całości

Fragment kodu poniżej pokazuje, jak utworzyć obiekt AdLoader skonfigurowany do wysyłania żądań reklam natywnych, przekazywać przedstawicieli dotyczących udanego i nieudanego ładowania reklam oraz wysył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 wczytywania reklam

Zdarzenie OnAdFailedToLoad jest typu EventHandle<AdFailedToLoadEventArgs>. Poniżej znajduje się analiza przyczyny niepowodzenia wczytywania reklamy z 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

Podczas wczytywania reklamy natywnej wywoływane jest zdarzenie reklamy dla odpowiedniego formatu. To aplikacja odpowiada za wyświetlenie reklamy, choć nie musi to robić tego od razu.

Obsługa reklam na stronie

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

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

Pobieranie zasobów reklam natywnych

Po załadowaniu reklam ich zasoby będą dostępne, jak pokazano 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 dostęp do zasobów reklamowych należy uzyskiwać tylko w wątku głównym, np. za pomocą metody Update() skryptu Unity. Pamiętaj też, że nie zawsze możemy zagwarantować dostępność tych zasobów i należy je sprawdzić przed wyświetleniem:

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

Komponent Informacja

Komponent reklamy Informacja musi wyświetlać się w ramach reklamy natywnej. Ważne jest też, aby komponent reklamy Informacja był łatwo widoczny, dlatego dobieraj odpowiednie kolory tła i obrazy.

Rejestrowanie obiektów GameObject w zasobie reklamy

Musisz zarejestrować element GameObject, aby komponent reklamy wyświetlał się w aplikacji Unity. Jeśli rejestracja się powiedzie, metoda rejestracji GameObject zwróci wartość bool. W przypadku List<GameObject> metoda zwraca int, co wskazuje, że liczba zdarzeń GameObject została zarejestrowana.

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

Zarejestrowany dla zasobu reklamy obiekt GameObject musi zawierać komponent Zderzacz wypukły, który reprezentuje rozmiar i kształt elementu GameObject. Jeśli obiekty GameObject zarejestrowane w komponentach reklamy nie mają komponentu Collider lub są nieprawidłowo skonfigurowane, reklamy natywne nie będą działać prawidłowo.

We fragmencie kodu poniżej do elementu GameObject dodano element BoxCollider, który używa TextMesh do wyświetlania komponentu reklamy z nagłówkiem reklamy natywnej. Gdy BoxCollider zostanie dołączony do GameObject, będzie automatycznie skalowany odpowiednio 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>();

Pokaz

Ten kod pokazuje, jak pobrać komponent ikony reklamy natywnej, wyświetlić komponent reklamy, ustawiając teksturę Quad, i zarejestrować element GameObject, który ma być używany do wyświetlenia zasobu. Proces pobierania komponentu reklamy i rejestrowania go w klasie reklamy natywnej należy powtórzyć w przypadku 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;
}