In diesem Leitfaden erfahren Sie, wie Sie mit dem Add-on für native Anzeigen native Anzeigen in einer Unity-App implementieren. Außerdem finden Sie einige wichtige Punkte, die Sie in diesem Zusammenhang berücksichtigen sollten.
Form und Funktion von nativen Anzeigen entsprechen dem Kontext, in dem sie eingebettet sind. Sie passen sich auch dem visuellen Design der App an, in der sie sich befinden. Mit dem nativen Anzeigenformat von Ad Manager können Publisher Anzeigen nahtlos in den Inhalt einfügen. Mit dieser Technologie lassen sich hochgradig benutzerdefinierte Renderings implementieren, die den nativen Code in Unity-Apps optimal nutzen.
Native Anzeigen werden mit denselben GameObjects
-Typen ausgeliefert, mit denen Sie bereits Ihre Apps erstellen. Sie können so formatiert werden, dass sie dem visuellen Design der Umgebung entsprechen, in der sie eingebettet sind. Beim Laden einer nativen Anzeige erhält Ihre App ein natives Objekt, das die zugehörigen Assets enthält. Diese werden dann von der Unity-App und nicht vom SDK angezeigt.
Voraussetzungen
- Google Mobile Ads Unity-Plug-in, Version 7.0.0 oder höher
- Arbeiten Sie den Startleitfaden durch.
- Laden Sie das Add-on für native Anzeigen herunter und installieren Sie es.
Native Anzeigenformate laden
Native Anzeigen werden über die Klasse AdLoader
geladen, die eine eigene Klasse AdLoader.Builder
hat, um sie beim Erstellen anzupassen. Mit der Methode ForNativeAd()
wird AdLoader für die Verarbeitung nativer Anzeigen konfiguriert.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Für AdLoader-Anzeigenereignisse registrieren
Wenn Sie benachrichtigt werden möchten, wenn eine native Anzeige erfolgreich geladen wird oder nicht geladen wird, fügen Sie der Klasse AdLoader
für die unten aufgeführten Ereignisse Bevollmächtigte hinzu.
OnNativeAdLoaded
Wird aufgerufen, wenn eine native Anzeige geladen wurde. Für dieses Ereignis ist ein Bevollmächtigter erforderlich, um auf die geladene Anzeige zugreifen zu können.
OnAdFailedToLoad
Wird aufgerufen, wenn eine native Anzeige nicht geladen werden kann.
Anzeige laden
Wenn Sie mit der Erstellung einer AdLoader
fertig sind, rufen Sie die zugehörige LoadAd()
-Methode auf, um eine Anzeige anzufordern:
adLoader.LoadAd(new AdRequest.Builder().Build());
Anzeigenanfrage zusammenstellen
Das folgende Code-Snippet zeigt, wie Sie ein AdLoader
erstellen, das für die Anfrage nativer Anzeigen konfiguriert ist, Bevollmächtigte für erfolgreiche und fehlgeschlagene Anzeigenladevorgänge festlegt und eine Anzeigenanfrage stellt.
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());
}
Fehlgeschlagene Anzeigenladevorgänge verarbeiten
Das OnAdFailedToLoad
-Ereignis ist vom Typ EventHandle<AdFailedToLoadEventArgs>
.
Die Ursache für den Fehler beim Laden von Anzeigen bei diesem Ereignis wird unten dargestellt.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Native Anzeige präsentieren
Beim Laden einer nativen Anzeige wird das Anzeigenereignis für das entsprechende Anzeigenformat aufgerufen. Ihre App ist dann für die Auslieferung der Anzeige zuständig. Dies muss jedoch nicht sofort geschehen.
Anzeigenlast verarbeiten
Das OnNativeAdLoaded
-Ereignis ist vom Typ EventHandler<NativeAdEventArgs>
. Die Anzeige, die in ein NativeAd
-Objekt eingekapselt ist, kann wie hier gezeigt aus NativeAdEventArgs
abgerufen werden:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Native Anzeigen-Assets abrufen
Sobald die Anzeigen geladen sind, können Sie wie unten gezeigt auf ihre Assets zugreifen. Grafische Assets werden als Texture2D
-Objekte und Text-Assets als string
-Objekte zurückgegeben.
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;
}
Auf Anzeigen-Assets sollte nur im Hauptthread zugegriffen werden, z. B. über die Methode Update()
eines Unity-Skripts. Die folgenden Assets sind nicht immer vorhanden. Sie sollten sie überprüfen, bevor sie angezeigt werden:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Datenschutzinfo-Asset
Das Datenschutzinfo-Anzeigen-Asset muss als Teil der nativen Anzeige präsentiert werden. Außerdem muss das AdChoices-Anzeigen-Asset gut zu sehen sein. Wählen Sie daher passende Hintergrundfarben und Bilder aus.
GameObjects für Anzeigen-Asset registrieren
Sie müssen das GameObject
registrieren, damit das Anzeigen-Asset in der Unity-App erscheint. Wenn die Registrierung erfolgreich ist, gibt die Methode zum Registrieren von GameObject
einen bool
zurück. Für einen List<GameObject>
gibt die Methode einen int
zurück, der die erfolgreich registrierte GameObject
-Anzahl angibt.
Wenn die Registrierung eines Anzeigen-Assets fehlschlägt, werden Impressionen und Klicks auf die entsprechende native Anzeige nicht erkannt.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
Die GameObject
, die für ein Anzeigen-Asset registriert ist, muss eine konvexe Collider-Komponente haben, die für die Größe und Form der GameObject
repräsentativ ist. Wenn bei GameObject
Objekten, die für Anzeigen-Assets registriert sind, Collider
-Komponenten fehlen oder eine falsch konfigurierte Komponente haben, funktionieren native Anzeigen nicht richtig.
Im folgenden Code-Snippet wird GameObject
ein BoxCollider
hinzugefügt, das ein TextMesh
verwendet, um das Anzeigentitel-Asset einer nativen Anzeige darzustellen. Sobald die BoxCollider
an die GameObject
angehängt wurde, wird sie automatisch an den Text der TextMesh
-Komponente angepasst.
// 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
Mit dem folgenden Code wird veranschaulicht, wie Sie das Symbol-Asset einer erfolgreich geladenen nativen Anzeige abrufen, das Symbolanzeigen-Asset präsentieren, indem Sie die Textur eines Quad
festlegen, und das GameObject
registrieren, das zur Darstellung des Assets verwendet werden soll. Dieser Vorgang, bei dem das Anzeigen-Asset abgerufen und für die Klasse nativer Anzeigen registriert wird, sollte für jedes Asset der App wiederholt werden.
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;
}