Rozpocznij

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Z tego przewodnika dowiesz się, jak użyć dodatku reklam natywnych do implementacji reklam natywnych AdMob w aplikacji Unity oraz kilku ważnych kwestii, które warto wziąć pod uwagę.

Reklamy natywne pasują zarówno do stylu, jak i funkcji materiałów, wśród których są umieszczane. Są też dopasowane do wyglądu aplikacji, w której się znajdują. Format reklam natywnych AdMob umożliwia wydawcom renderowanie reklam bez zakłóceń w treści. Możesz użyć tej technologii do wdrożenia niestandardowych renderowania, które w pełni wykorzystują kod natywny w aplikacjach Unity.

Reklamy natywne są wyświetlane w tych samych typach GameObjects, w których tworzysz już aplikacje, i można je sformatować, aby pasowały do wyglądu i stylu ich witryny. Gdy reklama natywna się załaduje, Twoja aplikacja otrzyma obiekt natywny zawierający swoje zasoby, a aplikacja wyświetli się w aplikacji Unity (a nie w pakiecie SDK).

Wymagania wstępne

Wczytywanie formatów reklam natywnych

Reklamy natywne są wczytywane przez klasę AdLoader, która ma własną klasę AdLoader.Builder, aby dostosować ją podczas tworzenia. Metoda ForNativeAd() konfiguruje AdLoader pod kątem 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, gdy reklama natywna zostanie wczytana, lub jej nie uda się dodać, dodaj do klasy AdLoader delegacje dla zdarzeń wymienionych poniżej.

OnNativeAdLoaded

Wywoływane po załadowaniu reklamy natywnej. Aby uzyskać dostęp do wczytanej reklamy, musisz przekazać odpowiednie zdarzenie.

Nieudane wczytanie reklamy

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

Załaduj reklamę

Po zakończeniu tworzenia tagu AdLoader wywołaj jego metodę LoadAd(), by poprosić o reklamę:

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

Łączenie żądania reklamy

Fragment kodu poniżej pokazuje, jak utworzyć żądanie AdLoader skonfigurowane pod kątem wysyłania reklam natywnych, przekazywania dostępu do skutecznych 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());
}

Radzenie sobie z nieprawidłowymi wczytaniami reklam

Zdarzenie OnAdFailedToLoad jest typu EventHandle<AdFailedToLoadEventArgs>. Przyczyna niepowodzenia wczytania reklamy z tego zdarzenia jest przedstawiona poniżej.

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 załadowaniu reklamy natywnej wywoływane jest zdarzenie reklamy dla odpowiedniego formatu reklamy. Następnie aplikacja odpowiada za wyświetlanie reklamy, chociaż nie jest to konieczne od razu.

Zarządzanie reklamami

Zdarzenie OnNativeAdLoaded jest typu EventHandler<NativeAdEventArgs>. Reklama otoczona obiektem NativeAd może zostać pobrana z tagu NativeAdEventArgs, jak pokazano:

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 można uzyskać dostęp do ich zasobów, 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 reklamy należy uzyskiwać tylko w głównym wątku, np. za pomocą metody Update() skryptu Unity. Pamiętaj też, że niektóre zasoby nie zawsze są obecne i powinny być wyświetlane przed wyświetleniem:

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

Zasób Informacja

Jest on wymagany do wyświetlania zasobu reklamy Informacja jako części reklamy natywnej. Należy również pamiętać, że zasób reklamy Informacja musi być dobrze widoczny, dlatego wybierz odpowiednie kolory tła i obrazy.

Rejestrowanie obiektów GameObject dla zasobu reklamy

Aby wyświetlać zasób reklamy w aplikacji Unity, musisz zarejestrować właściwość GameObject. Jeśli rejestracja się powiedzie, metoda użyta do rejestracji typu GameObject zwróci wartość bool. W przypadku List<GameObject> metoda zwraca int z informacją o liczbie zarejestrowanych GameObject.

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

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

Element GameObject rejestrowany dla zasobu reklamy musi mieć zaokrąglony kolektor, który odpowiada rozmiarowi i kształcie 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.

W poniższym fragmencie kodu do elementu GameObject jest dodawany element BoxCollider, który korzysta z TextMesh do wyświetlania zasobu reklamy w nagłówku reklamy natywnej. Gdy właściwość BoxCollider jest dołączona do elementu GameObject, będzie ona automatycznie skalowana w celu dopasowania 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>();

Demo

Poniższy kod pokazuje, jak pobrać zasób ikony, która została wczytana reklama natywna, wyświetlając zasób reklamy ikony po ustawieniu tekstury Quad i rejestrując GameObject na potrzeby wyświetlania zasobu. Proces pobierania zasobu 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;
}