Адаптивный баннер
Виды адаптивных баннеров
В Yandex Mobile Ads SDK есть три вида адаптивных баннеров:
|
Баннер |
Описание |
Когда использовать |
|
Sticky |
Баннер-липучка, который примыкает к краю экрана и появляется поверх других элементов. Устойчивый к прокрутке. |
Когда баннер должен «приклеиться» и находиться поверх контента даже при прокрутке. |
|
Inline |
Баннер, который встраивается как элемент UI — в списки, контент и т. д. |
Когда баннер должен быть частью контента: в ленте новостей, между постами, как элемент списка. |
|
Fixed |
Используется для закрепленных баннеров или когда пространство определено по высоте. |
Когда нужно простое статичное размещение баннера — например, под тулбаром или снизу. |
Все виды автоматически обновляют креатив каждые 60 секунд.
Совет
Чтобы установить свой период для автообновления, обратитесь к персональному менеджеру.
Программно виды отличаются лишь тем, как задается их размер. Примеры:
BannerAdSize.StickySize(int width)
BannerAdSize.InlineSize(int width, int maxHeight)
BannerAdSize.Fixed(int width, int height)
Примечание
Пример работы всех типов форматов есть в демопроекте.
|
Сущность |
Описание |
|
|
Высота баннера должна:
Все размеры баннера должны передаваться строго в dp. |
|
|
Используйте:
|
Пример создания адаптивного баннера
using UnityEngine;
using UnityEngine.Events;
using YandexMobileAds;
using YandexMobileAds.Base;
using System;
[AddComponentMenu("Yandex Ads/Banner Component")]
public class BannerComponent : MonoBehaviour
{
public enum BannerType
{
Inline,
Sticky,
Fixed
}
[Header("Banner Settings")]
public string bannerName = "Default Banner";
public BannerType bannerType = BannerType.Inline;
[Header("Ad Unit IDs")]
[Tooltip("Ad Unit ID for Android")]
public string adUnitIdAndroid = "demo-banner-yandex";
[Tooltip("Ad Unit ID for iOS")]
public string adUnitIdiOS = "demo-banner-yandex";
[Header("Banner Configuration")]
public AdPosition bannerPosition = AdPosition.BottomCenter;
public bool useScreenWidth = false;
public int manualWidth = 320;
public int bannerHeight = 50;
public bool showAfterLoading = true;
private Banner banner;
[System.Serializable]
public class AdEvent : UnityEvent { }
[System.Serializable]
public class AdEventString : UnityEvent<string> { }
[System.Serializable]
public class AdEventWithBanner : UnityEvent<Banner> { }
[Header("Load Callbacks")]
public AdEventWithBanner OnAdLoaded;
public AdEventString OnAdFailedToLoad;
[Header("Interaction Callbacks")]
public AdEventWithBanner OnAdClicked;
public AdEventWithBanner OnLeftApplication;
public AdEventWithBanner OnReturnedToApplication;
public AdEventString OnImpression;
[Header("Configure Callbacks")]
public AdEventWithBanner OnAdConfigured;
public AdEventString OnAdConfigurationFailed;
private string currentAdUnitId
{
get
{
#if UNITY_IOS
return adUnitIdiOS;
#elif UNITY_ANDROID
return adUnitIdAndroid;
#else
Debug.LogWarning("Unsupported platform for Yandex Ads. Using IOS Ad Unit ID by default.");
return adUnitIdAndroid;
#endif
}
}
private void Start()
{
if (!string.IsNullOrEmpty(currentAdUnitId))
{
this.load();
}
else
{
Debug.LogError("Banner configuration failed. Ad Unit ID is missing.");
}
}
private void ConfigureBanner()
{
BannerAdSize adSize = bannerType == BannerType.Sticky
? BannerAdSize.StickySize(useScreenWidth ? ScreenUtils.ConvertPixelsToDp((int)Screen.safeArea.width) : manualWidth)
: BannerAdSize.InlineSize(useScreenWidth ? ScreenUtils.ConvertPixelsToDp((int)Screen.safeArea.width) : manualWidth, bannerHeight);
banner = new Banner(currentAdUnitId, adSize, bannerPosition);
banner.OnAdLoaded += HandleAdLoaded;
banner.OnAdFailedToLoad += HandleAdFailedToLoad;
banner.OnAdClicked += HandleAdClicked;
banner.OnLeftApplication += HandleLeftApplication;
banner.OnReturnedToApplication += HandleReturnedToApplication;
banner.OnImpression += HandleImpression;
}
private void load()
{
ConfigureBanner();
banner.LoadAd(new AdRequest.Builder().Build());
}
public void loadAd()
{
this.load();
}
public void OnDestroy()
{
banner.OnAdLoaded -= HandleAdLoaded;
banner.OnAdFailedToLoad -= HandleAdFailedToLoad;
banner.OnAdClicked -= HandleAdClicked;
banner.OnLeftApplication -= HandleLeftApplication;
banner.OnReturnedToApplication -= HandleReturnedToApplication;
banner.OnImpression -= HandleImpression;
banner.Destroy();
banner = null;
}
#region Event Handlers
private void HandleAdLoaded(object sender, EventArgs args)
{
OnAdLoaded?.Invoke(banner);
if (showAfterLoading)
{
banner.Show();
}
}
private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args) => OnAdFailedToLoad?.Invoke(args.Message);
private void HandleAdClicked(object sender, EventArgs args) => OnAdClicked?.Invoke(banner);
private void HandleLeftApplication(object sender, EventArgs args) => OnLeftApplication?.Invoke(banner);
private void HandleReturnedToApplication(object sender, EventArgs args) => OnReturnedToApplication?.Invoke(banner);
private void HandleImpression(object sender, ImpressionData impressionData) =>
OnImpression?.Invoke(impressionData?.rawData ?? string.Empty);
#endregion
}
Проверка интеграции
Соберите и запустите проект. Успешную интеграцию можно проверить в Logcat Android Studio по ключевому слову YandexAds:
[Integration] Ad type App Open was integrated successfully