自适应横幅广告
自适应横幅广告的类型
Yandex Mobile Ads SDK 提供三种类型的自适应横幅广告:
|
横幅广告 |
描述 |
使用场景 |
|
粘性横幅广告 |
固定在屏幕边缘并显示在其他元素之上的横幅广告。此类横幅广告不受屏幕滚动影响。 |
如果您希望横幅广告保持“固定效果”,即保持位置不变,即使用户滚动浏览屏幕也始终显示在内容上方。 |
|
内嵌横幅广告 |
嵌入应用中(例如,嵌入内容或列表中)的横幅广告,如同用户界面元素一样呈现。 |
横幅广告应成为页面内容的一部分,例如出现在动态消息中、帖子之间或作为列表项显示。 |
|
固定横幅广告 |
固定在特定位置或适用于固定高度空间的横幅广告。 |
当您需要在静态位置投放横幅广告时,例如在工具栏下方或屏幕底部。 |
所有类型的横幅广告都会每隔 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
}
检查集成
创建并运行您的项目。您可以通过在 Android Studio 的 Logcat 中搜索 YandexAds 关键字来检查集成是否成功:
[Integration] Ad type App Open was integrated successfully