Per iniziare

Questa guida spiega come utilizzare il componente aggiuntivo per gli annunci nativi per implementare gli annunci nativi in un'app Unity, oltre ad alcuni aspetti importanti da considerare durante la procedura.

Gli annunci nativi si adattano al formato e alle funzioni dell'esperienza utente in cui vengono posizionati. Inoltre la loro progettazione visiva emula quella dell'app in cui vengono collocati. Il formato degli annunci nativi di Ad Manager consente ai publisher di eseguire il rendering di annunci perfettamente integrati con i contenuti. Puoi utilizzare questa tecnologia per implementare rendering altamente personalizzati che sfruttano al meglio il codice nativo nelle app Unity.

Gli annunci nativi vengono mostrati utilizzando gli stessi tipi di GameObjects con cui stai già creando le tue app e possono essere formattati in modo da corrispondere al design visivo dell'esperienza utente in cui sono inseriti. Quando viene caricato un annuncio nativo, l'app riceve un oggetto nativo che contiene i relativi asset e l'app Unity, anziché l'SDK, li visualizza.

Prerequisiti

  • Plug-in Unity di Google Mobile Ads versione 7.0.0 o successive.
  • Completa la Guida introduttiva.
  • Scarica e installa il componente aggiuntivo per gli annunci nativi.

Carica i formati degli annunci nativi

Gli annunci nativi vengono caricati tramite la classe AdLoader, che ha la propria classe AdLoader.Builder per personalizzarla durante la creazione. Il metodo ForNativeAd() configura AdLoader per gestire gli annunci nativi.

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

Registrati agli eventi relativi agli annunci di AdLoader

Per ricevere una notifica quando un annuncio nativo viene caricato o meno, aggiungi i delegati alla classe AdLoader per gli eventi elencati di seguito.

OnNativeAdLoaded

Viene richiamato quando un annuncio nativo viene caricato correttamente. È necessario avere un delegato per questo evento per accedere all'annuncio caricato.

OnAdFailedToLoad

Richiamato quando il caricamento di un annuncio nativo non va a buon fine.

Carica l'annuncio

Una volta completata la creazione di un AdLoader, chiama il relativo metodo LoadAd() per richiedere un annuncio:

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

Crea la richiesta di annuncio

Lo snippet di codice riportato di seguito mostra come creare un AdLoader configurato per richiedere annunci nativi, impostare i delegati per i caricamenti degli annunci riusciti e non riusciti ed effettuare una richiesta di annuncio.

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

Gestisci i caricamenti degli annunci non riusciti

L'evento OnAdFailedToLoad è di tipo EventHandle<AdFailedToLoadEventArgs>. Di seguito è riportata l'analisi del motivo di un errore di caricamento degli annunci da questo evento.

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

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

Visualizza un annuncio nativo

Quando viene caricato un annuncio nativo, viene richiamato l'evento dell'annuncio per il formato dell'annuncio corrispondente. L'app è quindi responsabile della visualizzazione dell'annuncio, anche se non è obbligata a mostrarlo immediatamente.

Gestisci il caricamento degli annunci

L'evento OnNativeAdLoaded è di tipo EventHandler<NativeAdEventArgs>. L'annuncio, incapsulato in un oggetto NativeAd, può essere recuperato da NativeAdEventArgs come mostrato:

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

Recupera gli asset annuncio nativi

Una volta caricati gli annunci, è possibile accedere ai relativi asset come mostrato di seguito. Gli asset grafici vengono restituiti come oggetti Texture2D e gli asset di testo come oggetti 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;
}

Tieni presente che l'accesso agli asset annuncio deve avvenire solo sul thread principale, ad esempio dal metodo Update() di uno script Unity. Tieni inoltre presente che non è sempre garantita la presenza dei seguenti asset, che devono essere controllati prima di essere visualizzati:

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

Asset Scegli Tu!

È obbligatorio mostrare l'asset annuncio Scegli Tu! come parte dell'annuncio nativo. Inoltre, è importante che l'asset annuncio Scegli Tu! sia facilmente visibile, quindi scegli le immagini e i colori di sfondo in modo appropriato.

Registra i GameObject per l'asset annuncio

Devi registrare GameObject affinché l'asset annuncio venga visualizzato nella tua app Unity. Se la registrazione va a buon fine, il metodo utilizzato per registrare GameObject restituisce bool. Per un List<GameObject>, il metodo restituisce un int che indica il numero di GameObject registrati correttamente.

Se la registrazione di un asset annuncio non va a buon fine, le impressioni e i clic sull'annuncio nativo corrispondente non verranno riconosciuti.

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

Il GameObject registrato per un asset annuncio deve avere un componente Collider convesso che sia rappresentativo delle dimensioni e della forma del GameObject. Se gli oggetti GameObject registrati negli asset annuncio non contengono i componenti Collider o ne hanno uno configurato in modo errato, gli annunci nativi non funzioneranno correttamente.

Nello snippet di codice riportato di seguito, viene aggiunto un BoxCollider a GameObject che utilizza un TextMesh per visualizzare l'asset annuncio del titolo di un annuncio nativo. Una volta collegato BoxCollider a GameObject, verrà ridimensionato automaticamente per adattarsi al testo del 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>();

Demo

Il seguente codice mostra come recuperare l'asset icona di un annuncio nativo caricato correttamente, visualizzare l'asset annuncio icona impostando la texture di un Quad e registrare il GameObject da utilizzare per visualizzare l'asset. Questo processo di recupero dell'asset annuncio e di registrazione con la classe di annuncio nativo deve essere ripetuto per ogni asset visualizzato dall'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;
}