Начало работы

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

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

Вызывается при успешной загрузке нативного объявления. Для этого события требуется делегат для доступа к загруженному объявлению.

Онадфаиледтолоад

Вызывается, когда нативное объявление не загружается.

Загрузите объявление

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

Зарегистрируйте GameObjects для рекламного ресурса

Вам необходимо зарегистрировать GameObject , чтобы рекламный ресурс отображался в вашем приложении Unity. Если регистрация прошла успешно, метод, используемый для регистрации GameObject возвращает bool . Для List<GameObject> метод возвращает целое int указывающее количество успешно зарегистрированных GameObject .

Если регистрация рекламного объекта не удалась, показы и клики по соответствующему нативному объявлению не будут распознаваться.

if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register the icon ad asset.
}

GameObject , зарегистрированный для рекламного ресурса, должен иметь выпуклый компонент коллайдера, который соответствует размеру и форме 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;
}