Начать

В этом руководстве показано, как использовать дополнение native ads для внедрения нативной рекламы в приложение Unity, а также некоторые важные моменты, которые следует учитывать в процессе работы.

Нативная реклама соответствует как форме, так и функциональности пользовательского интерфейса, в котором она размещена. Она также гармонирует с визуальным дизайном приложения, в котором находится. Формат нативной рекламы Ad Manager позволяет издателям отображать рекламу, которая органично вписывается в контент. Вы можете использовать эту технологию для реализации высокоточных вариантов отображения, которые в полной мере используют возможности нативного кода в приложениях Unity.

Нативная реклама отображается с использованием тех же типов GameObjects , которые вы уже используете при разработке приложений, и может быть отформатирована в соответствии с визуальным дизайном пользовательского интерфейса, в котором она размещена. При загрузке нативной рекламы ваше приложение получает нативный объект, содержащий её ресурсы, и приложение Unity, а не SDK, отображает их.

Предварительные требования

Загрузка нативных рекламных форматов

Нативная реклама загружается через класс 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 был хорошо виден, поэтому выбирайте соответствующие цвета фона и изображения.

Зарегистрируйте игровые объекты для получения рекламных ресурсов.

Для отображения рекламного ресурса в вашем приложении 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;
}