В этом руководстве показано, как использовать надстройку для нативной рекламы, чтобы реализовать нативную рекламу AdMob в приложении Unity, а также некоторые важные моменты, которые следует учитывать при этом.
Нативная реклама соответствует как форме, так и функциям пользовательского опыта, в котором она размещена. Она также соответствует визуальному оформлению приложения, в котором находится. Формат нативной рекламы AdMob позволяет издателям визуализировать рекламу, органично сочетающуюся с контентом. Эту технологию можно использовать для реализации высоконастраиваемого рендеринга, который в полной мере использует возможности нативного кода в приложениях Unity.
Нативная реклама отображается с использованием тех же типов GameObjects
, с которыми вы уже работаете в своих приложениях, и может быть отформатирована в соответствии с визуальным дизайном пользовательского интерфейса. При загрузке нативной рекламы ваше приложение получает нативный объект, содержащий её ресурсы, и приложение Unity (а не SDK) отображает их.
Предпосылки
- Плагин Google Mobile Ads Unity версии 7.0.0 или выше.
- Заполните руководство по началу работы .
- Загрузите и установите дополнение для нативной рекламы.
Загрузить собственные форматы рекламы
Нативная реклама загружается через класс AdLoader
, который имеет собственный класс AdLoader.Builder
для настройки при создании. Метод ForNativeAd()
настраивает AdLoader для обработки нативной рекламы.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Зарегистрируйтесь на рекламные мероприятия AdLoader
Чтобы получать уведомления об успешной или неудачной загрузке нативной рекламы, добавьте делегаты в класс AdLoader
для событий, перечисленных ниже.
OnNativeAdLoaded
Вызывается при успешной загрузке нативной рекламы. Для доступа к загруженной рекламе этому событию требуется делегат.
OnAdFailedToLoad
Вызывается, когда не загружается нативная реклама.
Загрузить объявление
После завершения создания AdLoader
вызовите его метод LoadAd()
, чтобы запросить рекламу:
adLoader.LoadAd(new AdRequest.Builder().Build());
Составьте запрос на рекламу
В приведенном ниже фрагменте кода показано, как создать AdLoader
, настроенный на запрос нативной рекламы, устанавливает делегатов для успешной и неудачной загрузки рекламы и выполняет запрос рекламы.
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());
}
Обработка неудачных загрузок рекламы
Событие OnAdFailedToLoad
имеет тип EventHandle<AdFailedToLoadEventArgs>
. Ниже показан анализ причины сбоя загрузки рекламы в этом событии.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Показывать нативную рекламу
При загрузке нативной рекламы вызывается событие объявления соответствующего формата. После этого ваше приложение отвечает за отображение рекламы, хотя это не обязательно должно происходить немедленно.
Управление рекламной нагрузкой
Событие OnNativeAdLoaded
имеет тип EventHandler<NativeAdEventArgs>
. Рекламное объявление, инкапсулированное в объект NativeAd
, можно получить из NativeAdEventArgs
, как показано ниже:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Извлечь нативные рекламные ресурсы
После загрузки рекламы доступ к её ресурсам можно получить, как показано ниже. Графические ресурсы возвращаются как объекты Texture2D
, а текстовые ресурсы — как 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;
}
Обратите внимание, что доступ к рекламным ресурсам должен осуществляться только в основном потоке, например, из метода Update()
скрипта Unity. Также обратите внимание, что наличие следующих ресурсов не всегда гарантировано, и их следует проверять перед отображением:
-
GetStarRating()
-
GetStore()
-
GetPrice()
-
GetAdvertiser()
-
GetIconTexture()
Актив AdChoices
Рекламный объект AdChoices должен быть отображен как часть нативной рекламы. Кроме того, важно, чтобы рекламный объект AdChoices был хорошо виден, поэтому выбирайте соответствующие фоновые цвета и изображения.
Регистрация GameObjects для рекламного актива
Для отображения рекламного ресурса в приложении Unity необходимо зарегистрировать GameObject
. В случае успешной регистрации метод, используемый для регистрации GameObject
, возвращает значение bool
. Для List<GameObject>
метод возвращает значение int
, указывающее количество успешно зарегистрированных GameObject
.
Если регистрация рекламного актива не удалась, показы и клики по соответствующему нативному объявлению не будут распознаны.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
GameObject
, зарегистрированный для рекламного ресурса, должен иметь выпуклый компонент Collider, соответствующий размеру и форме GameObject
. Если у объектов GameObject
, зарегистрированных для рекламных ресурсов, отсутствуют компоненты Collider
или они настроены неправильно, нативная реклама не будет работать корректно.
В приведённом ниже фрагменте кода к GameObject
добавляется BoxCollider
, который использует TextMesh
для отображения заголовка нативной рекламы. После присоединения BoxCollider
к GameObject
он автоматически масштабируется в соответствии с текстом компонента 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>();
Демо
Следующий код демонстрирует, как получить ресурс значка успешно загруженной нативной рекламы, отобразить ресурс значка, задав текстуру Quad
, и зарегистрировать GameObject
для отображения ресурса. Этот процесс получения ресурса рекламы и его регистрации в классе нативной рекламы следует повторить для каждого ресурса, отображаемого приложением.
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;
}