Объявления с вознаграждением

Объявления с вознаграждением — это объявления, с которыми пользователи могут взаимодействовать в обмен на вознаграждения в приложении. В этом руководстве показано, как интегрировать рекламу с вознаграждением из AdMob в приложение Unity. Прочтите несколько историй успеха клиентов: пример 1 , пример 2 .

Предпосылки

  • Плагин Unity 3.16.0 или выше.
  • Полное Начало работы . В ваше приложение Unity уже должен быть импортирован подключаемый модуль Google Mobile Ads Unity.

Создайте рекламный объект с вознаграждением

Объявления с вознаграждением запрашиваются и отображаются объектами RewardedAd . Первым шагом, необходимым для показа рекламы с вознаграждением, является создание экземпляра объекта RewardedAd путем вызова конструктора с идентификатором рекламного блока, который будет использоваться для загрузки рекламы. Это демонстрируется в следующем фрагменте кода:

Чтобы упростить интеграцию рекламы с помощью редактора Unity, попробуйте новую бета-версию рекламных мест .

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

Всегда тестируйте тестовые объявления

При создании и тестировании своих приложений убедитесь, что вы используете тестовую рекламу, а не живую производственную рекламу. Невыполнение этого требования может привести к приостановке действия вашей учетной записи.

Самый простой способ загрузить тестовые объявления — использовать наши специальные идентификаторы тестовых рекламных блоков для объявлений с вознаграждением для Android и iOS:

Андроид

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Они были специально настроены для возврата тестовых объявлений по каждому запросу, и вы можете свободно использовать их в своих собственных приложениях при написании кода, тестировании и отладке. Просто убедитесь, что вы заменили их собственным идентификатором рекламного блока, прежде чем публиковать свое приложение.

Дополнительные сведения о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .

Загрузить объявление

Чтобы загрузить рекламу с вознаграждением, вызовите метод loadAd() объекта RewardedAd . Этот метод требует экземпляр AdRequest в качестве аргумента.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

Рекламные события

Чтобы дополнительно настроить поведение вашего объявления, вы можете подключиться к ряду событий в жизненном цикле объявления: загрузка, открытие, закрытие и т. д. Прослушивайте эти события, регистрируя делегата для соответствующего обработчика событий. Самым важным событием является OnUserEarnedReward , которое вызывается, когда пользователь получает вознаграждение за просмотр видео. Вы также можете реализовать другие рекламные события, как показано ниже.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

Событие OnUserEarnedReward предоставляет специальные аргументы события. Он передает экземпляр Reward с Type и Amount , описывающими вознаграждение, данное пользователю:

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

Доступные рекламные события

OnAdLoaded
Вызывается после завершения загрузки объявления.
OnAdFailedToLoad
Вызывается, когда объявление не загружается. Свойство Message предоставленного AdErrorEventArgs описывает тип произошедшей ошибки.
OnAdOpening
Вызывается при отображении рекламы, закрывающей экран устройства. Это хорошее место, чтобы приостановить аудиовыход вашего приложения или игровой цикл, если это необходимо.
OnAdFailedToShow
Вызывается, когда объявление не отображается. Свойство Message предоставленного AdErrorEventArgs описывает тип произошедшей ошибки.
OnUserEarnedReward
Вызывается, когда пользователь должен быть вознагражден за просмотр видео. Параметр Reward описывает вознаграждение, которое будет предоставлено пользователю.
OnAdClosed
Вызывается, когда видеообъявление с вознаграждением закрывается из-за того, что пользователь нажимает значок закрытия или использует кнопку «Назад». Если ваше приложение приостановило вывод звука или игровой цикл, это отличное место, чтобы возобновить его.

Показать объявление

Прежде чем показывать пользователям рекламу с вознаграждением, им должен быть предоставлен явный выбор для просмотра содержания рекламы с вознаграждением в обмен на вознаграждение. Объявления с вознаграждением всегда должны предоставляться по подписке.

Чтобы показать рекламу с вознаграждением, проверьте метод IsLoaded() , чтобы убедиться, что загрузка завершена, а затем вызовите show() . Вот пример того, как это сделать:

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

Использование OnAdClosed для предварительной загрузки следующего объявления с вознаграждением

RewardedAd — это одноразовый объект. Это означает, что после показа объявления с вознаграждением объект нельзя использовать для загрузки другого объявления. Чтобы запросить другую рекламу с вознаграждением, вам нужно создать новый объект RewardedAd .

Лучшей практикой является загрузка другого объявления с вознаграждением в событии объявления OnAdClosed , чтобы следующее объявление с вознаграждением начинало загружаться сразу после закрытия предыдущего:

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

Загрузка нескольких объявлений с вознаграждением

Чтобы загрузить несколько объявлений с вознаграждением, выполните шаги, описанные в разделе « Создание объекта объявления с вознаграждением » и загрузите разделы объявлений для каждого объявления, которое вы собираетесь загрузить. Фрагмент кода ниже демонстрирует, как загрузить два объявления с вознаграждением для двух разных мест размещения.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

Образцы