Rozpocznij

Z tego przewodnika dowiesz się, jak korzystać z dodatku do reklam natywnych, by wdrożyć reklamy natywne AdMob w aplikacji na Unity, a także o istotnych kwestiach, które warto wziąć pod uwagę przy okazji.

Reklamy natywne odpowiadają zarówno formie, jak i funkcjom miejsca, w którym się wyświetlają. Pasują również do projektu wizualnego aplikacji, w której znajdują się aplikacje. Format reklam natywnych AdMob umożliwia wydawcom renderowanie reklam, które dobrze pasują do treści. Możesz wykorzystać tę technologię do wdrażania niestandardowych renderowania w pełni wykorzystujący możliwości natywnego kodu w aplikacjach na Unity.

Reklamy natywne są wyświetlane przy użyciu tego samego typu komponentu GameObjects, za pomocą którego tworzysz już aplikacje. Możesz je sformatować, aby pasował do wyglądu otoczenia. Po wczytaniu reklamy natywnej aplikacja otrzymuje obiekt natywny zawierający jej zasoby i wyświetla je aplikacja Unity (a nie pakiet SDK).

Wymagania wstępne

Wczytaj formaty reklam natywnych

Reklamy natywne są wczytywane przez klasę AdLoader, która ma własną klasę AdLoader.Builder, która dostosowuje ją podczas tworzenia. Metoda ForNativeAd() konfiguruje komponent 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, gdy reklama natywna się załaduje lub nie uda się jej wczytać, dodaj do klasy AdLoader przedstawicieli do obsługi wymienionych poniżej zdarzeń.

OnNativeAdLoaded

Wywoływana po pomyślnym wczytaniu reklamy natywnej. Aby uzyskać dostęp do wczytanej reklamy, musisz mieć przedstawiciela tego zdarzenia.

OnAdFailedToLoad

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

Wczytaj reklamę

Po utworzeniu obiektu AdLoader wywołaj jego metodę LoadAd(), by zażądać reklamy:

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

Składanie żądania reklamy w jedną całość

Fragment kodu poniżej pokazuje, jak utworzyć obiekt AdLoader skonfigurowany do wysyłania żądań reklam natywnych, przedstawicieli do udanych i nieudanych operacji wczytywania reklam oraz wysyłania żądania 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 znajdziesz analizę 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świetl reklamę natywną

Po wczytaniu reklamy natywnej wywoływane jest zdarzenie związane z odpowiednim formatem reklamy. To Twoja aplikacja odpowiada za wyświetlanie reklamy, chociaż nie musi to robić od razu.

Obsługa wczytywania reklam

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

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

Pobieranie zasobów reklamy natywnej

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 wątku głównym, np. za pomocą metody Update() w skrypcie Unity. Pamiętaj też, że nie zawsze trzeba sprawdzić te komponenty i je sprawdzić, zanim się wyświetlą:

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

Komponent Informacja

Wyświetlanie komponentu Informacja musi się wyświetlać w reklamie natywnej. Zadbaj też, aby komponent reklamy Informacja był dobrze widoczny, dlatego zadbaj o odpowiednie dobór kolorów tła i obrazów.

Zarejestruj obiekty GameObject na potrzeby zasobu reklamy

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

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

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

Element GameObject zarejestrowany dla komponentu reklamy musi mieć komponent wypukły zderzacz, który pasuje do rozmiaru i kształtu: GameObject. Jeśli obiekty zarejestrowane w komponencie reklamy (GameObject) nie mają komponentów (Collider) lub mają nieprawidłowo skonfigurowany taki obiekt, 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 w nagłówku reklamy natywnej. Gdy do elementu GameObject dołączysz element BoxCollider, będzie on automatycznie skalowany tak, aby dostosować 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>();

Wersja demonstracyjna

Poniższy kod pokazuje, jak pobrać komponent ikony w załadowanej reklamie natywnej, wyświetlić komponent reklamy z ikoną, ustawiając teksturę Quad, i zarejestrować komponent GameObject, który ma być używany do wyświetlania komponentu. 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;
}