Ce guide vous explique comment utiliser le module complémentaire d'annonces natives pour implémenter des annonces natives AdMob dans une application Unity, ainsi que certains points importants à prendre en compte.
Les annonces natives s'intègrent parfaitement à l'interface dans laquelle elles sont diffusées. En effet, leur forme, fonctionnement et de la conception visuelle de l'application dans laquelle elles sont diffusées. Le format d'annonces natives d'AdMob permet aux éditeurs de diffuser des annonces bien intégrées au contenu. Grâce à cette technologie, vous pouvez obtenir un affichage hautement personnalisé, qui exploite pleinement le code natif dans les applications Unity.
Les annonces natives sont diffusées à l'aide des mêmes types de GameObjects
que ceux que vous utilisez déjà pour créer vos applications. Elles peuvent être mises en forme pour s'adapter à la conception visuelle de l'expérience utilisateur dans laquelle elles s'affichent. Lorsqu'une annonce native se charge, votre application reçoit un objet natif contenant ses éléments, et l'application Unity (plutôt que le SDK) les affiche.
Prérequis
- Plug-in Google Mobile Ads Unity 7.0.0 ou version ultérieure
- Suivez le guide de démarrage.
- Téléchargez et installez le module complémentaire Annonces natives.
Charger des formats d'annonces natives
Les annonces natives sont chargées via la classe AdLoader
, qui possède sa propre classe AdLoader.Builder
pour la personnaliser lors de la création. La méthode ForNativeAd()
configure AdLoader pour gérer les annonces natives.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Enregistrer des événements d'annonce AdLoader
Pour être averti lorsqu'une annonce native se charge ou ne se charge pas, ajoutez des délégués à la classe AdLoader
pour les événements listés ci-dessous.
OnNativeAdLoaded
Appelé lorsqu'une annonce native est chargée. Vous devez disposer d'un délégué pour cet événement afin d'accéder à l'annonce chargée.
OnAdFailedToLoad
Appelé lorsqu'une annonce native ne parvient pas à se charger.
Charger l'annonce
Une fois que vous avez terminé de créer un AdLoader
, appelez sa méthode LoadAd()
pour demander une annonce:
adLoader.LoadAd(new AdRequest.Builder().Build());
Assembler la demande d'annonce
L'extrait de code ci-dessous montre comment créer un AdLoader
configuré pour demander des annonces natives, définir des délégués pour les chargements d'annonces réussis et échoués, et effectuer une requête d'annonce.
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());
}
Gérer les échecs de chargement des annonces
L'événement OnAdFailedToLoad
est de type EventHandle<AdFailedToLoadEventArgs>
.
L'analyse du motif d'échec de chargement d'une annonce à partir de cet événement est présentée ci-dessous.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Afficher une annonce native
Lorsqu'une annonce native est chargée, l'événement d'annonce du format d'annonce correspondant est appelé. Votre application est ensuite chargée d'afficher l'annonce, mais elle n'est pas nécessairement tenue de le faire immédiatement.
Gérer le volume d'annonces
L'événement OnNativeAdLoaded
est de type EventHandler<NativeAdEventArgs>
. L'annonce, encapsulée dans un objet NativeAd
, peut être récupérée à partir de NativeAdEventArgs
, comme illustré:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Récupérer des composants d'annonces natives
Une fois les annonces chargées, vous pouvez accéder à leurs composants, comme indiqué ci-dessous. Les éléments graphiques sont renvoyés sous la forme d'objets Texture2D
, et les éléments textuels sous la forme d'objets 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;
}
Notez que les composants d'annonce ne doivent être accessibles que sur le thread principal, par exemple, à partir de la méthode Update()
d'un script Unity. Notez également que les composants suivants ne sont pas toujours présents et doivent être vérifiés avant d'être affichés:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Composant AdChoices
Vous devez afficher l'asset d'annonce AdChoices dans l'annonce native. Il est également important que l'asset d'annonce AdChoices soit facilement visible. Choisissez donc des couleurs et des images d'arrière-plan appropriées.
Enregistrer des GameObjects pour un composant d'annonce
Vous devez enregistrer le GameObject
pour que le composant d'annonce s'affiche dans votre application Unity. Si l'enregistrement aboutit, la méthode utilisée pour enregistrer le GameObject
renvoie un bool
. Pour un List<GameObject>
, la méthode renvoie un int
indiquant le nombre de GameObject
enregistrés.
Si l'enregistrement d'un composant publicitaire échoue, les impressions et les clics sur l'annonce native correspondante ne seront pas reconnus.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
Le GameObject
enregistré pour un composant d'annonce doit comporter un composant Collider convexe représentant la taille et la forme du GameObject
. Si des composants Collider
sont manquants ou mal configurés dans les objets GameObject
enregistrés dans des composants d'annonces, les annonces natives ne fonctionneront pas correctement.
Dans l'extrait de code ci-dessous, un BoxCollider
est ajouté à GameObject
, qui utilise un TextMesh
pour afficher le composant d'annonce principal d'une annonce native. Une fois le BoxCollider
associé au GameObject
, il s'adapte automatiquement pour accueillir le texte du composant 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>();
Démo
Le code suivant montre comment récupérer l'asset d'icône d'une annonce native correctement chargée, afficher l'asset d'annonce d'icône en définissant la texture d'un Quad
et enregistrer le GameObject
à utiliser pour afficher l'asset. Ce processus de récupération du composant d'annonce et de son enregistrement auprès de la classe d'annonce native doit être répété pour chacun des composants que l'application affiche.
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;
}