Erste Schritte

In diesem Leitfaden erfahren Sie, wie Sie das Add-on für native Anzeigen verwenden, um native AdMob-Anzeigen in einer Unity-App zu implementieren. Ergänzend finden Sie noch 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 AdMob-Anzeigenformat können Publisher Anzeigen rendern, die sich optimal in den Content einfügen. Mit dieser Technologie können Sie stark 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, und die Unity-App (nicht das SDK) zeigt sie an.

Voraussetzungen

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;
}