Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Подключаем Yandex рекламу для Яндекс Игр на Unity

Приветствую! В последнее время всё больше разработчиков Unity интересуются подключением Яндекс рекламы к своим играм, для дальнейшей их публикации на площадке Яндекс Игр. И вопрос действительно очень серьёзный, ведь подключение Яндекс рекламы работает на языке JavaScript, а Unity использует язык C#. А в оффициальной документации от Яндекс, не рассказывают как решит данную проблему.

В данной статье мы научимся подключать к своей игре рекламу от Yandex, для дальнейшей загрузки её на Яндекс Игры. Площадка Яндекс Игр предоставляет 3 вида рекламы для браузерных игр:

  • Fullscreen - обычная стандартная реклама.
  • Rewarded - реклама без возможности пропуска. Обычно за просмотр такой рекламы игрок получает какой-нибудь игровой бонус.
  • Sticky баннеры - это рекламные баннера, которое всегда отображаются по правую сторону от вашей игры.

Рекламы Fullscreen и Rewarded встраиваются в игру в одинаково, поэтому разберём их вместе. А про стик-баннеры мы поговорим в самом конце данной статьи.

Реклама: Fullscreen и Rewarded

Файл-посредник: .jslib

Первым делом нам необходимо создать файл-посредник, с помощью которого можно из скриптов C# вызывать методы JavaScript. И наоборот, из JavaScript можно вызывать методы C#.

Для этого в окне Project создадим папку с названием Plugins. И внутри этой папки создадим файл с названием yandex.jslib. В результате в окне Project у вас данный файл будет иметь вид пазла.

В этом файле у нас будут находится JavaScript методы предоставляемые Яндексом, для открытия Яндекс рекламы типов Fullscreen и Rewarded. Откройте этот файл через любой тектовый редактор, и впишите в него следующий код:

mergeInto(LibraryManager.library, {

  ShowFullscreen: function () {
      ysdk.adv.showFullscreenAdv({
      callbacks: {
          onOpen: function(wasShown) {
            console.log('Реклама Fullscreen открылась.');
          },
          onClose: function(wasShown) {
            console.log("Реклама Fullscreen закрылась.");
          },
          onError: function(error) {
            console.log("Ошибка по рекламе Fullscreen.");
          }
      }
      })
  },

  ShowRewarded: function () {
      ysdk.adv.showRewardedVideo({
      callbacks: {
          onOpen: () => {
            console.log('Реклама Rewarded открылась.');
          },
          onRewarded: () => {
            console.log('Реклама Rewarded просмотрена, и производим награду игроку за просмотр.');
            myGameInstance.SendMessage("StartAds", "AdsCoints");
          },
          onClose: () => {
            console.log('Реклама Rewarded закрылась.');
          }, 
          onError: (e) => {
            console.log('Ошибка по рекламе Rewarded:', e);
          }
      }
  })
  },

});

Обратите внимание, что в данном файле мы используем код не C# а JavaScript, поэтому, в самой программе Unity мы не сможем протестировать работоспособность этого кода. А все консольные уведомления будут отображаться при запуске готовой игры в консоле браузера.

Данный JavaScript код имеет два метода для вызова рекламы, которые мы чуть позже будем вызывать с помощью скрипта C#. Давайте вкратце разберём код:

  • В строке #3 имеется метод ShowFullscreen, который вызывает рекламу типа Fullscreen. Внутри этого метода есть три калбэк функции, которые срабатывают в те моменты, когда реклама была открыта, закрыта, или когда произошла ошибка вызова рекламы. Мы эти уведомления увидим в консоле самой игры, но не в консоле Unity!
  • В строке #16 имеется метод ShowRewarded, который вызывает рекламу типа Rewarded. Внутри её так же есть несколько калбэк функций, которые так же отправляют различные уведомления в консоль.

Вызов C# методов из JavaScript

Разберая предыдущий код, можно обратить внимание, что внутри одной из калбэк функций мы используем метод SendMessage(), который и позволяет вызывать методы C# из файла yandex.jslib. Забегая наперёд скажу, что вторым аргументом этой функции мы указали название C# метода AdsCoints(), который и будет добавлять различные бонусы нашему игроку - его мы напишем чуть позже. А первым аргументом мы указали название объекта StartAds, у которого имеется этот метод - его мы так же создадим чуть позже.

ВАЖНО: Объект StartAds в окне Hierarchy не должен иметь никаких родителей, то-есть он не должен быть вложен внутрь какого-либо другого объекта.

Так же обратите внимание, что метод SendMessage() вызывается у объекта myGameInstance. Но пока этот объект не создан. Чуть позже мы его создадим.

Вызов JavaScript методов из C#

Вызывать методы C# из JavaScript при помощи метода SendMessage() мы научились. Теперь научимся наоборот, вызывать методы JavaScript из скрипта C#, ведь нам как-то нужно запускать рекламные JavaScript методы ShowFullscreen и ShowRewarded.

Для этого с помощью окна Hierarchy создайте пустой объект, с названием StartAds, и создайте для него C# скрипт с названием AdsYandex. Впишите в данный скрипт следующий код:

using UnityEngine;
using System.Runtime.InteropServices;

public class AdsYandex : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void ShowFullscreen();

    [DllImport("__Internal")]
    private static extern void ShowRewarded();

    public void Show1()
    {
        ShowFullscreen();
    }

    public void Show2()
    {
        ShowRewarded();
    }

    public void AdsCoints()
    {
        // выдаём бонусы пользователю за просмотр рекламы
    }
}

Вкратце разберём код:

  • В строке #2 мы подключили специальную библиотеку, которая позволит работать с внешними JavaScript методами.
  • В строках #6-10 мы указали, что существуют внешние JavaScript методы ShowFullscreen() и ShowRewarded(), которые теперь можно вызывать в C# скриптах. Обратите внимание, что у данных методов стоят права доступа private, из-за чего в некоторых случаях становится невозможным их вызвать напрямую. Поэтому мы создали дополнительные методы Show1() и Show2(), через которые и будут вызываться рекламные методы.
  • В строке #22 мы создали метод AdsCoints(), который вызовется после того, как реклама типа Rewarded будет просмотрена. В данной функции вы сами впишите те бонусы, которые хотите выдать игроку за просмотр рекламы.

Отлично, на этом этапе всё готово! Например, если мы захотим вызвать рекламу типа Rewarded, то:

  • Запускаем метод Show2, который в свою очередь запустит JavaScript метод ShowRewarded() из файла yandex.jslib.
  • После просмотра рекламы, запускается калбэк функция, которая с помощью метода SendMessage() запустит C# метод AdsCoints(), который в свою очередь добавит игроку бонусы.

Подключение SDK

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

Давайте первым делом подключим SDK. Для этого нам понадобится самый последний файл, index.html. Откройте его с помощью любого текстового редактора. Нам необходимо найти закрывающий тег </head>, который находится почти в самом начале файла, и перед ним вставить следующую строку:

<script src="https://yandex.ru/games/sdk/v2"></script>

Получится примерно так:

SDK подключен, теперь его необходимо инициализировать. Для этого в этом же файле ищем открывающий тег <script>, который находится примерно в строке #27, и после него вставляем следующий код:

YaGames.init().then(ysdk => {
    console.log('Яндекс SDK инициализирован');
    window.ysdk = ysdk;
});

Должно получится примерно так:

На этом подключение и инициализация SDK завершена. Но не забывайте, что нам ещё нужно создать переменную myGameInstance для того, чтобы метод SendMessage(), который мы ранее использовали, работал. А так же присвоить данной переменной всю нашу игру. Не волнуйтесь, звучит страшно, но делается это одной строкой кода.

Почти в самом конце файла, находим эту строку:

var script = document.createElement("script");

И над ней прописываем это.

var myGameInstance = null;

Далее находим эту строку.

}).then((unityInstance) => {

И под ней прописываем это.

myGameInstance = unityInstance;

В результате после этих двух манипуляций, получаем примерно такую картину.

Поздравляем, всю работу с файлом index.html проделали, и теперь наша реклама будет работать!

Шаблоны

Возможно не очень круто, когда после каждого билда нам необходимо открывать файл index.html и каждый раз делать в нём одинаковые правки. Хотелось бы, чтобы все эти правки вносились в этот файл автоматически. И о том как это сделать, можете просмотреть коротенькую статейку на тему: Создаём и редактируем WebGL шаблон.

Реклама: Sticky баннеры

Sticky баннеры в отличии от двух предыдущих видов реклам, создаются очень быстро, так как они устанавливаются не с помощью кодов, прописываемых в Unity, а через черновик вашей игры на сайте Яндекса. Стоит лишь поставить галочку, и включить(если надо) для альбомной и портретной ориентации.

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

Завершение

В завершении хотелось бы отметить ещё одну важную вещь. Дело в том, если вы захотите загрузить свою игру на Яндекс Игры, чтобы протестировать работоспособность рекламы, то у вас вероятнее всего ничего работать не будет. А всё по той причине, что яндексу необходимо создать для вашей игры монетизацию. Она это делает автоматически, только для этого вам необходимо заполнить ВСЕ поля вашего черновика, после чего подождать 1-3 часа. Только после этого ваши рекламные баннера начнут открываться и работать.

А на этом всё. Если остались вопросы по данной теме, задавайте их в комментариях, а так же буду рад вашей поддержке :)

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

1
makarjedi 1 год назад

А как реализовывать сохранение черeз SDK Yandex?

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь