Начать

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

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

Регистрация 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 или они неправильно настроены, нативные объявления не будут работать корректно.

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