Z tego przewodnika dowiesz się, jak za pomocą dodatku do reklam natywnych wdrożyć reklamy natywne AdMob w aplikacji Unity. Znajdziesz tu też kilka ważnych informacji, 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 projektu graficznego 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 wyświetlają się z użyciem tych samych typów GameObjects
, których używasz już do tworzenia aplikacji. Można je formatować tak, aby pasowały do wrażeń użytkownika w aplikacji, w której się znajdują. Gdy wczytuje się reklama natywna, Twoja aplikacja otrzymuje obiekt natywny zawierający jej komponenty, a aplikacja Unity (a nie pakiet SDK) wyświetla te komponenty.
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.
Ładowanie formatów reklam natywnych
Reklamy natywne są wczytywane za pomocą klasy AdLoader
, która ma własną klasę AdLoader.Builder
, umożliwiającą jej dostosowywanie podczas tworzenia. Metoda ForNativeAd()
konfiguruje AdLoader do obsługi reklam natywnych.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Rejestrowanie zdarzeń reklamowych AdLoader
Aby otrzymywać powiadomienia o załadowaniu lub niepowodzeniu się załadowania reklamy natywnej, dodaj delegowane funkcje do klasy AdLoader
dla wymienionych poniżej zdarzeń.
OnNativeAdLoaded
Wywoływane po pomyślnym załadowaniu reklamy natywnej. Aby uzyskać dostęp do wczytanej reklamy, musisz mieć delegowany dostęp do tego zdarzenia.
OnAdFailedToLoad
Wywoływane, gdy nie uda się załadować reklamy natywnej.
Wczytaj reklamę.
Po utworzeniu obiektu AdLoader
wywołaj metodę LoadAd()
, aby poprosić o reklamę:
adLoader.LoadAd(new AdRequest.Builder().Build());
Tworzenie żądania reklamy
Poniżej znajduje się fragment kodu, który pokazuje, jak utworzyć obiekt AdLoader
skonfigurowany do żądania reklam natywnych, ustawić delegowanie w przypadku 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 znajdziesz informacje o analizie przyczyny niepowodzenia wczytywania reklamy z 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 wczytuje się reklama natywna, wywoływane jest zdarzenie reklamy dla odpowiadającego jej formatu. Twoja aplikacja jest wtedy odpowiedzialna za wyświetlenie reklamy, ale nie musi robić tego natychmiast.
Obsługa liczby reklam na stronie
Zdarzenie OnNativeAdLoaded
jest typu EventHandler<NativeAdEventArgs>
. Dane zapakowane w obiekt 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, jak pokazano 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 komponenty reklamowe powinny być dostępne tylko w głównym wątku, np. z metody Update()
w skrypcie Unity. Pamiętaj też, że te zasoby nie zawsze muszą być obecne i należy je sprawdzić przed wyświetleniem:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Komponent AdChoices
Wymagane jest wyświetlanie komponentu reklamy AdChoices w ramach reklamy natywnej. Ważne jest też, aby komponent reklamy z informacją był dobrze widoczny, dlatego należy odpowiednio dobrać kolory tła i obrazy.
Rejestrowanie obiektów GameObjects w komponencie reklamy
Aby reklama wyświetlała się 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
, co wskazuje na liczbę pomyślnie zarejestrowanych GameObject
.
Jeśli rejestracja komponentu reklamy się nie powiedzie, wyświetlenia i kliknięcia na odpowiadającej jej reklamie natywnej nie będą rejestrowane.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
GameObject
zarejestrowany dla zasobu reklamy musi mieć wypukły komponent Collider, który odpowiada rozmiarowi i kształtowi GameObject
. Jeśli obiekty GameObject
zarejestrowane w komponentach reklamowych nie mają komponentów Collider
lub mają nieprawidłowo skonfigurowany komponent, reklamy natywne nie będą działać prawidłowo.
W tym fragmencie kodu do elementu GameObject
dodano element BoxCollider
, który używa elementu TextMesh
do wyświetlania komponentu reklamy z nagłówkiem w reklamie natywnej. Gdy element BoxCollider
zostanie dołączony do elementu GameObject
, zostanie automatycznie dopasowany do tekstu elementu 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ć zasób ikony z poprawnie załadowanej reklamy natywnej, wyświetlić zasób reklamy z ikoną, ustawiając teksturę Quad
, oraz zarejestrować GameObject
, aby wyświetlić zasób. 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;
}