开屏广告
开屏广告是一种特殊的广告格式,用于通过应用加载屏幕变现。
注意
该广告格式仅支持竖屏显示。若使用横屏模式,广告将无法正常展示。
备注
演示项目中提供了展示所有格式类型运作原理的示例。
|
实体 |
描述 |
|
|
用途:
|
开屏广告创建示例
using UnityEngine;
using UnityEngine.Events;
using YandexMobileAds;
using YandexMobileAds.Base;
using System.Collections.Generic;
using System;
[AddComponentMenu("Yandex Ads/App Open Ad Component")]
public class AppOpenAdComponent : MonoBehaviour
{
[Header("Ad Settings")]
public string adName = "Default App Open Ad";
[Header("Ad Unit IDs")]
[Tooltip("Ad Unit ID for Android")]
public string adUnitIdAndroid = "demo-appopenad-yandex";
[Tooltip("Ad Unit ID for iOS")]
public string adUnitIdiOS = "demo-appopenad-yandex";
[Header("Configuration")]
public bool autoLoading = true;
public bool showAfterLoading = true;
public bool showAppOpenAdOnce = true;
private AppOpenAd appOpenAd;
private AppOpenAdLoader appOpenAdLoader;
private bool isColdStartAdShown = false;
[System.Serializable]
public class AdEventWithAd : UnityEvent<AppOpenAd> { }
[System.Serializable]
public class AppStateChangedEvent : UnityEvent<AppStateChangedEventArgs, AppOpenAd> { }
[Header("Load Callbacks")]
public AdEventWithAd OnAdLoaded;
public UnityEvent<string> OnAdFailedToLoad;
[Header("Interaction Callbacks")]
public AdEventWithAd OnAdShown;
public AdEventWithAd OnAdDismissed;
public AdEventWithAd OnAdClicked;
public UnityEvent<string> OnAdFailedToShow;
public UnityEvent<string> OnImpression;
public AppStateChangedEvent OnAppStateChange;
private string CurrentAdUnitId
{
get
{
#if UNITY_IOS
return adUnitIdiOS;
#elif UNITY_ANDROID
return adUnitIdAndroid;
#else
Debug.LogWarning("Unsupported platform for Yandex Ads. Using Android Ad Unit ID by default.");
return adUnitIdAndroid;
#endif
}
}
private void Start()
{
if (!string.IsNullOrEmpty(CurrentAdUnitId))
{
AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
SetupLoader();
if (autoLoading)
{
Load();
}
DontDestroyOnLoad(gameObject);
}
else
{
Debug.Log("App open ad: Ad Unit ID is missing.");
}
}
private void SetupLoader()
{
appOpenAdLoader = new AppOpenAdLoader();
appOpenAdLoader.OnAdLoaded += HandleAdLoaded;
appOpenAdLoader.OnAdFailedToLoad += HandleAdFailedToLoad;
}
private void ConfigureAd()
{
double lat = 60.0, lon = 30.0;
// 构建位置对象
Location location = new Location.Builder()
.SetLatitude(lat)
.SetLongitude(lon)
.Build();
AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(CurrentAdUnitId)
.WithAge("25")
.WithGender("male") // 或 "female"、"other"
.WithContextTags(new List<string>() { "games", "unity", "test" })
.WithContextQuery("user_search_query") // 搜索查询字符串
.WithLocation(location)
.WithParameters(new Dictionary<string, string> {
{ "custom1", "value1" },
{ "custom2", "value2" }
}).Build();
try
{
appOpenAdLoader.LoadAd(adRequestConfiguration);
}
catch (Exception ex)
{
OnAdFailedToLoad?.Invoke($"Configuration failed: {ex.Message}");
}
}
public void Load()
{
var isBlcokedForLoad = showAppOpenAdOnce && isColdStartAdShown;
if (!isBlcokedForLoad)
{
ConfigureAd();
}
}
public void Show()
{
if (appOpenAd != null)
{
if (showAppOpenAdOnce)
{
if (!isColdStartAdShown)
{
appOpenAd.Show();
isColdStartAdShown = true;
}
}
else
{
appOpenAd.Show();
}
}
else
{
Debug.Log("Failed to show ad. Ad object not loaded");
}
}
public void OnDestroy()
{
AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
if (appOpenAd != null)
{
appOpenAd.OnAdShown -= HandleAdShown;
appOpenAd.OnAdDismissed -= HandleAdDismissed;
appOpenAd.OnAdClicked -= HandleAdClicked;
appOpenAd.OnAdFailedToShow -= HandleAdFailedToShow;
appOpenAd.OnAdImpression -= HandleImpression;
appOpenAd.Destroy();
appOpenAd = null;
}
}
#region Event Handlers
private void HandleAdLoaded(object sender, AppOpenAdLoadedEventArgs args)
{
appOpenAd = args.AppOpenAd;
appOpenAd.OnAdShown += HandleAdShown;
appOpenAd.OnAdDismissed += HandleAdDismissed;
appOpenAd.OnAdClicked += HandleAdClicked;
appOpenAd.OnAdFailedToShow += HandleAdFailedToShow;
appOpenAd.OnAdImpression += HandleImpression;
OnAdLoaded?.Invoke(appOpenAd);
if (showAfterLoading)
{
if (showAppOpenAdOnce)
{
if (!isColdStartAdShown)
{
appOpenAd.Show();
isColdStartAdShown = true;
}
}
else
{
appOpenAd.Show();
}
}
}
private void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) => OnAdFailedToLoad?.Invoke(args.Message);
private void HandleAdShown(object sender, EventArgs args) => OnAdShown?.Invoke(appOpenAd);
private void HandleAdDismissed(object sender, EventArgs args) => OnAdDismissed?.Invoke(appOpenAd);
private void HandleAdClicked(object sender, EventArgs args) => OnAdClicked?.Invoke(appOpenAd);
private void HandleAdFailedToShow(object sender, AdFailureEventArgs args) => OnAdFailedToShow?.Invoke(args.Message);
private void HandleImpression(object sender, ImpressionData impressionData) => OnImpression?.Invoke(impressionData?.rawData ?? string.Empty);
private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args) => OnAppStateChange?.Invoke(args, appOpenAd);
#endregion
}
检查集成
创建并运行您的项目。您可以通过在 Android Studio 的 Logcat 中搜索 YandexAds 关键字来检查集成是否成功:
[Integration] Ad type App Open was integrated successfully
这篇文章是否有用?
下一篇