In diesem Leitfaden erfahren Sie, wie Sie mit dem Add-on für native Anzeigen native AdMob-Anzeigen in einer Unity-App implementieren. Außerdem werden einige wichtige Aspekte erläutert, die Sie dabei beachten sollten.
Form und Funktion von nativen Anzeigen entsprechen dem Kontext, in den sie eingebettet sind. Sie passen sich auch dem Design der App an, in der sie erscheinen. Das AdMob-Format „Native Anzeigen“ bietet Publishern die Möglichkeit, Anzeigen nahtlos in Inhalte einzubinden. Mit dieser Technologie können Sie vollständig benutzerdefinierten Content implementieren, der den nativen Code in Unity-Apps optimal nutzt.
Native Anzeigen werden unter Verwendung der gleichen GameObjects
dargestellt, mit denen Sie bereits Ihre Apps erstellen. Außerdem können sie so formatiert werden, dass sie mit dem visuellen Design Ihrer App übereinstimmen. Wenn eine native Anzeige geladen wird, erhält Ihre App ein natives Objekt mit den zugehörigen Assets. Diese werden dann nicht vom SDK, sondern von der Unity-App angezeigt.
Vorbereitung
- Google Mobile Ads Unity-Plug-in: Version 7.0.0 oder höher
- Führen Sie die Schritte im Startleitfaden aus.
- Laden Sie das Add-on für native Anzeigen herunter und installieren Sie es.
Native Anzeigenformate laden
Native Anzeigen werden über die AdLoader
-Klasse geladen, die eine eigene AdLoader.Builder
-Klasse hat, mit der sie beim Erstellen angepasst werden kann. Mit der Methode ForNativeAd()
wird der 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-Werbeereignisse registrieren
Wenn Sie benachrichtigt werden möchten, wenn eine native Anzeige geladen wird oder das Laden fehlschlägt, fügen Sie der AdLoader
-Klasse für die unten aufgeführten Ereignisse delegiert hinzu.
OnNativeAdLoaded
Wird aufgerufen, wenn eine native Anzeige erfolgreich geladen wurde. Für dieses Ereignis ist ein delegierter Code erforderlich, um auf die geladene Anzeige zuzugreifen.
OnAdFailedToLoad
Wird ausgelöst, wenn eine native Anzeige nicht geladen werden kann.
Anzeige laden
Wenn Sie eine AdLoader
erstellt haben, rufen Sie die LoadAd()
-Methode auf, um eine Anzeige anzufordern:
adLoader.LoadAd(new AdRequest.Builder().Build());
Anzeigenanfrage zusammenstellen
Im folgenden Code-Snippet wird gezeigt, wie du eine AdLoader
erstellst, die so konfiguriert ist, dass native Anzeigen angefordert werden, und die Delegierte für erfolgreiche und fehlgeschlagene Anzeigenladungen 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());
}
Fehler beim Laden von Anzeigen verarbeiten
Das OnAdFailedToLoad
-Ereignis hat den Typ EventHandle<AdFailedToLoadEventArgs>
.
Unten sehen Sie, wie Sie den Grund für ein fehlgeschlagenes Anzeigenladen aus diesem Ereignis analysieren.
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 ausliefern
Wenn eine native Anzeige geladen wird, wird das Anzeigenereignis für das entsprechende Anzeigenformat aufgerufen. Ihre App ist dann für die Auslieferung der Anzeige verantwortlich. Dies muss jedoch nicht sofort erfolgen.
Anzahl der Anzeigen verwalten
Das OnNativeAdLoaded
-Ereignis hat den Typ EventHandler<NativeAdEventArgs>
. Die Anzeige, die in einem NativeAd
-Objekt gekapselt 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 Anzeigen geladen wurden, können Sie wie unten gezeigt auf ihre Assets zugreifen. Grafik-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;
}
Der Zugriff auf Anzeigen-Assets sollte nur über den Hauptthread erfolgen, z. B. über die Update()
-Methode eines Unity-Scripts. Die folgenden Assets sind nicht immer vorhanden und sollten vor der Anzeige geprüft werden:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
AdChoices-Asset
Das AdChoices-Anzeigen-Asset muss als Teil der nativen Anzeige eingeblendet werden. Außerdem muss das AdChoices-Anzeigen-Asset gut zu erkennen sein. Wählen Sie daher entsprechende Hintergrundfarben und ‑bilder aus.
GameObjects für Anzeigen-Assets registrieren
Sie müssen das GameObject
registrieren, damit das Anzeigen-Asset in Ihrer Unity-Anwendung angezeigt werden kann. Bei erfolgreicher Registrierung gibt die Methode, mit der das GameObject
registriert wurde, ein bool
zurück. Bei einer List<GameObject>
gibt die Methode eine int
zurück, die die Anzahl der erfolgreich registrierten GameObject
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.
}
Das GameObject
, das für ein Anzeigen-Asset registriert ist, muss eine konvexe Collider-Komponente haben, die die Größe und Form des GameObject
repräsentiert. Wenn GameObject
-Objekten, die für Anzeigen-Assets registriert sind, Collider
-Komponenten fehlen oder falsch konfiguriert sind, funktionieren native Anzeigen nicht richtig.
Im folgenden Code-Snippet wird GameObject
ein BoxCollider
hinzugefügt, das ein TextMesh
verwendet, um das Anzeigen-Asset für den Anzeigentitel einer nativen Anzeige anzuzeigen. Sobald die BoxCollider
an die GameObject
angehängt ist, wird sie automatisch skaliert, um den Text der TextMesh
-Komponente aufzunehmen.
// 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
Im folgenden Code wird gezeigt, wie das Symbol-Asset einer erfolgreich geladenen nativen Anzeige abgerufen, das Symbol-Anzeigen-Asset durch Festlegen der Textur eines Quad
angezeigt und die GameObject
für die Anzeige des Assets registriert wird. Das Abrufen des Anzeigen-Assets und die Registrierung bei der nativen Anzeigenklasse sollte für jedes Asset wiederholt werden, das in der App angezeigt wird.
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;
}