Начать

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