Zdarzenia niestandardowe umożliwiają wydawcom korzystanie z AdMob zapośredniczenie, aby dodać zapośredniczenie kaskadowe w przypadku zewnętrznej sieci reklamowej, która nie jest inną siecią z obsługiwanych sieci reklamowych. Z tego przewodnika dowiesz się, jak korzystać z istniejących zdarzeń niestandardowych utworzonych na potrzeby Androida iOS w projekcie Unity.
Wymagania wstępne
Wykonaj czynności opisane w sekcji Pierwsze kroki. Twoja jedność aplikacja powinna już mieć zaimportowaną wtyczkę do reklam mobilnych Google dla Unity.
Adaptery zdarzeń niestandardowych, które zostały już utworzone na potrzeby Androida i iOS. Aby utworzyć niestandardowe znajdziesz w przewodnikach po zdarzeniach niestandardowych Android i iOS
Definiowanie zdarzenia niestandardowego
Aby zdarzenie niestandardowe mogło uczestniczyć w zapośredniczeniu, musi ono być należy zdefiniować w AdMob interfejsie internetowym. Dodaj niestandardowe do obu tagów Grupy zapośredniczenia na Androida i iOS.
Zrzut ekranu przedstawia przykładowe ustawienia zdarzenia niestandardowego:
Jak wypełniać parametry | |
---|---|
Nazwa klasy (iOS) |
W iOS wpisz nazwę klasy, która implementuje zdarzenie niestandardowe. Jeśli Twoja klasa jest zaimplementowana w języku Swift, do jej nazwy musisz dodać prefiks
nazwa jego aplikacji lub modułu platformy (np.
Nazwa miejsca docelowego jest wymagana, jeśli w projekcie masz wiele celów lub jeśli
nazwa projektu jest inna niż nazwa miejsca docelowego. Dzięki nazwie elementu docelowego
wygląda tak: |
Nazwa zajęć (Android) | W przypadku Androida wartość Class Name musi wynosić
pełną i jednoznaczną nazwę klasy dla 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 tekstowy, na przykład identyfikator jednostki reklamowej. |
Importuj biblioteki zdarzeń niestandardowych
Zdarzenia niestandardowe mogą wymagać dołączenia dodatkowych bibliotek do działania bez obaw. Możesz na przykład dodać te biblioteki:
- Pakiet SDK innej firmy na Androida
- Zdarzenie niestandardowe firmy zewnętrznej w Androidzie
- Pakiet SDK do wyświetlania reklam innych firm na iOS
- Zdarzenie niestandardowe firmy zewnętrznej w systemie iOS
Typy bibliotek
Kod na Androida lub iOS można zaimportować do projektu Unity na kilka sposobów: w tym:
- Importowanie gotowych artefaktów z Androida lub iOS przy użyciu zależności zewnętrznej Menedżer 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 sposobu pakietu bibliotek, których używasz, możesz potrzebować importowanie danych do poszczególnych bibliotek. Każdą z tych opcji omawiamy bardziej szczegółowo w dalszej części tego artykułu.
(Zalecane) Importowanie gotowych artefaktów z Androida lub iOS
Zaimportuj gotowe artefakty z Maven lub CocoaPods za pomocą interfejsu External Menedżer zależności w Unity Wtyczka jest dołączona do wtyczki GoogleMobileAds.
Aby zaimportować istniejące artefakty, utwórz plik konfiguracji w celu zdefiniowania importowanie danych. 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 np. zaimportować adaptery zdarzeń niestandardowych na potrzeby 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 importowania można znaleźć na stronie
Zewnętrzny menedżer zależności dla Unity programie
Rozpoczęto.
ten fragment kodu zawiera SDK na Androida i iOS oraz zdarzenie niestandardowe
bibliotek do hipotetycznego „AdPub” w sieci reklamowej.
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 wymaganej reklamy pakietu SDK sieci, nie musisz jawnie definiować zależności SDK: Przykład
Zewnętrzny menedżer zależności automatycznie monitoruje zmiany w konfiguracji i usuwa zależności. Możesz też ręcznie rozwiązać problem za pomocą następujące polecenie 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 z biblioteki Androida. Jeśli
niestandardowe zdarzenie Androida jest spakowane w ten sposób. Więcej informacji: Wtyczki AAR i Android
Biblioteki
jak uwzględnić je w projekcie Unity.
Importuj pliki źródłowe Java i Kotlin
Od wersji Unity 2018.2 lub nowszej, jeśli kod zdarzenia niestandardowego na Androidzie zawiera
nieskompilowanych plików *.java
lub *.kt
, możesz użyć plików źródłowych Java lub Kotlin
jako wtyczki.
Importowanie plików źródłowych i bibliotek statycznych na iOS
Unity obsługuje artefakty *.framework
oraz pliki źródłowe *.h
i *.m
. Importuję
Artefakty iOS i pliki źródłowe zostały objaśnione w przewodniku Unity dotyczącym kreacji natywnych
.
Testowanie zdarzeń niestandardowych za pomocą inspektora reklam
Do testowania możesz używać inspektora reklam o prawidłowym zaimportowaniu zdarzeń niestandardowych do Twojej aplikacji. Reklama inspektora można otworzyć za pomocą gestów lub automatycznie, korzystając z minimalnej ilości kodu.
(Opcjonalnie) Wywołaj natywne metody pakietu SDK innej firmy za pomocą skryptów w C#
Pakiety SDK zewnętrznych sieci reklamowych mogą mieć specjalne wymagania, bezpośrednio przy wywoływaniu metod Androida lub iOS. Proces wywoływania tych metod są następujące:
- Zdefiniowanie wspólnego interfejsu dla klientów platformy
- Wdrażanie domyślnego klienta na nieobsługiwanych platformach
- Wdrażanie klienta na Androida do wywoływania metod Androida
- Implementacja klienta na iOS do wywoływania metod w iOS
- Wdrażanie klienta z fabryki na warunkowo Przełączanie się między klientami na iOS i Androida
- Zdefiniuj interfejs API umożliwiający dostęp do wszystkich funkcji pakietów SDK zewnętrznych sieci reklamowych
W następnej sekcji pokazujemy, jak te kroki zastosować w przypadku hipotetycznego sieć reklamowa o nazwie „AdPub” w interfejsie API C#, który może wywoływać metody w Androidzie oraz iOS:
Android
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
iOS
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
Zdefiniowanie wspólnego interfejsu dla klientów platformy
Utwórz interfejs IAdPubClient
za pomocą metody, która reprezentuje źródło
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óry
po prostu rejestruje nazwę metody. Używaj tej implementacji w edytorze Unity i wszystkich
na 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 platformy iOS
Utwórz klasę iOSAdPubClient
implementującą interfejs IAdPubClient
w
iOS. Ta implementacja wykorzystuje
InteropServices do połączenia
metody setHasUserConsent()
w klasie AdPubSdk
systemu 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 wdróż zdefiniowaną metodę GADUAdPubSetHasUserConsent()
powyżej. Tworzenie obiektu AdPubClientBridge.m
za pomocą metody C
GADUAdPubSetHasUserConsent()
do obsługi wywołania metody z Unity i wywoływania
AdPubSDK
.
AdPubClientBridge
to plik źródłowy iOS i musi zostać umieszczony w elemencie
Plugins/iOS
zgodnie z opisem w przewodniku Unity dotyczącym kreacji 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
w
na urządzeniu z Androidem. Ta implementacja korzysta z Asystenta w Javie dla Androida
zajęcia
aby wywołać metodę statyczną setHasUserConsent()
Androida.
Jako że klasy pomocnicze Androida w języku Java są dostępne tylko
w środowisku wykonawczym, możesz zapobiec błędom kompilacji, używając kompilatora UNITY_ANDROID
dyrektywa do zapakowania
zgodnie z tym, co pokazujemy we fragmencie kodu. Możesz też użyć narzędzia Assembly
definicje
w Unity 2017.4 i nowszych, 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 zwróci prawidłową implementację klienta
Teraz, gdy masz już wdrożenia klienta na każdej platformie, utwórz
AdPubClientFactory
do zwrócenia prawidłowej implementacji modelu
interfejsu IAdPubClient
w zależności od platformy środowiska wykonawczego. Te zajęcia korzystają z funkcji
kompilator
dyrektyw
zwraca odpowiedniego 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
zawierającą wywołania metod dla poszczególnych metod klienta w
interfejsu IAdPubClient
. Ta klasa używa: AdPubClientFactory
, aby uzyskać
wystąpienie IAdPubClient
i wywołuje tego klienta, aby pobrać bazowy pakiet SDK
funkcje.
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
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 adaptera zewnętrznej sieci reklamowej
Otwórz stronę GitHub z wtyczką do reklam mobilnych Google dla Unity repozytorium więcej przykładów zewnętrznych adapterów zapośredniczenia implementujących interfejsy API C#. , aby zawijać wywołania metod w iOS i Androidzie.