Los gehts

In diesem Leitfaden erfahren Sie, wie Sie das Add-on für native Anzeigen verwenden, um native AdMob-Anzeigen in eine Unity-App einzubinden. Außerdem werden einige wichtige Aspekte erläutert, die Sie dabei beachten 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 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, das die Assets enthält. Die Unity-App (und nicht das SDK) rendert die Assets.

Vorbereitung

Native Anzeigenformate laden

Native Anzeigen werden über die Klasse AdLoader geladen. Diese Klasse hat eine eigene AdLoader.Builder-Klasse, mit der sie bei der Erstellung 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 Delegates für die unten aufgeführten Ereignisse hinzu.

OnNativeAdLoaded

Wird aufgerufen, wenn eine native Anzeige erfolgreich geladen wurde. Für dieses Ereignis ist ein Delegat erforderlich, um auf die geladene Anzeige zuzugreifen.

OnAdFailedToLoad

Wird aufgerufen, wenn eine native Anzeige nicht geladen werden kann.

Anzeige laden

Wenn Sie eine AdLoader erstellt haben, rufen Sie die zugehörige LoadAd()-Methode auf, um eine Anzeige anzufordern:

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

Anzeigenanfrage zusammenstellen

Im folgenden Code-Snippet wird gezeigt, wie Sie ein AdLoader erstellen, das für das Anfordern nativer Anzeigen konfiguriert ist, Delegaten 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());
}

Fehler beim Laden von Anzeigen behandeln

Das Ereignis OnAdFailedToLoad hat den Typ EventHandle<AdFailedToLoadEventArgs>. Unten sehen Sie, wie der Grund für einen Anzeigenladefehler aus diesem Ereignis geparst wird.

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 schalten

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, muss dies aber nicht sofort tun.

Anzahl der Anzeigen verarbeiten

Das Ereignis OnNativeAdLoaded hat den Typ EventHandler<NativeAdEventArgs>. Die Anzeige, die in einem NativeAd-Objekt gekapselt ist, kann wie gezeigt aus NativeAdEventArgs abgerufen werden:

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

Assets für native Anzeigen abrufen

Sobald Anzeigen geladen wurden, kann auf ihre Assets zugegriffen werden, wie unten dargestellt. 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. Außerdem sind die folgenden Assets nicht immer vorhanden und sollten vor der Anzeige geprüft werden:

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

Datenschutzinfo-Asset

Das Datenschutzinfo-Symbol muss als Teil der nativen Anzeige angezeigt werden. Es muss außerdem gut zu erkennen sein. Wählen Sie daher entsprechende Hintergrundfarben und ‑bilder aus.

GameObjects für Anzeigen-Assets registrieren

Sie müssen die GameObject registrieren, damit das Anzeigen-Asset in Ihrer Unity-App angezeigt wird. Wenn die Registrierung erfolgreich ist, gibt die Methode, mit der die GameObject registriert wird, eine bool zurück. Für ein List<GameObject> gibt die Methode ein int zurück, das die Anzahl der erfolgreich registrierten GameObject angibt.

Wenn die Registrierung eines Anzeigen-Assets nicht erfolgreich ist, werden Impressionen und Klicks auf die entsprechende native Anzeige nicht erfasst.

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

Für das GameObject, das für ein Anzeigen-Asset registriert ist, muss eine konvexe Collider-Komponente vorhanden sein, die die Größe und Form des GameObject repräsentiert. Wenn GameObject-Objekte, die für Anzeigen-Assets registriert sind, Collider-Komponenten fehlen oder eine falsch konfigurierte Komponente vorhanden ist, funktionieren native Anzeigen nicht richtig.

Im folgenden Code-Snippet wird BoxCollider zu GameObject hinzugefügt. Dabei wird ein TextMesh verwendet, um das Anzeigentitel-Asset einer nativen Anzeige zu präsentieren. Sobald die BoxCollider an die GameObject angehängt ist, wird sie automatisch so skaliert, dass der Text der TextMesh-Komponente darin Platz findet.

// 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

Der folgende Code zeigt, wie das Symbol-Asset einer erfolgreich geladenen nativen Anzeige abgerufen, das Symbol-Anzeigen-Asset durch Festlegen der Textur eines Quad angezeigt und das GameObject registriert wird, das zum Anzeigen des Assets verwendet werden soll. Dieser Prozess des Abrufens des Anzeigen-Assets und der Registrierung bei der Klasse für native Anzeigen sollte für jedes der von der App angezeigten Assets 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;
}