Z tego przewodnika dowiesz się, jak za pomocą dodatku do reklam natywnych wdrożyć w aplikacji Unity reklamy natywne AdMob, a także poznasz kilka ważnych kwestii, które warto wziąć pod uwagę.
Reklamy natywne odpowiadają zarówno formie, jak i funkcjom miejsca, w którym się wyświetlają. Są też dopasowane do wyglądu aplikacji, w której się znajdują. Format reklamy natywnej AdMob umożliwia wydawcom renderowanie reklam, które pasują wyglądem do treści. Możesz użyć tej technologii do wdrożenia renderowania niestandardowego, które w pełni wykorzystuje potencjał kodu natywnego w aplikacjach Unity.
Reklamy natywne są wyświetlane przy użyciu tych samych GameObjects
, za pomocą których tworzysz aplikacje, i można je formatować tak, aby pasowały do wyglądu interfejsu użytkownika, w którym się znajdują. Gdy reklama natywna się załaduje, aplikacja otrzyma obiekt natywny zawierający jej komponenty, a aplikacja Unity (zamiast pakietu SDK) wyświetli je.
Wymagania wstępne
- Wtyczka Unity do reklam mobilnych Google w wersji 7.0.0 lub nowszej.
- Zapoznaj się z przewodnikiem dla początkujących.
- Pobierz i zainstaluj dodatek do reklam natywnych.
Wczytywanie formatów reklam natywnych
Reklamy natywne są wczytywane za pomocą klasy AdLoader
, która ma własną klasę AdLoader.Builder
do dostosowywania podczas tworzenia. Metoda ForNativeAd()
konfiguruje obiekt AdLoader do obsługi reklam natywnych.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Rejestrowanie zdarzeń reklam AdLoadera
Aby otrzymywać powiadomienia o tym, czy reklama natywna została wczytana, czy nie, dodaj delegaty do klasy AdLoader
w przypadku wymienionych poniżej zdarzeń.
OnNativeAdLoaded
Wywoływane po prawidłowym wczytaniu reklamy natywnej. Aby uzyskać dostęp do wczytanej reklamy, musisz mieć delegata tego zdarzenia.
OnAdFailedToLoad
Wywoływane, gdy nie uda się wczytać reklamy natywnej.
Wczytaj reklamę
Po utworzeniu obiektu AdLoader
wywołaj jego metodę LoadAd()
, aby wysłać żądanie reklamy:
adLoader.LoadAd(new AdRequest.Builder().Build());
Przygotowywanie żądania reklamy
Poniższy fragment kodu pokazuje, jak utworzyć obiekt AdLoader
skonfigurowany do wysyłania żądań reklam natywnych, ustawić delegatów do obsługi udanych i nieudanych wczytań reklam oraz wysłać żądanie reklamy.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
Obsługa nieudanych wczytań reklam
Zdarzenie OnAdFailedToLoad
jest typu EventHandle<AdFailedToLoadEventArgs>
.
Poniżej pokazujemy, jak przeanalizować przyczynę niepowodzenia wczytania reklamy na podstawie tego zdarzenia.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Wyświetlanie reklamy natywnej
Gdy reklama natywna zostanie wczytana, wywoływane jest zdarzenie reklamy dla odpowiedniego formatu reklamy. Aplikacja jest wtedy odpowiedzialna za wyświetlanie reklamy, ale nie musi tego robić od razu.
Obsługa wczytywania reklam
Zdarzenie OnNativeAdLoaded
jest typu EventHandler<NativeAdEventArgs>
. Reklamę, umieszczoną w obiekcie NativeAd
, można pobrać z NativeAdEventArgs
w ten sposób:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Pobieranie komponentów reklam natywnych
Po wczytaniu reklam można uzyskać dostęp do ich komponentów w sposób pokazany poniżej. Zasoby graficzne są zwracane jako obiekty Texture2D
, a zasoby tekstowe – jako obiekty string
.
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
Pamiętaj, że do komponentów reklamy należy uzyskiwać dostęp tylko w głównym wątku, np. z poziomu metody Update()
skryptu Unity. Pamiętaj też, że te komponenty nie zawsze są dostępne i przed wyświetleniem należy je sprawdzić:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Komponent Informacja
Jest to wymagane, aby wyświetlać komponent reklamy Informacja w ramach reklamy natywnej. Ważne jest też, aby komponent reklamy Informacja był dobrze widoczny, dlatego należy odpowiednio dobrać kolory tła i obrazy.
Rejestrowanie obiektów GameObject w komponencie reklamy
Aby komponent reklamy był wyświetlany w aplikacji Unity, musisz zarejestrować GameObject
. Jeśli rejestracja się powiedzie, metoda użyta do zarejestrowania GameObject
zwróci wartość bool
. W przypadku List<GameObject>
metoda zwraca int
wskazujący liczbę zarejestrowanych GameObject
.
Jeśli rejestracja komponentu reklamy się nie powiedzie, wyświetlenia i kliknięcia powiązanej reklamy natywnej nie będą rozpoznawane.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
GameObject
zarejestrowany w przypadku komponentu reklamy musi mieć komponent Convex Collider, który odzwierciedla rozmiar i kształt GameObject
. Jeśli w GameObject
obiektach zarejestrowanych w komponentach do reklamCollider
brakuje komponentów lub są one nieprawidłowo skonfigurowane, reklamy natywne nie będą działać prawidłowo.
W poniższym fragmencie kodu do elementu GameObject
dodano element BoxCollider
, który używa elementu TextMesh
do wyświetlania komponentu reklamy w postaci nagłówka reklamy natywnej. Gdy BoxCollider
zostanie dołączony do GameObject
, automatycznie dostosuje się do tekstu komponentu TextMesh
.
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
Prezentacja
Poniższy kod pokazuje, jak pobrać komponent ikony z prawidłowo wczytanej reklamy natywnej, wyświetlić komponent reklamy z ikoną, ustawiając teksturę elementu Quad
, i zarejestrować element GameObject
, który będzie używany do wyświetlania komponentu. Ten proces pobierania komponentu reklamy i rejestrowania go w klasie reklamy natywnej należy powtórzyć w przypadku każdego komponentu wyświetlanego przez aplikację.
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}