自适应横幅广告

自适应横幅广告的类型

Yandex Mobile Ads SDK 提供三种类型的自适应横幅广告:

横幅广告

描述

使用场景

粘性横幅广告

固定在屏幕边缘并显示在其他元素之上的横幅广告。此类横幅广告不受屏幕滚动影响。

如果您希望横幅广告保持“固定效果”,即保持位置不变,即使用户滚动浏览屏幕也始终显示在内容上方。

内嵌横幅广告

嵌入应用中(例如,嵌入内容或列表中)的横幅广告,如同用户界面元素一样呈现。

横幅广告应成为页面内容的一部分,例如出现在动态消息中、帖子之间或作为列表项显示。

固定横幅广告

固定在特定位置或适用于固定高度空间的横幅广告。

当您需要在静态位置投放横幅广告时,例如在工具栏下方或屏幕底部。

所有类型的横幅广告都会每隔 60 秒自动更新一次广告创意。

提示

要设置自定义自动更新周期,请联系您的专属经理。

从代码角度来看,这些横幅广告仅在尺寸设置方式上有所不同。例如:

BannerAdSize.StickySize(int width)
BannerAdSize.InlineSize(int width, int maxHeight)
BannerAdSize.Fixed(int width, int height)

备注

演示项目中提供了展示所有格式类型运作原理的示例。

实体

描述

BannerAdSize

横幅广告高度:

  • 不得超过屏幕高度的 15%。

  • 必须至少为 50 dp。

所有横幅广告尺寸必须以 dp 为单位指定。

adUnitIdAndroid / adUnitIdiOS

用途:

  • 开发模式,用于配合演示广告单元使用。

  • 生产模式,用于配合 R-M-XXXXXX-Y 使用(实际 ID 请在 Yandex Advertising Network 界面查询)。R-M-XXXXXX-Y 是您实际广告单元 ID 的模板,将用于接收各种广告创意。

自适应横幅广告创建示例

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
}

检查集成

创建并运行您的项目。您可以通过在 Android StudioLogcat 中搜索 YandexAds 关键字来检查集成是否成功:

[Integration] Ad type App Open was integrated successfully
上一篇