Questa guida mostra come utilizzare il componente aggiuntivo per gli annunci nativi per implementare gli annunci nativi AdMob in un'app Unity, nonché alcune cose importanti da considerare durante l'implementazione.
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 AdMob 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
già crei le tue app e possono essere formattati in modo da corrispondere al design visivo
dell'esperienza utente in cui vengono visualizzati. Quando viene caricato un annuncio nativo, la tua app
riceve un oggetto nativo che contiene i relativi asset e l'app Unity (anziché
l'SDK) li visualizza.
Prerequisiti
- Plugin Google Mobile Ads Unity versione 7.0.0 o successive.
- Completa la Guida introduttiva.
- Scarica e installa il componente aggiuntivo per gli annunci nativi.
Caricare formati degli annunci nativi
Gli annunci nativi vengono caricati tramite la classe AdLoader
, che ha una propria classe AdLoader.Builder
per personalizzarli durante la creazione. Il metodo ForNativeAd()
configura AdLoader per la gestione degli annunci nativi.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Registrarsi agli eventi pubblicitari di AdLoader
Per ricevere una notifica quando un annuncio nativo viene caricato correttamente o non viene caricato, aggiungi
delegati alla classe AdLoader
per gli eventi elencati di seguito.
OnNativeAdLoaded
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 riesce.
Caricare l'annuncio
Una volta terminata la creazione di un AdLoader
, chiama il relativo metodo LoadAd()
per
richiedere un annuncio:
adLoader.LoadAd(new AdRequest.Builder().Build());
Assemblare la richiesta di annuncio
Il seguente snippet di codice mostra come creare un AdLoader
configurato per richiedere annunci nativi, imposta i delegati per i caricamenti di annunci riusciti e non riusciti ed effettua 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());
}
Gestire i caricamenti degli annunci non riusciti
L'evento OnAdFailedToLoad
è di tipo EventHandle<AdFailedToLoadEventArgs>
.
L'analisi del motivo di un errore di caricamento dell'annuncio da questo evento è mostrata di seguito.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Visualizzare un annuncio nativo
Quando viene caricato un annuncio nativo, viene richiamato l'evento annuncio per il formato dell'annuncio corrispondente. L'app è quindi responsabile della visualizzazione dell'annuncio, anche se non deve necessariamente farlo immediatamente.
Gestire 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 di seguito:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Recuperare gli asset annuncio nativo
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 vengono restituiti 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 è necessario accedere agli asset annuncio solo nel thread principale, ad esempio
dal metodo Update()
di uno script Unity. Tieni inoltre presente che i seguenti asset non sono sempre garantiti e devono essere controllati prima di essere visualizzati:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Asset Scegli Tu!
È un requisito per visualizzare 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.
Registrare GameObject per l'asset annuncio
Devi registrare il GameObject
affinché l'asset annuncio venga visualizzato nella tua
app Unity. Se la registrazione va a buon fine, il metodo utilizzato per registrare il
GameObject
restituisce un bool
. Per un List<GameObject>
, il metodo restituisce un
int
che indica il conteggio GameObject
registrato correttamente.
Se la registrazione di un asset dell'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.
}
L'GameObject
registrato per un asset dell'annuncio deve avere un componente Collider convesso
che rappresenti le dimensioni e la forma dell'GameObject
. Se
gli oggetti GameObject
registrati negli asset pubblicitari non hanno i componenti Collider
o ne hanno uno configurato in modo errato, gli annunci nativi non funzioneranno correttamente.
Nello snippet di codice riportato di seguito, a GameObject
viene aggiunto un BoxCollider
che utilizza un
TextMesh
per visualizzare l'asset dell'annuncio del titolo di un annuncio nativo. Una volta che
BoxCollider
è collegato a GameObject
, viene scalato 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 GameObject
da utilizzare per visualizzare l'asset. Questo processo di
recupero dell'asset annuncio e registrazione con la classe di annuncio nativo deve essere
ripetuto per ciascuno degli asset visualizzati 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;
}