Começar

Este guia mostra como usar o complemento de anúncios nativos para implementar anúncios nativos em um app Unity, além de algumas considerações importantes ao longo do processo.

Os anúncios nativos se adaptam à forma e à função da experiência do usuário em que são inseridos. Eles também combinam com o design visual do aplicativo de que fazem parte. Com o formato de anúncio nativo do Ad Manager, os publishers podem renderizar anúncios que combinam com o conteúdo. Você pode usar essa tecnologia para implementar renderizações altamente personalizadas que aproveitam ao máximo o código nativo em apps Unity.

Os anúncios nativos são mostrados usando os mesmos tipos de GameObjects que você já usa para criar seus apps. Além disso, eles podem ser formatados para combinar com o design visual da experiência do usuário. Quando um anúncio nativo é carregado, seu app recebe um objeto nativo que contém os recursos dele. O aplicativo Unity, e não o SDK, mostra esses recursos.

Pré-requisitos

  • Plug-in dos Anúncios para Dispositivos Móveis do Google para Unity versão 7.0.0 ou mais recente.
  • Leia o guia para iniciantes.
  • Faça o download e instale o complemento de anúncios nativos.

Carregar formatos de anúncios nativos

Os anúncios nativos são carregados pela classe AdLoader, que tem a própria AdLoader.Builder classe para personalização durante a criação. O método ForNativeAd() configura o AdLoader para processar anúncios nativos.

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

Registrar eventos de anúncio do AdLoader

Para receber uma notificação quando um anúncio nativo é carregado ou não, adicione delegados à classe AdLoader para os eventos listados abaixo.

OnNativeAdLoaded

Invocado quando um anúncio nativo é carregado. É necessário ter um delegado para esse evento para acessar o anúncio carregado.

OnAdFailedToLoad

Invocado quando um anúncio nativo não é carregado.

Carregar o anúncio

Depois de terminar de criar um AdLoader, chame o método LoadAd() para solicitar um anúncio:

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

Montar a solicitação de anúncio

O snippet de código abaixo demonstra como criar um AdLoader configurado para solicitar anúncios nativos, define delegados para carregamentos de anúncios bem-sucedidos e com falha e faz uma solicitação de anúncio.

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());
}

Processar carregamentos de anúncios com falha

O evento OnAdFailedToLoad é do tipo EventHandle<AdFailedToLoadEventArgs>. A análise do motivo de uma falha no carregamento de anúncios desse evento é mostrada abaixo.

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    Debug.Log("Native ad failed to load: " + args.Message);
}

Mostrar um anúncio nativo

Quando um anúncio nativo é carregado, o evento de anúncio do formato de anúncio correspondente é invocado. Seu app é responsável por mostrar o anúncio, mas não precisa fazer isso imediatamente.

Processar o carregamento de anúncios

O evento OnNativeAdLoaded é do tipo EventHandler<NativeAdEventArgs>. O anúncio, encapsulado em um objeto NativeAd, pode ser recuperado de NativeAdEventArgs, conforme mostrado abaixo:

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

Recuperar recursos de anúncios nativos

Depois que os anúncios são carregados, os recursos podem ser acessados conforme mostrado abaixo. Os recursos gráficos são retornados como objetos Texture2D, e os recursos de texto são retornados como objetos 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;
}

Os recursos de anúncios só podem ser acessados na linha de execução principal, por exemplo, no método Update() de um script Unity. Além disso, os recursos a seguir nem sempre estão presentes e precisam ser verificados antes de serem mostrados:

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

Recurso Opções de Anúncios

É necessário mostrar o recurso de anúncio Opções de Anúncios como parte do anúncio nativo. Além disso, é importante que o recurso de anúncio Opções de Anúncios seja facilmente visível. Portanto, escolha cores e imagens de plano de fundo adequadas.

Registrar GameObjects para recursos de anúncios

Você precisa registrar o GameObject para que o recurso de anúncio seja mostrado no seu app Unity. Se o registro for bem-sucedido, o método usado para registrar o GameObject retornará um bool. Para um List<GameObject>, o método retorna um int que indica a contagem de GameObject registrados.

Se o registro de um recurso de anúncio não for bem-sucedido, as impressões e os cliques no anúncio nativo correspondente não serão reconhecidos.

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

O GameObject registrado para um recurso de anúncio precisa ter um componente Collider convexo que represente o tamanho e a forma do GameObject. Se os objetos GameObject registrados nos recursos de anúncios estiverem faltando componentes Collider ou tiverem um configurado incorretamente, os anúncios nativos não funcionarão corretamente.

No snippet de código abaixo, um BoxCollider é adicionado ao GameObject que usa um TextMesh para mostrar o recurso de anúncio de título de um anúncio nativo. Depois que o BoxCollider é anexado ao GameObject, ele é dimensionado automaticamente para acomodar o texto do componente 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>();

Demonstração

O código a seguir demonstra como recuperar o recurso de ícone de um anúncio nativo carregado, mostrar o recurso de anúncio de ícone definindo a textura de um Quad e registrar o GameObject a ser usado para mostrar o recurso. Esse processo de recuperação do recurso de anúncio e registro na classe de anúncio nativo precisa ser repetido para cada um dos recursos mostrados pelo app.

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