Даже самый альтруистичный разработчик игр порой хочет кушать и в решении этого вопроса ему может помочь наш новый
цикл, посвящённый монетизации.
А откроем мы его статьёй об одном из самых популярных вариантов получения дохода в free to play играх, а именно отображении видео рекламы.
Монетизация
Если посмотреть на возможности для монетизации вашей игры, то можно выделить несколько основных подходов:
Pay to play - взять денег за установку вашей игры
In app purchases - попросить денег за дополнительные услуги в виде внутриигровых покупок
In app Ads - показать рекламу
Bonus type - собрать данные пользователей и продать их кому-то за какие-то деньги, потом получить общественный иск за нарушение приватности, отчитаться перед сенаторами в конгрессе США и т.д. по отработанной схеме, но это уже совсем грязь какая-то =)
Суть рекламной модели
Схема довольно известна и проста, вы показываете в приложении рекламу(видео или баннер), а рекламная сеть, которая её предоставила, платит вам небольшую денежку за просмотры и чуть побольше, если реклама достигла цели и клиент по ней перешёл. По сути, это ничем не отличается от рекламы в интернете. Для понимания порядка цифр вы заработаете около пары долларов с тысячи показов этой самой рекламы(цифра взята по аналогии с рекламой на сайтах и отражает лишь порядок, этот блог не про маркетинг).
Рекламные сети
Существует довольно много поставщиков рекламы и интеграция любого из них будет представлять из себя примерно один и тот же процесс: настройку аккаунта и проекта в рекламной сети, встраивание sdk в текущий проект, встраивание рекламы в игровую логику.
Если это ваш первый проект или вы просто не задумывались об этой модели, то самым очевидным кандидатом из всех используемых сетей, конечно же, будет Unity Ads Network, не берусь судить о реальных результатах, которые вы можете получить с помощью данной рекламной сети, однако что может быть лучше для демонстрации встраивания рекламы, чем нативный экспириенс? =)
Добавить пакет интеграции с Unity Ads - этот пункт также может меняться со временем, так что тоже предоставлю официальную ссылку
Включить интеграцию с сервисом Unity Ads в проекте. Стоит отметить, что она может не включиться с первого раза и потребуется повторный клик на переключатель, будьте внимательны и проверьте, что всё включено
Создать класс для работы с рекламой - в своём последнем проекте я настраивал рекламу с помощью синглетона
usingSystem;usingUnityEngine;usingUnityEngine.Advertisements;usingUtils;namespaceManagers{publicclassKhtAdManager:KhtSingleton<KhtAdManager>,IUnityAdsListener{// Обработка окончания показа рекламы происходит через эвенты
publicstaticeventActionfinishAd=delegate{};// Id игры в Unity services
privatestaticstring_gameId="";// Существует 3 типа рекламы, rewardedVideo является одним из стандартных и не позволяет пропустить рекламу
// Более подробную информацию об остальных типах рекламы можно найти в документации
privatestaticstringmyPlacementId="rewardedVideo";// Используется для определения возможности показа рекламы
privatestaticbool_isAdAvailable=false;publicstaticboolIsAdAvailable=>_isAdAvailable;// Start is called before the first frame update
voidStart(){// Настройка синглетона
DontDestroyOnLoad(gameObject);// Настройка показа рекламы
Advertisement.AddListener(this);Advertisement.Initialize(_gameId);}// Показ рекламы
publicstaticvoidShowAd(){if(ReferenceEquals(Instance,null)){return;}Advertisement.Show(myPlacementId);}// Обработчик завершения загрузки рекламы
publicvoidOnUnityAdsReady(stringplacementId){Debug.Log("OnUnityAdsReady: "+placementId);_isAdAvailable=true;}publicvoidOnUnityAdsDidError(stringmessage){Debug.Log("OnUnityAdsDidError: "+message);}publicvoidOnUnityAdsDidStart(stringplacementId){Debug.Log("OnUnityAdsDidStart: "+placementId);}// Обработка завершения показа рекламы
publicvoidOnUnityAdsDidFinish(stringplacementId,ShowResultshowResult){// Define conditional logic for each ad completion status:
if(showResult==ShowResult.Finished){// Reward the user for watching the ad to completion.
}elseif(showResult==ShowResult.Skipped){// Do not reward the user for skipping the ad.
}elseif(showResult==ShowResult.Failed){Debug.LogWarning("The ad did not finish due to an error.");}finishAd();}privatenewvoidOnDestroy(){Advertisement.RemoveListener(this);base.OnDestroy();}}}
Тестовое использование
Естественно что при разработке и тестировании нельзя показывать рекламные ролики. Отнеситесь к включению данного режима очень серьёзно, а то рекламная сеть вас просто забанит. Тестовый режим можно включить с помощью нескольких вариантов:
Передать параметр на инициализации Advertisement.Initialize(string gameId, bool testMode)
Включить принудительный тестовый режим на странице проекта в Unity Dashboard при помощи Override client test mode - Force test mode ON (i.e. use test ads) for all devices
Включить тестовый режим в настройках сервисов проекта(работает только в редакторе)
Apple iOs 14
С выходом 14й версии iOs меняются правила взаимодействия пользователя с рекламными сообщениями, и если вы разрабатываете игру под эту платформу, то вам потребуется дополнительная настройка. Для разрешения этого вопроса Unity также подготовили для вас список необходимых шагов.
Подводные камни
Хотелось бы отметить несколько моментов, которые я периодически встречаю в других проектах:
Не забывайте заглушать музыку/звуки вашей игры во время показа рекламы, иначе вы получите звуковой хаос
Реклама не загружается моментально, так что если вы делаете ещё одну idle игру, то стоит обратить особое внимание на доступность рекламы сразу же после загрузки и как-то культурно взаимодействовать с пользователем, которому вы предложите удвоить afk бонус за просмотр ролика
Также есть вероятность, что у игрока нет интернета совсем(допустим, он играет в самолёте), так что необходимо предусмотреть и этот вариант, как минимум показывать сообщение об отсутствии доступной рекламы, а лучше обойти показ рекламы стороной
Заключение
Как всегда, сама по себе интеграция рекламы от Unity не представляет из себя какой-то сложной задачи, необходимо лишь последовательно выполнить шаги, описанные в их документации, а если вы захотите использовать какие-либо сторонние рекламные провайдеры, то они обычно следят за своей документацией ещё лучше. В результате доступность и эффективность этого способа монетизации делает его одним из основных двигателей free to play приложений, что не может не расстраивать меня как игрока, однако вы всегда можете проявить уважение к лояльным пользователям и вставить в вашу игру внутреннюю покупку, которая отключит отображение рекламы, а как это сделать мы рассмотрим в нашей следующей статье
цикла о монетизации, посвящённой внутренним покупкам в играх. Пока! =)