Добавление открытой рекламы приложения AdMob в приложение Unity

1. Введение

В этом практическом задании вы реализуете функцию открытия рекламы в приложении AdMob в Unity.

Что вы построите

В этом практическом занятии вы узнаете, как реализовать показ рекламы AdMob в приложении Unity с помощью плагина Google Mobile Ads для Unity.

6338548c3f73e7cf.gif

Если у вас возникнут какие-либо проблемы (ошибки в коде, грамматические неточности, неясные формулировки и т. д.) во время выполнения этого практического задания, сообщите о них, используя ссылку «Сообщить об ошибке» в левом нижнем углу задания.

Что вы узнаете

  • Как настроить плагин Google Mobile Ads Unity
  • Как реализовать всплывающую рекламу в приложении Unity

Что вам понадобится

  • Unity 2018.4 или более поздняя версия
  • Xcode 12 или более поздней версии и CocoaPods (для развертывания на iOS)

Как бы вы оценили свой уровень опыта работы с AdMob?

Новичок Средний Профессионал

2. Настройка среды разработки.

Скачать код

После загрузки ZIP-файла распакуйте его содержимое. У вас появится папка с именем admob-appopen-unity-main .

В качестве альтернативы вы можете клонировать репозиторий GitHub из командной строки:

$ git clone https://github.com/googlecodelabs/admob-appopen-unity

В репозитории находятся две папки:

  • android_studio_folder.png Задание: Начальный код, который вы будете создавать в этом практическом занятии.
  • android_studio_folder.png Завершено: Код для данной практической работы завершен.

3. Настройте приложение AdMob и рекламные блоки.

Поскольку Unity — это многоплатформенный SDK, вам необходимо добавить приложение и рекламные блоки как для Android, так и для iOS в AdMob.

Настройка для Android

Для настройки под Android необходимо добавить приложение Android и создать рекламные блоки.

Добавить приложение для Android

  1. В консоли AdMob нажмите кнопку «ДОБАВИТЬ ПРИЛОЖЕНИЕ» в меню «Приложения» .
  2. Выберите Android в качестве платформы. Когда появится вопрос «Указано ли приложение в поддерживаемом магазине приложений?» , нажмите «НЕТ» .
  3. В поле «Название приложения» введите AdMob app open ad .
  4. Включение пользовательских метрик не является обязательным для выполнения этого практического задания. Однако мы рекомендуем это сделать, поскольку это позволит вам более детально понять поведение пользователей. Нажмите ДОБАВИТЬ , чтобы завершить процесс.

Создайте рекламный блок

  1. Выберите приложение AdMob (Android) и откройте его в меню « Приложения» в консоли AdMob .
  2. Нажмите на меню «Рекламные блоки» .

  1. Нажмите «ДОБАВИТЬ РЕКЛАМНЫЙ БЛОК» .
  2. Выберите формат « Открыть приложение» .
  3. В поле «Название рекламного блока» введите android-appopen .
  4. Нажмите «СОЗДАТЬ РЕКЛАМНЫЙ БЛОК» , чтобы завершить процесс.

Обычно для показа нового рекламного блока требуется несколько часов.

Если вы хотите немедленно проверить работу рекламы, используйте идентификаторы тестового приложения и рекламного блока, указанные в таблицах идентификаторов приложений/рекламных блоков для Android и iOS.

Настройка для iOS

Для настройки под iOS необходимо добавить iOS-приложение и создать рекламные блоки.

Добавить приложение для iOS

  1. В консоли AdMob нажмите кнопку «ДОБАВИТЬ ПРИЛОЖЕНИЕ» в меню «Приложения» .
  2. Выберите iOS в качестве платформы. Когда появится вопрос «Указано ли приложение в поддерживаемом магазине приложений?» , нажмите «НЕТ» .
  3. В поле «Название приложения» введите AdMob app open ad .
  4. Включение пользовательских метрик не является обязательным для выполнения этого практического задания. Однако мы рекомендуем это сделать, поскольку это позволит вам более детально понять поведение пользователей. Нажмите ДОБАВИТЬ , чтобы завершить процесс.

Создайте рекламный блок

  1. В консоли AdMob выберите приложение AdMob inline ads (iOS) в меню « Приложения ».
  2. Нажмите на меню «Рекламные блоки» .

  1. Нажмите «ДОБАВИТЬ РЕКЛАМНЫЙ БЛОК» .
  2. Выберите формат « Открыть приложение» .
  3. В поле «Название рекламного блока» введите ios-appopen .
  4. Нажмите «СОЗДАТЬ РЕКЛАМНЫЙ БЛОК» , чтобы завершить процесс.

Обычно для показа нового рекламного блока требуется несколько часов.

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

Дополнительно: воспользуйтесь тестовым приложением AdMob и рекламными блоками.

Если вы хотите следовать инструкциям из практического руководства, вместо того чтобы создавать новое приложение и рекламные блоки самостоятельно, вы можете использовать идентификаторы тестового приложения AdMob и идентификаторы рекламных блоков, указанные в следующих таблицах.

Идентификатор приложения Android/идентификатор рекламного блока

Элемент

Идентификатор приложения/идентификатор рекламного блока

Идентификатор приложения AdMob

ca-app-pub-3940256099942544~3347511713

Идентификатор рекламного блока

ca-app-pub-3940256099942544/3419835294

Идентификатор приложения iOS/идентификатор рекламного блока

Элемент

Идентификатор приложения/идентификатор рекламного блока

Идентификатор приложения AdMob

ca-app-pub-3940256099942544~1458002511

Идентификатор рекламного блока

ca-app-pub-3940256099942544/5662855259

Для получения дополнительной информации о тестовой рекламе см. документацию для разработчиков по тестовой рекламе для Android и тестовой рекламе для iOS .

4. Добавьте плагин Google Mobile Ads Unity.

Интеграция плагина Google Mobile Ads Unity — это первый шаг к показу рекламы AdMob и получению дохода.

Скачайте плагин Mobile Ads Unity.

Плагин Google Mobile Ads для Unity позволяет разработчикам Unity легко показывать мобильную рекламу Google в приложениях для Android и iOS. Плагин предоставляет интерфейс C# для запроса рекламы, который используется скриптами C# в вашем проекте Unity.

Воспользуйтесь ссылкой ниже, чтобы загрузить пакет Unity для этого плагина.

Откройте стартовый проект

  1. Запустите Unity Hub.
  2. На вкладке «Проекты» нажмите кнопку «ДОБАВИТЬ» .
  3. Перейдите в папку, куда вы распаковали загруженный код на этапе настройки среды разработки.
  4. Откройте папку "Старт" .
  5. В списке проектов вы увидите стартовый проект. Щёлкните по проекту, чтобы открыть его в редакторе Unity.

Импортируйте плагин Mobile Ads Unity.

  1. В редакторе Unity выберите в меню Assets > Import Package > Custom Package .
  2. Выберите файл GoogleMobileAds-{VERSION}.unitypackage который вы скачали на предыдущем шаге.
  3. Убедитесь, что все файлы выбраны, и нажмите «Импорт» .

Укажите идентификатор вашего приложения AdMob.

  1. В редакторе Unity выберите в меню Assets > Google Mobile Ads > Settings .
  2. Введите идентификаторы вашего приложения AdMob для Android и iOS в каждое поле. Если вы хотите следовать инструкциям из руководства, а не создавать новое приложение и рекламные блоки самостоятельно, введите идентификатор тестового приложения AdMob следующим образом.

8890521e199b1090.png

5. Создайте вспомогательный класс.

Создайте новый класс с именем AppOpenAdManager в папке Scripts . Этот класс управляет переменной экземпляра для отслеживания загруженного объявления и идентификатора рекламного блока для каждой платформы.

AppOpenAdManager.cs

using System;
using GoogleMobileAds.Api;
using UnityEngine;

public class AppOpenAdManager
{
#if UNITY_ANDROID
    // Test ad unit ID: ca-app-pub-3940256099942544/3419835294
    private const string AD_UNIT_ID = "<YOUR_ANDROID_APPOPEN_AD_UNIT_ID>";
#elif UNITY_IOS
    // Test ad unit ID: ca-app-pub-3940256099942544/5662855259
    private const string AD_UNIT_ID = "<YOUR_IOS_APPOPEN_AD_UNIT_ID>";
#else
    private const string AD_UNIT_ID = "unexpected_platform";
#endif

    private static AppOpenAdManager instance;

    private AppOpenAd ad;

    private bool isShowingAd = false;

    public static AppOpenAdManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new AppOpenAdManager();
            }

            return instance;
        }
    }

    private bool IsAdAvailable
    {
        get
        {
            return ad != null;
        }
    }

    public void LoadAd()
    {
        // TODO: Load an app open ad.
    }
}

Загрузить рекламу

Загрузка рекламы осуществляется с помощью статического метода AppOpenAd.LoadAd() . Методу загрузки требуется идентификатор рекламного блока, режим ScreenOrientation , объект AdRequest и обработчик завершения, который вызывается при успешной или неудачной загрузке рекламы.

Загруженный объект AppOpenAd передается в качестве параметра в обработчик завершения. Реализуйте метод LoadAd() следующим образом.

AppOpenAdManager.cs

public class AppOpenAdManager
{
    ...

    public void LoadAd()
    {
        AdRequest request = new AdRequest.Builder().Build();

        // Load an app open ad for portrait orientation
        AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
        {
            if (error != null)
            {
                // Handle the error.
                Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
                return;
            }

            // App open ad is loaded.
            ad = appOpenAd;
        }));
    }
}

Показать рекламу

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

AppOpenAdManager.cs

public class AppOpenAdManager
{
    ...

    public void ShowAdIfAvailable()
    {
        if (!IsAdAvailable || isShowingAd)
        {
            return;
        }

        ad.OnAdDidDismissFullScreenContent += HandleAdDidDismissFullScreenContent;
        ad.OnAdFailedToPresentFullScreenContent += HandleAdFailedToPresentFullScreenContent;
        ad.OnAdDidPresentFullScreenContent += HandleAdDidPresentFullScreenContent;
        ad.OnAdDidRecordImpression += HandleAdDidRecordImpression;
        ad.OnPaidEvent += HandlePaidEvent;

        ad.Show();
    }

    private void HandleAdDidDismissFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Closed app open ad");
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        isShowingAd = false;
        LoadAd();
    }

    private void HandleAdFailedToPresentFullScreenContent(object sender, AdErrorEventArgs args)
    {
        Debug.LogFormat("Failed to present the ad (reason: {0})", args.AdError.GetMessage());
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        LoadAd();
    }

    private void HandleAdDidPresentFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Displayed app open ad");
        isShowingAd = true;
    }

    private void HandleAdDidRecordImpression(object sender, EventArgs args)
    {
        Debug.Log("Recorded ad impression");
    }

    private void HandlePaidEvent(object sender, AdValueEventArgs args)
    {
        Debug.LogFormat("Received paid event. (currency: {0}, value: {1}",
                args.AdValue.CurrencyCode, args.AdValue.Value);
    }
}

Учитывайте истечение срока действия рекламы.

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

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

AppOpenAdManager.cs

public class AppOpenAdManager
{
    ...

    // TODO: Add loadTime field
    private DateTime loadTime;

    private bool IsAdAvailable
    {
        get
        {
            // TODO: Consider ad expiration
            return ad != null && (System.DateTime.UtcNow - loadTime).TotalHours < 4;
        }
    }

    public void LoadAd()
    {
        if (IsAdAvailable)
        {
            return;
        }

        AdRequest request = new AdRequest.Builder().Build();
        AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
        {
            if (error != null)
            {
                Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
                return;
            }

            ad = appOpenAd;
            Debug.Log("App open ad loaded");

            // TODO: Keep track of time when the ad is loaded.
            loadTime = DateTime.UtcNow;
        }));
    }
}

6. Обновите сцену, чтобы загрузить/показать рекламу.

Обновите метод Start() в классе MainScene , чтобы при запуске сцены загружалась рекламная вставка с открытым приложением.

Для получения уведомлений о событиях, связанных с переходом приложения в активный режим, мы рекомендуем использовать синглтон AppStateEventNotifier. Реализовав делегат AppStateEventNotifier.AppStateChanged , ваше приложение будет получать оповещения о событиях запуска и перехода приложения в активный режим, и сможет показывать рекламу.

MainScene.cs

using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine;

public class MainScene : MonoBehaviour
{
    public void Start()
    {
        // TODO: Request an app open ad.
        MobileAds.Initialize((initStatus) =>
        {
            AppOpenAdManager.Instance.LoadAd();
            AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
        });
    }

    public void OnAppStateChanged(AppState state)
    {
        if (state == AppState.Foreground)
        {
            // TODO: Show an app open ad if available.
            AppOpenAdManager.Instance.ShowAdIfAvailable();
        }
    }
}

Вот и всё! Соберите и запустите проект на устройстве или эмуляторе. После запуска приложения подождите несколько секунд, пока полностью загрузится реклама.

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

6338548c3f73e7cf.gif

7. Всё готово!

Вы завершили выполнение задания в CodeLab. Полный код для этого задания можно найти в... android_studio_folder.png полная папка.