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.
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: |
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:
- Gemeinsame Schnittstelle für Plattformclients definieren
- Standardclient für nicht unterstützte Plattformen implementieren
- Android-Client zum Aufrufen von Android-Methoden implementieren
- iOS-Client zum Aufrufen von iOS-Methoden implementieren
- Implementieren Sie einen Kunden Factory-Konfiguration zwischen iOS- und Android-Clients wechseln
- 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.