Zdarzenia niestandardowe umożliwiają wydawcom korzystającym AdMob z zapośredniczenia 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żyć w projekcie Unity istniejącego zdarzenia niestandardowego utworzonego na Androida i iOS.
Wymagania wstępne
Wykonaj czynności Pierwsze kroki. Twoja aplikacja na Unity powinna już mieć zaimportowaną wtyczkę reklam mobilnych Google dla Unity.
Adaptery zdarzeń niestandardowych są już opracowane na Androida i iOS. Aby utworzyć adaptery zdarzeń niestandardowych, zajrzyj do przewodników po zdarzeniach niestandardowychAndroid iiOS.
Definiowanie zdarzenia niestandardowego
Aby zdarzenie niestandardowe mogło uczestniczyć w zapośredniczeniu, musisz je zdefiniować w AdMob interfejsie internetowym. Dodaj zdarzenie niestandardowe do grup zapośredniczenia na urządzeniach z Androidem i iOS.
Zrzut ekranu z przykładowymi ustawieniami zdarzenia niestandardowego:
Jak wypełnić parametry | |
---|---|
Nazwa zajęć (iOS) |
W iOS wpisz nazwę klasy, która implementuje zdarzenie niestandardowe. Jeśli klasa została zaimplementowana w kodzie Swift, przed jej nazwą musisz dodać nazwę odpowiedniej aplikacji lub modułu platformy (np. Nazwa celu jest wymagana, jeśli w projekcie masz wiele środowisk docelowych lub jeśli nazwa projektu różni się od nazwy projektu. Docelowa nazwa wygląda tak: |
Nazwa zajęć (Android) | W przypadku Androida upewnij się, że wartość podana dla Class Name jest w pełni kwalifikowaną nazwą klasy Androida (na przykład 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. |
Importuj biblioteki zdarzeń niestandardowych
Prawidłowe działanie zdarzeń niestandardowych może wymagać dołączenia dodatkowych bibliotek. Na przykład możesz potrzebować tych bibliotek:
- Pakiet SDK na Androida firmy zewnętrznej
- Zdarzenie niestandardowe innej firmy na Androida
- Pakiet SDK do wyświetlania reklam firmy zewnętrznej na iOS
- Zewnętrzne zdarzenie niestandardowe na iOS
Rodzaje bibliotek
Kody na Androida lub iOS można zaimportować do projektu Unity na kilka sposobów, np.:
- Importowanie gotowych artefaktów Androida lub iOS przy użyciu zewnętrznego menedżera zależności dla 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 tego, jak uporządkowane są używane biblioteki, dla każdej z nich możesz potrzebować innej strategii importowania. Każda opcja zostanie omówiona szczegółowo później.
(Zalecane) Importowanie gotowych artefaktów Androida lub iOS
Zaimportuj gotowe artefakty z Maven lub CocoaPods za pomocą zewnętrznego menedżera zależności dla Unity. Ta wtyczka jest dołączana do wtyczki GoogleMobileAds.
Aby zaimportować istniejące artefakty, utwórz plik konfiguracji w celu zdefiniowania importów. Oto wymagania dotyczące nazwy pliku i ścieżki:
- Plik musi znajdować się w folderze
/Editor/
. - Nazwa pliku musi kończyć się na
Dependencies.xml
.
Aby np. zaimportować adaptery zdarzeń niestandardowych do 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 importu można znaleźć w External Dependency Manager for Unity started (Rozpoczęcie pracy z Unity). Ten fragment kodu zawiera pakiet SDK na Androida i iOS oraz biblioteki zdarzeń niestandardowych na potrzeby 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 jest już zależny od wymaganego pakietu SDK sieci reklamowej, nie musisz wyraźnie określać zależności od tego pakietu: Przykład
Zewnętrzny menedżer zależności automatycznie monitoruje zmiany w konfiguracji i rozwiązuje zależności. Możesz też znaleźć rozwiązanie ręcznie, 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 projekty bibliotek na Androidzie. Jeśli Twoje niestandardowe zdarzenie Androida jest spakowane w ten sposób, na stronie wtyczek AAR i bibliotek
Androida znajdziesz instrukcje włączania tych plików do projektu Unity.
Importuj pliki źródłowe Java i Kotlin
Jeśli Twój niestandardowy kod zdarzeń w Androidzie w wersji Unity 2018.2 lub nowszej zawiera nieskompilowane pliki *.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 na iOS
Unity obsługuje artefakty *.framework
, pliki źródłowe *.h
i *.m
. Importowanie artefaktów i plików źródłowych z iOS zostało wyjaśnione w przewodniku Unity dotyczącym wtyczek natywnych.
Testowanie zdarzeń niestandardowych za pomocą inspektora reklam
Inspektora reklam możesz użyć do sprawdzenia, czy zdarzenia niestandardowe zostały prawidłowo zaimportowane do aplikacji. Inspektora reklam można otworzyć tylko gestami lub automatycznie, używając minimalnej ilości kodu.
(Opcjonalnie) Wywołuj metody natywne pakietów SDK innych firm 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 na Androida lub iOS. Proces bezpośredniego wywoływania tych metod wygląda tak:
- Zdefiniuj wspólny interfejs dla klientów platformy
- Wdrażanie domyślnego klienta na nieobsługiwanych platformach
- Zaimplementuj klienta Androida do wywoływania metod Androida
- Zaimplementuj klienta iOS do wywoływania metod iOS
- Zaimplementuj fabrykę klienta, aby warunkowo przełączać się między klientami na iOS i Androida.
- Definiowanie interfejsu API umożliwiającego dostęp do wszystkich funkcji pakietów SDK zewnętrznych sieci reklamowych
Z tej sekcji dowiesz się, jak implementować te czynności w przypadku hipotetycznej sieci reklamowej o nazwie „AdPub” w interfejsie API w języku C#, 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
Zdefiniuj wspólny interfejs dla klientów platformy
Utwórz interfejs IAdPubClient
za pomocą metody, która reprezentuje bazowy 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 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 oraz 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.");
}
}
}
Wdróż klienta na platformie iOS
Utwórz klasę iOSAdPubClient
implementującą interfejs IAdPubClient
na urządzeniu z iOS. Ta implementacja korzysta z InteropServices do wywoływania metody setHasUserConsent()
w klasie AdPubSdk
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
przy użyciu metody C
GADUAdPubSetHasUserConsent()
do obsługi wywołania metody z Unity i wywołania AdPubSDK
.
AdPubClientBridge
to plik źródłowy iOS, który należy umieścić w folderze Plugins/iOS
zgodnie z opisem w przewodniku Unity dotyczącym wtyczek natywnych.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Wdróż klienta platformy Android
Utwórz klasę AndroidAdPubCient
implementującą interfejs IAdPubClient
na urządzeniu z Androidem. Ta implementacja korzysta z klas pomocniczych w języku Java na Androida do wywoływania statycznej metody Androida setHasUserConsent()
.
Klasy pomocnicze w języku Java na Androida są dostępne tylko w środowisku wykonawczym Androida, więc możesz zapobiec błędom kompilacji za pomocą dyrektywy kompilatora UNITY_ANDROID
do zawijania klasy w sposób pokazany we fragmencie kodu. Aby rozwiązać ten problem, możesz też użyć definicji asemblera w Unity 2017.4 lub nowszych.
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
Masz już implementacje klienta dla każdej platformy, więc 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 do zwrócenia 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
}
}
}
Zdefiniuj publiczny interfejs API dla każdej metody interfejsu
Utwórz klasę AdPubApi
zawierającą wywołania metod dla każdej metody klienta w interfejsie IAdPubClient
. Ta klasa korzysta z AdPubClientFactory
do pobierania instancji IAdPubClient
i wywołuje tego klienta na potrzeby bazowych 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ć 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);
}
}
Dodatkowe przykłady adapterów zewnętrznych sieci reklamowych
W repozytorium wtyczki Unity Google do reklam mobilnych Google na GitHubie znajdziesz dodatkowe przykłady adapterów zapośredniczenia innych firm, które implementują interfejsy API C# do pakowania wywołań metod na iOS i Androida.