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 utworzonego wcześniej zdarzenia niestandardowego przeznaczonego na Androida i iOS.
Wymagania wstępne
Kliknij Rozpocznij. W aplikacji Unity powinna być już zaimportowana wtyczka reklam mobilnych Google dla środowiska Unity.
Adaptery zdarzeń niestandardowych są już dostępne na Androida i iOS. Aby utworzyć niestandardowe adaptery zdarzeń, zapoznaj się z naszymi przewodnikami po zdarzeniach niestandardowych na Android i iOS.
Definiowanie zdarzenia niestandardowego
Aby zdarzenie niestandardowe mogło uczestniczyć 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 zajęć (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 miejsca docelowego jest wymagana, jeśli w projekcie masz wiele miejsc docelowych lub jeśli nazwa projektu różni się od nazwy miejsca docelowego. W przypadku nazwy docelowej będzie to wyglądać tak: |
Nazwa klasy (Android) | W przypadku Androida upewnij się, że wartość podana w parametrze Class Name to pełna nazwa klasy w Androidzie (np. com.google.ads.mediation.sample.customevent.SampleCustomEvent ).
|
Etykieta | Wpisz niepowtarzalną 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 uwzględnienie dodatkowych bibliotek. Może być na przykład konieczne uwzględnienie tych bibliotek:
- Pakiet SDK firmy zewnętrznej na Androida
- Niestandardowe zdarzenie firmy zewnętrznej na Androidzie
- Pakiet SDK do reklam firm zewnętrznych na iOS
- Niestandardowe zdarzenie zewnętrzne w iOS
Rodzaje bibliotek
Kod Androida lub iOS możesz zaimportować do projektu Unity na kilka sposobów, m.in.:
- Importowanie gotowych 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 w językach Java i Kotlin
- Importowanie plików źródłowych iOS i bibliotek statycznych
W zależności od sposobu pakowania używanych bibliotek może być konieczne zastosowanie innej strategii importowania w przypadku każdej z nich. Każda z tych opcji zostanie omówiona szczegółowo w dalszej części.
(Zalecane) Importowanie gotowych artefaktów na Androida lub iOS
Importuj gotowe artefakty z Maven lub CocoaPods za pomocą 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 pliku i ścieżka muszą spełniać te wymagania:
- Plik musi znajdować się w folderze
/Editor/
. - Nazwa pliku musi kończyć się na
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 – wprowadzenie. Poniższy fragment kodu zawiera pakiety 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
Menedżer zależności zewnętrznych automatycznie monitoruje zmiany konfiguracji i rozwiązuje zależności. Możesz też ręcznie rozwiązać problem, korzystając z 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 niestandardowe zdarzenie na Androida jest spakowane w ten sposób, w instrukcjach w artykule Wtyczki AAR i biblioteki Androida znajdziesz informacje o tym, jak uwzględnić te pliki w projekcie Unity.
Importowanie plików źródłowych w językach Java i Kotlin
Jeśli korzystasz z Unity w wersji 2018.2 lub nowszej, a Twój kod zdarzenia niestandardowego na Androida składa się z niekompilowanych 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 iOS i bibliotek statycznych
Unity obsługuje artefakty *.framework
, *.h
i pliki źródłowe *.m
. Importowanie artefaktów i plików źródłowych iOS zostało opisane w przewodniku Unity dotyczącym wtyczek natywnych.
Testowanie zdarzeń niestandardowych za pomocą inspektora reklam
Inspektora reklam można używać do sprawdzania, czy zdarzenia niestandardowe zostały prawidłowo zaimportowane do aplikacji. Inspektora reklam można otworzyć za pomocą gestów lub programowo przy użyciu minimalnej ilości kodu.
(Opcjonalnie) Wywoływanie natywnych metod pakietu SDK innej firmy ze skryptów w języku C#
Pakiety SDK zewnętrznych sieci reklamowych mogą mieć specjalne wymagania, które wymagają bezpośredniego wywoływania metod Androida lub iOS. Aby bezpośrednio wywołać te metody, wykonaj te czynności:
- Określanie wspólnego interfejsu dla klientów platformy
- Wdrażanie domyślnego klienta na nieobsługiwanych platformach
- Implementowanie klienta Androida do wywoływania metod Androida
- Implementowanie klienta iOS do wywoływania metod iOS
- Wdrażanie fabryki klientów, aby warunkowo przełączać się między klientami iOS i Androida
- Określ interfejs API, który umożliwia dostęp do wszystkich funkcji pakietu SDK zewnętrznej sieci reklamowej.
W sekcji poniżej pokazujemy, jak te kroki są wdrażane w przypadku hipotetycznej sieci reklamowej 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
Określanie wspólnego interfejsu dla klientów platformy
Utwórz interfejs IAdPubClient
z metodą reprezentującą 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);
}
}
Określanie domyślnego klienta na nieobsługiwanych platformach
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 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
implementującą interfejs IAdPubClient
w iOS. Ta implementacja używa przestrzeni nazw 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
za pomocą metody C
GADUAdPubSetHasUserConsent()
, aby obsługiwać wywołanie metody z Unity, i wywołaj AdPubSDK
.
AdPubClientBridge
to plik źródłowy iOS, który musi znajdować się w folderze Plugins/iOS
zgodnie z instrukcjami w przewodniku Unity dotyczącym wtyczek natywnych.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Wdrażanie klienta platformy Android
Utwórz klasę AndroidAdPubCient
implementującą interfejs IAdPubClient
na Androidzie. Ta implementacja korzysta z klas pomocniczych Androida w języku Java do wywoływania statycznej metody Androida setHasUserConsent()
.
Klasy pomocnicze Java na Androida są dostępne tylko w czasie działania Androida, więc możesz zapobiec błędom kompilacji, używając UNITY_ANDROID
dyrektywy kompilatora, aby opakować klasę, jak pokazano we fragmencie kodu. Możesz też 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ą, która zwraca prawidłową implementację klienta.
Teraz, gdy masz implementacje klienta dla każdej platformy, utwórz klasę AdPubClientFactory
, która będzie zwracać prawidłową implementację interfejsu IAdPubClient
w zależności od platformy środowiska wykonawczego. Ta klasa używa dyrektyw kompilatora, aby zwracać prawidłowego IAdPubClient
klienta.
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 zawiera wywołania metod dla każdej metody klienta w interfejsie IAdPubClient
. Ta klasa używa funkcji AdPubClientFactory
, aby uzyskać instancję 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ływanie nowo zdefiniowanego interfejsu API
Oto jak możesz 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 zewnętrznych sieci reklamowych
Więcej przykładów adapterów zapośredniczenia innych firm implementujących interfejsy API w języku C# do opakowywania wywołań metod iOS i Androida znajdziesz w repozytorium wtyczki reklam mobilnych Google dla Unity w Githubie.