Zdarzenia niestandardowe umożliwiają wydawcom korzystającym z zapośredniczenia AdMob dodawanie zapośredniczenia kaskadowego w przypadku zewnętrznej sieci reklamowej, która nie należy do obsługiwanych sieci reklamowych. Z tego przewodnika dowiesz się, jak używać dotychczasowego zdarzenia niestandardowego utworzonego na potrzeby Androida i iOS w projekcie Unity.
Wymagania wstępne
Wykonaj instrukcje w sekcji Rozpocznij. W aplikacji Unity powinna być zaimportowana wtyczka reklam mobilnych Google dla środowiska Unity.
adaptery zdarzeń niestandardowych już utworzone na potrzeby Androida i iOS. Aby utworzyć niestandardowe adaptery zdarzeń, zapoznaj się z przewodnikami dotyczącymi zdarzeń niestandardowych na Android i iOS.
Definiowanie zdarzenia niestandardowego
Aby zdarzenie niestandardowe mogło uczestniczyć w zapośredniczeniu, musisz je zdefiniować w interfejsie internetowym AdMob. Dodaj zdarzenie niestandardowe do obu grup zapośredniczenia na Androida i iOS.
Na tym zrzucie ekranu widać przykładowe ustawienia zdarzenia niestandardowego:
Jak wypełniać parametry | |
---|---|
Nazwa zajęć (iOS) |
W przypadku systemu iOS wpisz nazwę klasy, która implementuje zdarzenie niestandardowe. Jeśli klasa została zaimplementowana w języku Swift, przed jej nazwą musisz dodać nazwę odpowiedniego modułu platformy lub aplikacji (np. Nazwa docelowa jest wymagana, jeśli w projekcie masz wiele docelowych obiektów lub jeśli nazwa projektu jest inna niż nazwa docelowego obiektu. Nazwa docelowa będzie wyglądać tak: |
Nazwa zajęć (Android) | W przypadku Androida wartość parametru Class Name powinna być pełną nazwą klasy na Androida (np. com.google.ads.mediation.sample.customevent.SampleCustomEvent ).
|
Etykieta | Wpisz niepowtarzalną nazwę zdarzenia. |
Parametr | Jeśli chcesz przekazać zdarzeniu niestandardowemu argument typu string, np. identyfikator jednostki reklamowej. |
Importowanie bibliotek zdarzeń niestandardowych
Aby zdarzenia niestandardowe działały prawidłowo, może być konieczne uwzględnienie dodatkowych bibliotek. Możesz na przykład potrzebować tych bibliotek:
- Pakiet SDK zewnętrznego dewelopera na Androida
- Zdarzenie niestandardowe zewnętrznej usługi na Androida
- Pakiet SDK reklam zewnętrznych na iOS
- Zdarzenie niestandardowe zewnętrznej firmy na iOS
Typy bibliotek
Istnieją różne sposoby importowania kodu na Androida lub iOS do projektu Unity, m.in.:
- Importowanie wstępnie utworzonych artefaktów na Androida lub iOS za pomocą menedżera zależności zewnętrznych w Unity
- Importowanie wtyczek AAR i bibliotek Androida
- Importowanie plików źródłowych Java i Kotlin
- Importowanie plików źródłowych i bibliotek statycznych iOS
W zależności od tego, jak są skompilowane używane przez Ciebie biblioteki, może być konieczne zastosowanie innej strategii importowania w przypadku każdej z nich. Każdą z nich omówimy bardziej szczegółowo w dalszej części.
(zalecane) Importowanie wstępnie utworzonych artefaktów na Androida lub iOS
Zaimportuj wstępnie utworzone artefakty z Maven lub CocoaPods za pomocą zewnętrznego menedżera zależności dla Unity. Ta wtyczka jest zawarta w pliku GoogleMobileAds.
Aby zaimportować istniejące artefakty, utwórz plik konfiguracji, w którym zdefiniujesz importy. Nazwa i ścieżka pliku muszą spełniać te wymagania:
- Plik musi znajdować się w folderze
/Editor/
. - Nazwa pliku musi się kończyć na
Dependencies.xml
.
Aby np. zaimportować adaptery zdarzenia niestandardowego dla hipotetycznej sieci reklamowej o nazwie AdPub
, utwórz plik:
Assets/AdPub/Editor/AdPubDependencies.xml
Następnie zdefiniuj zależności w pliku AdPubDependencies.xml
. Zasady konfigurowania importów znajdziesz w artykule Zarządzanie zewnętrznymi zależnościami w Unity – wprowadzenie. Poniższy fragment kodu zawiera pakiety SDK Androida i iOS oraz biblioteki zdarzeń niestandardowych hipotetycznej sieci reklamowej „AdPub”.
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>
Jeśli element niestandardowego zdarzenia jest już zależny od wymaganego pakietu SDK sieci reklamowej, nie musisz definiować zależności od pakietu SDK w sposób jawny: Przykład
Menedżer zależności zewnętrznych automatycznie sprawdza zmiany konfiguracji i rozwiązuje zależności. Rozwiązanie ręczne możesz też wykonać za pomocą tego polecenia menu:
Assets > External Dependency Manager > Android Resolver > Force Resolve
Importowanie wtyczek AAR i bibliotek Androida
Unity obsługuje importowanie plików *.aar
oraz projektów biblioteki Androida. Jeśli zdarzenie niestandardowe na Androida jest skompilowane w ten sposób, instrukcje dotyczące dołączania tych plików do projektu Unity znajdziesz w artykule Przystawki AAR i biblioteki Androida.
Importowanie plików źródłowych Java i Kotlin
Od wersji Unity 2018.2 lub nowszej, jeśli kod niestandardowego zdarzenia na Androida składa się z nieskompilowanych plików *.java
lub *.kt
, możesz używać plików źródłowych Java lub Kotlin jako wtyczek.
Importowanie plików źródłowych i bibliotek statycznych iOS
Unity obsługuje artefakty *.framework
, pliki źródłowe *.h
i *.m
. Importowanie artefaktów i plików źródłowych na iOS jest opisane w przewodniku Unity dotyczącym natywnych wtyczek.
Testowanie zdarzeń niestandardowych za pomocą inspektora reklam
Za pomocą inspektora reklam możesz sprawdzić, czy zdarzenia niestandardowe zostały prawidłowo zaimportowane do aplikacji. AdInspector można otworzyć za pomocą gestów lub programowo za pomocą minimalnego kodu.
(Opcjonalnie) Wywoływanie natywnych metod pakietu SDK firmy zewnętrznej ze skryptów C#
Pakiety SDK sieci reklamowych innych firm mogą mieć specjalne wymagania, które wymagają bezpośredniego wywołania metod Androida lub iOS. Proces wywoływania tych metod bezpośrednio:
- Definiowanie wspólnego interfejsu dla klientów platformy
- Wdrożenie klienta domyślnego na nieobsługiwanych platformach
- Zaimplementuj klienta Androida do wywoływania metod Androida
- Zaimplementuj klienta iOS do wywoływania metod iOS
- Wdrożenie fabryki klientów do warunkowego przełączania się między klientami iOS i Androida
- Zdefiniuj interfejs API do uzyskiwania dostępu do wszystkich funkcji pakietu SDK sieci reklamowej zewnętrznej
W następującej sekcji pokazano, jak te kroki są wdrażane w przypadku hipotetycznego systemu reklamowego o nazwie „AdPub” w interfejsie C# API, który może wywoływać metody na Androidzie i iOS:
Android
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
iOS
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
Definiowanie wspólnego interfejsu dla klientów platformy
Utwórz interfejs IAdPubClient
z metodą, która reprezentuje podstawowy interfejs API Androida i iOS.
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);
}
}
Definiowanie klienta domyślnego na nieobsługiwanych platformach
Utwórz klasę DefaultClient
, która implementuje interfejs IAdPubClient
i tylko rejestruje nazwę metody. Używaj tej implementacji w edytorze Unity i na wszystkich platformach innych niż Android i iOS.
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
Wdrażanie klienta platformy iOS
Utwórz klasę iOSAdPubClient
, która implementuje interfejs IAdPubClient
na iOS. Ta implementacja używa InteropServices do wywołania metody setHasUserConsent()
w klasie AdPubSdk
na iOS.
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
Następnie zaimplementuj zdefiniowaną powyżej metodę GADUAdPubSetHasUserConsent()
. Utwórz AdPubClientBridge.m
za pomocą metody C
GADUAdPubSetHasUserConsent()
, aby obsłużyć wywołanie metody z Unity, i wywołaj AdPubSDK
.
AdPubClientBridge
to plik źródłowy na iOS, który musi znajdować się w folderze Plugins/iOS
, zgodnie z opisem w przewodniku po natywnych wtyczkach Unity.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Wdrażanie klienta na platformie Android
Utwórz klasę AndroidAdPubCient
, która implementuje interfejs IAdPubClient
na Androidzie. Ta implementacja używa klas pomocniczych w języku Java na Androida do wywołania statycznej metody Androida setHasUserConsent()
.
Ponieważ klasy pomocnicze Javy na Androida są dostępne tylko w czasie wykonywania, możesz zapobiegać błędom kompilacji, używając UNITY_ANDROID
dyrektywy kompilatora, aby owijać klasę zgodnie z wyświetlanym fragmentem kodu. Aby rozwiązać ten problem, możesz też użyć definicji zestawów w Unity 2017.4 lub nowszej wersji.
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
Utwórz metodę fabryczną, aby zwrócić prawidłową implementację klienta
Teraz, gdy masz implementacje klienta na każdą platformę, utwórz klasę AdPubClientFactory
, aby zwracać prawidłową implementację interfejsu IAdPubClient
w zależności od platformy uruchomieniowej. Ta klasa używa instrukcji kompilatora, aby zwrócić prawidłowego klienta IAdPubClient
.
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
}
}
}
Definiowanie publicznego interfejsu API dla każdej metody interfejsu
Utwórz klasę AdPubApi
, która zawiera wywołania metody dla każdej metody klienta w interfejsie IAdPubClient
. Ta klasa używa funkcji AdPubClientFactory
do uzyskania wystąpienia klasy IAdPubClient
i wywołuje tego klienta w celu korzystania z podstawowych funkcji pakietu SDK.
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);
}
}
}
Wywoływanie nowo zdefiniowanego interfejsu API
Aby wywołać zdefiniowany powyżej interfejs API:
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);
}
}
Dodatkowe przykłady adapterów zapośredniczenia zewnętrznych sieci reklamowych
Więcej przykładów adapterów zapośredniczenia innych firm implementujących interfejsy API C#, które umożliwiają stosowanie metod iOS i Androida, znajdziesz w repertuarze wtyczki reklam mobilnych Google dla Unity na GitHubie.