Реклама с вознаграждением
Реклама с вознаграждением (Rewarded) — это полноэкранный рекламный формат, за просмотр которого пользователь получает бонус или награду (например: внутриигровые монеты, доступ к премиум-функциям, повтор попытки и т. д.).
Примечание
Пользователь принимает решение самостоятельно — смотреть рекламу или нет, а награду получает только в случае полного просмотра.
Примечание
Пример работы всех типов форматов есть в демопроекте.
|
Сущность |
Описание |
|
|
Используйте:
|
Пример создания рекламы с вознаграждением
using UnityEngine;
using UnityEngine.Events;
using YandexMobileAds;
using YandexMobileAds.Base;
using System.Collections.Generic;
using System;
[AddComponentMenu("Yandex Ads/Rewarded Ad Component")]
public class RewardedAdComponent : MonoBehaviour
{
[Header("Ad Settings")]
public string adName = "Default Rewarded Ad";
[Header("Ad Unit IDs")]
[Tooltip("Ad Unit ID for Android")]
public string adUnitIdAndroid = "demo-rewarded-yandex";
[Tooltip("Ad Unit ID for iOS")]
public string adUnitIdiOS = "demo-rewarded-yandex";
[Header("Configuration")]
public bool autoLoading = true;
public bool showAfterLoading = true;
private RewardedAd rewardedAd;
private RewardedAdLoader rewardedAdLoader;
[System.Serializable]
public class AdEvent : UnityEvent { }
[System.Serializable]
public class AdEventString : UnityEvent<string> { }
[System.Serializable]
public class AdEventWithAd : UnityEvent<RewardedAd> { }
[System.Serializable]
public class AdEventRewared : UnityEvent<Reward> { }
[Header("Load Callbacks")]
public AdEventWithAd OnAdLoaded;
public AdEventString OnAdFailedToLoad;
[Header("Interaction Callbacks")]
public AdEventWithAd OnAdShown;
public AdEventWithAd OnAdDismissed;
public AdEventWithAd OnAdClicked;
public AdEventString OnAdFailedToShow;
public AdEventString OnImpression;
public AdEventRewared OnRewarded;
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))
{
SetupLoader();
if (autoLoading)
{
ConfigureAd();
}
DontDestroyOnLoad(gameObject);
}
else
{
Debug.Log("RewardedAdComponent: Ad Unit ID is missing.");
}
}
private void SetupLoader()
{
rewardedAdLoader = new RewardedAdLoader();
rewardedAdLoader.OnAdLoaded += HandleAdLoaded;
rewardedAdLoader.OnAdFailedToLoad += HandleAdFailedToLoad;
}
private void ConfigureAd()
{
double lat = 60.0, lon = 30.0;
// Собираем объект Location
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
{
rewardedAdLoader.LoadAd(adRequestConfiguration);
}
catch (Exception ex)
{
Debug.LogError($"{adName}: Configuration failed: {ex.Message}");
}
}
public void Load()
{
ConfigureAd();
}
public void Show()
{
if (rewardedAd != null)
{
rewardedAd.Show();
}
else
{
Debug.Log("Failed to show ad. Ad object not loaded");
}
}
public void OnDestroy()
{
if (rewardedAd != null)
{
rewardedAd.OnAdShown -= HandleAdShown;
rewardedAd.OnAdDismissed -= HandleAdDismissed;
rewardedAd.OnAdClicked -= HandleAdClicked;
rewardedAd.OnAdFailedToShow -= HandleAdFailedToShow;
rewardedAd.OnAdImpression -= HandleImpression;
rewardedAd.OnRewarded-= HandleRewarded;
rewardedAd.Destroy();
rewardedAd = null;
}
if (rewardedAdLoader != null)
{
rewardedAdLoader.OnAdLoaded -= HandleAdLoaded;
rewardedAdLoader.OnAdFailedToLoad -= HandleAdFailedToLoad;
rewardedAdLoader = null;
}
}
#region Event Handlers
private void HandleAdLoaded(object sender, RewardedAdLoadedEventArgs args)
{
rewardedAd = args.RewardedAd;
rewardedAd.OnAdShown += HandleAdShown;
rewardedAd.OnAdDismissed += HandleAdDismissed;
rewardedAd.OnAdClicked += HandleAdClicked;
rewardedAd.OnAdFailedToShow += HandleAdFailedToShow;
rewardedAd.OnAdImpression += HandleImpression;
rewardedAd.OnRewarded += HandleRewarded;
OnAdLoaded?.Invoke(rewardedAd);
if (showAfterLoading)
{
rewardedAd.Show();
}
}
private void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) => OnAdFailedToLoad?.Invoke(args.Message);
private void HandleAdShown(object sender, EventArgs args) => OnAdShown?.Invoke(rewardedAd);
private void HandleAdDismissed(object sender, EventArgs args) => OnAdDismissed?.Invoke(rewardedAd);
private void HandleAdClicked(object sender, EventArgs args) => OnAdClicked?.Invoke(rewardedAd);
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 HandleRewarded(object sender, Reward args) => OnRewarded?.Invoke(args);
#endregion
}
Проверка интеграции
Соберите и запустите проект. Успешную интеграцию можно проверить в Logcat Android Studio по ключевому слову YandexAds:
[Integration] Ad type rewarded was integrated successfully