Начать

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

Как зарегистрировать объекты GameObject для объекта объявления

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

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

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

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