Zdarzenia niestandardowe umożliwiają wydawcom korzystającym z zapośredniczenia AdMob dodawanie zapośredniczenia kaskadowego w przypadku zewnętrznej sieci reklamowej, która nie jest jedną z obsługiwanych sieci reklamowych. Z tego przewodnika dowiesz się, jak używać w projekcie Unity istniejącego zdarzenia niestandardowego utworzonego na Androida i iOS.
Wymagania wstępne
Zanim przejdziesz dalej, wykonaj te czynności:
Skonfiguruj Google Mobile Ads Unity Plugin. W Twojej aplikacji Unity powinna być już zaimportowana wtyczka Google Mobile Ads Unity.
Adaptery zdarzeń niestandardowych utworzone na Androida i iOS. Aby utworzyć niestandardowe adaptery zdarzeń, zapoznaj się z naszymi przewodnikami dotyczącymi zdarzeń niestandardowych na Android i iOS.
Definiowanie zdarzenia niestandardowego
Aby zdarzenie niestandardowe mogło brać udział w zapośredniczeniu, musi być zdefiniowane w interfejsie internetowym AdMob. Dodaj zdarzenie niestandardowe do obu grup zapośredniczenia – na Androida i iOS.
Ten zrzut ekranu przedstawia przykładowe ustawienia zdarzenia niestandardowego:

| Jak wypełniać parametry | |
|---|---|
| Nazwa klasy (iOS) |
W przypadku iOS wpisz nazwę klasy, która implementuje zdarzenie niestandardowe. Jeśli klasa została zaimplementowana w kodzie Swift, przed jej nazwą musisz dodać nazwę odpowiedniego modułu platformy lub aplikacji (np. Nazwa docelowa jest wymagana, jeśli w projekcie masz wiele celów lub jeśli nazwa projektu różni się od nazwy docelowej. W przypadku nazwy docelowej będzie to wyglądać tak: |
| Nazwa zajęć (Android) | W przypadku Androida upewnij się, że wartość podana w polu Class Name jest
w pełni kwalifikowaną nazwą klasy na Androida (np. com.google.ads.mediation.sample.customevent.SampleCustomEvent).
|
| Etykieta | Wpisz unikalną nazwę zdarzenia. |
| Parametr | Jeśli chcesz przekazać do zdarzenia niestandardowego argument w postaci ciągu znaków, np. identyfikator jednostki reklamowej. |
Importowanie bibliotek zdarzeń niestandardowych
Aby zdarzenia niestandardowe działały prawidłowo, może być konieczne dołączenie dodatkowych bibliotek. Może być na przykład konieczne dołączenie tych bibliotek:
- pakiet SDK firmy zewnętrznej na Androida,
- zdarzenie niestandardowe firmy zewnętrznej na Androida,
- pakiet SDK do wyświetlania reklam firmy zewnętrznej na iOS,
- zdarzenie niestandardowe firmy zewnętrznej na iOS.
Typy bibliotek
Istnieje kilka sposobów importowania kodu na Androida lub iOS do projektu Unity, m.in.:
- importowanie wstępnie utworzonych artefaktów na Androida lub iOS za pomocą narzędzia External Dependency Manager for 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 na iOS.
W zależności od sposobu spakowania używanych bibliotek może być konieczne zastosowanie innej strategii importowania w przypadku każdej z nich. Każda opcja zostanie omówiona bardziej szczegółowo w dalszej części.
(Zalecane) Importowanie wstępnie utworzonych artefaktów na Androida lub iOS
Importuj wstępnie utworzone artefakty z Maven lub CocoaPods za pomocą narzędzia External Dependency Manager for Unity. Ta wtyczka jest dołączona do wtyczki GoogleMobileAds.
Aby zaimportować istniejące artefakty, utwórz plik konfiguracyjny, 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 kończyć się ciągiem
Dependencies.xml.
Aby na przykład zaimportować adaptery zdarzeń niestandardowych 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. Reguły
konfigurowania importów znajdziesz w
artykule External Dependency Manager for Unity –
pierwsze kroki. Ten fragment kodu zawiera pakiet SDK na Androida i iOS oraz biblioteki zdarzeń niestandardowych dla 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 artefakt zdarzenia niestandardowego ma już zależność od wymaganego pakietu SDK sieci reklamowej, nie musisz definiować zależności pakietu SDK w sposób jawny: Przykład
Narzędzie External Dependency Manager automatycznie monitoruje zmiany konfiguracji i rozwiązuje zależności. Możesz też ręcznie rozwiązać zależności 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 bibliotek Androida. Jeśli
Twoje zdarzenie niestandardowe na Androida jest spakowane w ten sposób, zapoznaj się z instrukcjami dotyczącymi wtyczek AAR i bibliotek
Androida, aby dowiedzieć się
jak dołączyć te pliki do projektu Unity.
Importowanie plików źródłowych Java i Kotlin
Od Unity 2018.2 lub nowszej wersji, jeśli kod zdarzenia niestandardowego na Androida składa się
z nieskompilowanych *.java lub *.kt plików, możesz używać plików źródłowych Java lub Kotlin
jako wtyczek.
Importowanie plików źródłowych i bibliotek statycznych na iOS
Unity obsługuje artefakty *.framework oraz 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 wtyczek natywnych.
Testowanie zdarzeń niestandardowych za pomocą inspektora reklam
Inspektor reklam może służyć do testowania czy zdarzenia niestandardowe zostały prawidłowo zaimportowane do aplikacji. Inspektora reklam można otworzyć za pomocą gestów lub programowo za pomocą minimalnej ilości kodu.
(Opcjonalnie) Wywoływanie metod natywnych pakietu SDK firmy zewnętrznej ze skryptów C#
Pakiety SDK sieci reklamowych firm zewnętrznych mogą mieć specjalne wymagania, które wymagają bezpośredniego wywoływania metod na Androida lub iOS. Proces bezpośredniego wywoływania tych metod jest następujący:
- Zdefiniuj wspólny interfejs dla klientów platformy.
- Zaimplementuj domyślnego klienta dla nieobsługiwanych platform.
- Zaimplementuj klienta na Androida do wywoływania metod na Androida.
- Zaimplementuj klienta na iOS do wywoływania metod na iOS.
- Zaimplementuj fabrykę klientów, aby warunkowo przełączać się między klientami na iOS i Androida.
- Zdefiniuj interfejs API umożliwiający dostęp do wszystkich funkcji pakietu SDK sieci reklamowej firmy zewnętrznej.
W tej sekcji pokazujemy, jak zaimplementować te kroki w przypadku hipotetycznej sieci reklamowej o nazwie „AdPub” w interfejsie API C#, który może wywoływać metody na Androida 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
Zdefiniuj wspólny interfejs dla klientów platformy
Utwórz interfejs IAdPubClient z metodą, która reprezentuje podstawowy interfejs API na 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);
}
}
Zdefiniuj domyślnego klienta dla nieobsługiwanych platform
Utwórz klasę DefaultClient implementującą interfejs IAdPubClient, która rejestruje tylko nazwę metody. Użyj tej implementacji w edytorze Unity i na wszystkich platformach innych niż Android lub iOS.
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
Implementowanie klienta platformy iOS
Utwórz klasę iOSAdPubClient implementującą interfejs IAdPubClient na iOS. Ta implementacja używa
InteropServices do wywoływania
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 metodę GADUAdPubSetHasUserConsent() zdefiniowaną powyżej. Utwórz AdPubClientBridge.m z metodą C
GADUAdPubSetHasUserConsent() do obsługi wywołania metody z Unity i wywołaj
AdPubSDK.
AdPubClientBridge to plik źródłowy na iOS, który musi znajdować się w folderze
Plugins/iOS jak wyjaśniono w przewodniku Unity dotyczącym wtyczek natywnych.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Implementowanie klienta platformy Android
Utwórz klasę AndroidAdPubCient implementującą interfejs IAdPubClient na Androida. Ta implementacja używa klas pomocniczych Android Java
do wywoływania statycznej metody Androida setHasUserConsent().
Ponieważ klasy pomocnicze Android Java są dostępne tylko podczas działania Androida
, możesz zapobiec błędom kompilacji, używając UNITY_ANDROID dyrektywy
kompilatora do opakowania
klasy, jak pokazano we fragmencie kodu. Alternatywnie możesz użyć definicji zestawu
w Unity 2017.4 i nowszych wersjach, aby rozwiązać ten problem.
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 zwracać prawidłową implementację klienta
Teraz, gdy masz implementacje klienta dla każdej platformy, utwórz klasę AdPubClientFactory, aby zwracać prawidłową implementację interfejsu IAdPubClient w zależności od platformy działania. Ta klasa używa
dyrektyw
kompilatora do
zwracania prawidłowego IAdPubClientklienta.
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
}
}
}
Zdefiniuj publiczny interfejs API dla każdej metody interfejsu
Utwórz klasę AdPubApi, która ma wywołania metod dla każdej metody klienta w interfejsie IAdPubClient. Ta klasa używa AdPubClientFactory do uzyskania instancji IAdPubClient i wywołuje tego klienta w celu uzyskania dostępu do 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łaj nowo zdefiniowany interfejs API
Oto jak możesz wywołać interfejs API zdefiniowany powyżej:
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);
}
}