Benutzerdefinierte Ereignisse erstellen

Benutzerdefinierte Ereignisse ermöglichen es Publishern, Ad Manager die Vermittlung, um die abfolgebasierte Vermittlung für ein Drittanbieter-Werbenetzwerk hinzuzufügen, der unterstützten Werbenetzwerke. In diesem Leitfaden erfahren Sie, wie Sie ein vorhandenes benutzerdefiniertes Ereignis verwenden, das für Android erstellt wurde, und iOS in einem Unity-Projekt.

Vorbereitung

  • Schließen Sie Jetzt starten ab. Deine Einheit App sollte bereits das Unity-Plug-in für Google Mobile Ads importiert sein.

  • Benutzerdefinierte Ereignisadapter, die bereits für Android und iOS erstellt wurden. So erstellen Sie ein benutzerdefiniertes finden Sie in unseren Leitfäden für benutzerdefinierte Ereignisse Android und iOS.

Benutzerdefiniertes Ereignis definieren

Damit ein benutzerdefiniertes Ereignis an der Vermittlung teilnehmen kann, muss es werden in der Ad Manager Weboberfläche definiert. Fügen Sie benutzerdefiniertes Ereignis beide Android- und iOS-Vermittlungsgruppen

Parameter ausfüllen
Klassenname (iOS)

Geben Sie für iOS den Namen der Klasse ein, die das benutzerdefinierte Ereignis implementiert.

Wenn Ihre Klasse in Swift implementiert ist, müssen Sie dem Klassennamen das Präfix Name der App bzw. des Framework-Moduls (z. B. appName.className.

Der Zielname ist erforderlich, wenn Sie mehrere Ziele in Ihrem Projekt haben oder wenn der Projektname sich vom Zielnamen unterscheidet. Mit dem Zielnamen würde so aussehen: appName_targetName.className. Außerdem ersetzen Sie alle nicht alphanumerischen Zeichen wie Bindestriche durch Unterstriche enthalten.

Klassenname (Android) Achten Sie bei Android darauf, dass der Wert, den Sie für Class Name angeben, Der voll qualifizierte Klassenname für Android, z. B. com.google.ads.mediation.sample.customevent.SampleCustomEvent.
Label Geben Sie einen eindeutigen Namen für das Ereignis ein.
Parameter Wenn Sie ein String-Argument an Ihr benutzerdefiniertes Ereignis übergeben möchten, z. B. ein Anzeigenblock-ID.

Benutzerdefinierte Ereignisbibliotheken importieren

Damit benutzerdefinierte Ereignisse funktionieren, müssen möglicherweise zusätzliche Bibliotheken eingebunden werden ordnungsgemäß funktioniert. Beispielsweise müssen Sie möglicherweise die folgenden Bibliotheken einbinden:

  • Drittanbieter-SDK für Android
  • Benutzerdefiniertes Android-Ereignis eines Drittanbieters
  • iOS-Drittanbieteranzeigen-SDK
  • iOS – benutzerdefiniertes Drittanbieterereignis

Typen von Bibliotheken

Es gibt mehrere Möglichkeiten, Android- oder iOS-Code in ein Unity-Projekt zu importieren. einschließlich:

  • Vorkonfigurierte Android- oder iOS-Artefakte mithilfe der externen Abhängigkeit importieren Manager für Unity
  • AAE-Plug-ins und Android-Bibliotheken importieren
  • Java- und Kotlin-Quelldateien importieren
  • iOS-Quelldateien und statische Bibliotheken importieren

Je nachdem, wie die von Ihnen verwendeten Bibliotheken verpackt sind, benötigen Sie möglicherweise ein anderes Importstrategie für jede Bibliothek. Jede Option wird später ausführlicher erörtert.

(Empfohlen) Vordefinierte Android- oder iOS-Artefakte importieren

Importieren Sie vordefinierte Artefakte aus Maven oder CocoaPods mithilfe der externen Abhängigkeitsmanager für Unity Dieses Plug-in ist im GoogleMobileAds-Plug-in enthalten.

Wenn Sie vorhandene Artefakte importieren möchten, erstellen Sie eine Konfigurationsdatei, um Ihre Datenimport und -import. Für den Dateinamen und den Pfad gelten folgende Anforderungen:

  • Die Datei muss im Ordner /Editor/ vorhanden sein.
  • Der Dateiname muss auf Dependencies.xml enden.

Beispielsweise können Sie die Adapter benutzerdefinierter Ereignisse für ein hypothetisches Werbenetzwerk importieren. namens AdPub erstellen Sie die Datei:

Assets/AdPub/Editor/AdPubDependencies.xml

Definieren Sie als Nächstes Ihre Abhängigkeiten in der Datei AdPubDependencies.xml. Regeln zur Konfiguration der Importe finden Sie unter External Dependency Manager zum Abrufen von Unity Gestartet. Die Das folgende Code-Snippet enthält das Android- und iOS-SDK sowie ein benutzerdefiniertes Ereignis. Bibliotheken für eine hypothetische "AdPub" Werbenetzwerk.

Assets/AdPub/Editor/AdPubDependencies.xml

<dependencies>
  <androidPackages>
    <androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
    <androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
      <repositories>
        <repository>https://repo.maven.apache.org/maven2/</repository>
        <repository>https://dl.google.com/dl/android/maven2/</repository>
      </repositories>
    </androidPackage>
  </androidPackages>
  <iosPods>
    <iosPod name="AdPubSDK" version="1.0" />
    <iosPod name="AdPubCustomEvent" version="1.0">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>

Wenn Ihr benutzerdefiniertes Ereignisartefakt bereits eine Abhängigkeit von der erforderlichen Anzeige hat Network SDK müssen Sie die SDK-Abhängigkeit nicht explizit definieren: Beispiel

Der External Dependency Manager überwacht automatisch Konfigurationsänderungen und löst Abhängigkeiten auf. Sie können auch eine manuelle Lösung folgenden Menübefehl:

Assets > External Dependency Manager > Android Resolver > Force Resolve

AAE-Plug-ins und Android-Bibliotheken importieren

Unity unterstützt das Importieren von *.aar-Dateien sowie Android-Bibliotheksprojekten. Wenn Ihr benutzerdefiniertes Android-Ereignis auf diese Weise gepackt ist, siehe Plug-ins für AAE und Android Bibliotheken für eine Anleitung zur wie Sie diese Dateien in Ihr Unity-Projekt aufnehmen können.

Java- und Kotlin-Quelldateien importieren

Ab Unity 2018.2 oder höher, falls Ihr benutzerdefinierter Android-Ereigniscode Folgendes enthält: nicht kompilierten *.java- oder *.kt-Dateien können Sie Java- oder Kotlin-Quelldateien verwenden. als Plug-ins.

iOS-Quelldateien und statische Bibliotheken importieren

Unity unterstützt *.framework-Artefakte, *.h- und *.m-Quelldateien. Wird importiert iOS-Artefakte und -Quelldateien werden im Unity-Leitfaden für native Anzeigen Plug-ins.

Benutzerdefinierte Ereignisse mit dem Anzeigenprüftool testen

Mit dem Anzeigenprüftool können Sie dass die benutzerdefinierten Ereignisse korrekt in Ihre Anwendung importiert wurden. Anzeige kann das Tool nur mit Gesten oder programmatisch mit minimalem Code geöffnet werden.

Optional: Native Methoden von Drittanbieter-SDKs über C#-Skripts aufrufen

Für SDKs von Drittanbieter-Werbenetzwerken gelten möglicherweise besondere Anforderungen, Android- oder iOS-Methoden direkt aufrufen. Der Vorgang zum Aufrufen dieser Methoden wie folgt lauten:

  1. Gemeinsame Schnittstelle für Plattformclients definieren
  2. Standardclient für nicht unterstützte Plattformen implementieren
  3. Android-Client zum Aufrufen von Android-Methoden implementieren
  4. iOS-Client zum Aufrufen von iOS-Methoden implementieren
  5. Implementieren Sie einen Kunden Factory-Konfiguration zwischen iOS- und Android-Clients wechseln
  6. API für den Zugriff auf alle SDK-Funktionen von Drittanbieter-Werbenetzwerken definieren

Der folgende Abschnitt zeigt, wie diese Schritte für eine hypothetische Werbenetzwerk namens "AdPub" in einer C# API, die die Methoden unter Android aufrufen kann. und iOS:

Android

package com.adpub.android;

public class AdPubSdk
{
    public static void setHasUserConsent(boolean hasUserConsent);
}

iOS

@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end

Gemeinsame Schnittstelle für Plattformclients definieren

Erstellen Sie eine IAdPubClient-Schnittstelle mit einer Methode, die die zugrunde liegende Android- und iOS-API.

Assets/AdPub/Common/IAdPubClient.cs

namespace AdPub.Common
{
    public interface IAdPubClient
    {
        ///<summary>
        /// Sets a flag indicating if the app has user consent for advertisement.
        ///</summary>
        void SetHasUserConsent(bool hasUserConsent);
    }
}

Standardclient für nicht unterstützte Plattformen definieren

Erstellen Sie eine DefaultClient-Klasse, die die IAdPubClient-Schnittstelle implementiert, die protokolliert lediglich den Methodennamen. Verwenden Sie diese Implementierung für den Unity-Editor und alle als Android oder iOS.

Assets/AdPub/Common/DefaultClient.cs

namespace AdPub.Common
{
    public class DefaultClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            Debug.Log("SetHasUserConsent was called.");
        }
    }
}

iOS-Plattformclient implementieren

Eine iOSAdPubClient-Klasse erstellen, die die IAdPubClient-Schnittstelle für implementiert iOS Diese Implementierung verwendet InteropServices, die aufgerufen werden sollen Methode setHasUserConsent() in der iOS-Klasse AdPubSdk

Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS

// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class iOSAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            GADUAdPubSetHasUserConsent(hasUserConsent);
        }

        [DllImport("__Internal")]
        internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
    }
}
#endif

Implementieren Sie als Nächstes die definierte Methode GADUAdPubSetHasUserConsent() oben. AdPubClientBridge.m mit einer C-Methode erstellen GADUAdPubSetHasUserConsent(), um den Methodenaufruf von Unity zu verarbeiten, und ruft AdPubSDK.

AdPubClientBridge ist eine iOS-Quelldatei und muss im Plugins/iOS, wie im Unity-Leitfaden für native Anzeigen beschrieben. Plug-ins.

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
  [AdPubSDK setHasUserConsent:hasUserConsent];
}

Android-Plattformclient implementieren

Eine AndroidAdPubCient-Klasse erstellen, die die IAdPubClient-Schnittstelle für implementiert Android Diese Implementierung verwendet den Android Java-Hilfsprogramm Kurse , um die statische Android-Methode setHasUserConsent() aufzurufen.

Da die Android Java-Hilfsklassen nur während der Laufzeit verwenden, können Sie Kompilierungsfehler mit dem Compiler UNITY_ANDROID vermeiden zum Umschließen wie im Code-Snippet dargestellt. Alternativ können Sie Assembly Definitionen auf Unity 2017.4 und höher, um das Problem zu beheben.

Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID

// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class AndroidAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
             // Make a reference to the com.adpub.AdPubSDK.
            AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");

            // Call the native setHasUserConsent method of com.adpub.AdPubSDK.
            adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
        }
    }
}
#endif

Factory-Methode erstellen, um die richtige Clientimplementierung zurückzugeben

Nachdem Sie nun über Implementierungen des Clients für jede Plattform verfügen, erstellen Sie eine AdPubClientFactory, um die korrekte Implementierung des IAdPubClient-Schnittstelle abhängig von der Laufzeitplattform. In diesem Kurs werden Compiler Anweisungen zu geben Sie den richtigen IAdPubClient-Client zurück.

Assets/AdPub/Common/AdPubClientFactory.cs

namespace AdPub.Common
{
    public class AdPubClientFactory
    {
        // Return the correct platform client.
        public static IAdPubClient GetClient()
        {
#if   !UNITY_EDITOR && UNITY_ANDROID
            return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
            return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
            // Returned for the Unity Editor and unsupported platforms.
            return new DefaultClient();
#endif
        }
    }
}

Öffentliche API für jede Schnittstellenmethode definieren

Erstellen Sie eine AdPubApi-Klasse mit Methodenaufrufen für jede Clientmethode in Ihrem IAdPubClient-Schnittstelle. Diese Klasse verwendet die AdPubClientFactory, um ein Instanz von IAdPubClient und ruft diesen Client für das zugrunde liegende SDK auf Funktionalitäten.

Assets/AdPub/AdPubApi.cs

using AdPub.Common;

namespace AdPub
{
    public class AdPubApi
    {
        private static readonly IAdPubClient client = GetAdPubClient();

        // Returns the correct client for the current runtime platform.
        private static IAdPubClient GetAdPubClient()
        {
            return AdPubClientFactory.GetClient();
        }

        // Sets the user consent using the underlying SDK functionality.
        public static void SetHasUserConsent(bool hasUserConsent)
        {
            client.SetHasUserConsent(hasUserConsent);
        }
    }
}

Die neu definierte API aufrufen

So rufen Sie die oben definierte API auf:

Assets/Scripts/AdPubController.cs

using UnityEngine;
using AdPub;

public class AdPubController : MonoBehaviour
{
    // TODO: Get consent from the user and update this userConsent field.
    public bool userConsent;

    // Called on startup of the GameObject it's assigned to.
    public void Start()
    {
        // Pass the user consent to AdPub.
        AdPubApi.SetHasUserConsent(userConsent);
    }
}

Weitere Beispiele für Adapter von Drittanbieter-Werbenetzwerken

GitHub-Website zum Google Mobile Ads Unity-Plug-in aufrufen Repository finden Sie weitere Beispiele für Vermittlungsadapter von Drittanbietern, die C# APIs implementieren. zum Umschließen von Aufrufen an iOS- und Android-Methoden.