Предположим, что однажды вы решили создать приложение для детей и попробовать на этом заработать. Так как реклама — один из самых простых способов монетизации, то у вас возникает очевидная идея добавить в приложение одно из рекламных SDK и дальше только подсчитывать доход. Все могло быть именно так, если бы приложение было направлено на взрослую аудиторию. Если же оно предназначено для использования несовершеннолетними, то включаются разнообразные законодательные механизмы, которым подчиняются магазины приложений.
При публикации приложения ivi kids в Google Play мы столкнулись с проблемой, что наше внутреннее рекламное SDK не соответствовало требованиям Google, и приложение могло быть удалено из магазина. Поэтому мы отключили всю рекламу, чему очень обрадовались юные пользователи, но департамент маркетинга был хронически недоволен финансовыми показателями.
Наиболее логичным выходом из ситуации оказалось проигрывать рекламу, которую раздает сам Google с помощью сервиса Google Ad Manager. И делать это с использованием IMA SDK, которое также является продуктом Google.
В этой статье я расскажу о том, как мы внедряли IMA SDK в приложениях ivi и ivi kids и с какими ограничениями столкнулись.
![](https://habrastorage.org/r/w1560/webt/qt/fe/ow/qtfeowuyayeab9sgzmwnwo3iu-m.png)
Не буду описывать все возможности и структуру IMA SDK, так как в любом случае официальная документация сможет сказать о них гораздо больше.
В чем главная фишка IMA SDK? И почему нам оно подошло? IMA SDK умеет проигрывать видео-рекламу формата VAST. Одной из возможностей этого формата является создание вложенных врапперов рекламных роликов, причем количество врапперов формально может быть бесконечным. То есть чтобы добраться до реального ролика, нужно пробежать все врапперы в цепочке.
![](https://habrastorage.org/r/w1560/webt/tz/mj/yz/tzmjyzevdgjaccvstxubfqvttdi.png)
IMA SDK умеет пробегать эту цепочку самостоятельно, если в нее просто вставить ссылку на первый VAST-файл с помощью метода setAdTagUrl(String url).
Если воспользоваться этим методом, то задача разработчика существенно упрощается. Но иногда (в том числе в нашем случае) компания-разработчик приложения хочет собирать свою рекламную статистику, содержащуюся в самих VAST-файлах. Данные файлы нельзя запрашивать у рекламного сервера больше одного раза, так как на один и тот же запрос рекламный сервер может прислать два разных ответа (это норм, реклама должна постоянно меняться). В этом случае разработчику надо собрать все VAST-ы ручками, выцепить оттуда необходимые для сбора статистики данные и на их основе сгенерировать общий VAST, который можно скормить IMA SDK c помощью метода setAdsResponce(String vast):
Еще одной полезной фишкой IMA SDK является возможность использовать внутренний плеер приложения для проигрывания рекламы. Для этого можно имплементировать интерфейс VideoAdPlayer и реализовать его методы в своем плеере:
Но даже если в приложении нет своего видео-плеера или его по каким-то причинам нельзя использовать, то IMA SDK предоставляет собственный плеер, созданный на основе ExoPlayer:
К сожалению, с UI у IMA SDK все печально. Будьте готовы, что ваш рекламный плеер всегда будет выглядеть следующим образом:
![](https://habrastorage.org/r/w1560/webt/cc/c7/8s/ccc78s4jxffs5z0efuubkp9gfcq.png)
Изменить никакие контролы на экране рекламы от IMA SDK невозможно. Можно только поменять их язык:
![](https://habrastorage.org/r/w1560/webt/9q/p9/tc/9qp9tc1nxuhhr-aejbncso3d37a.png)
Наша ситуация была отягощена еще и тем, что ivi и ivi kids существуют и поддерживаются на единой кодовой базе. Это означает, что с помощью скриптов сборки в необходимый момент из одного кода можно собрать разные приложения со своими наворотами (иконки, строки, куски кода). В этой единой кодовой базе для проигрывания рекламы используется движок собственной разработки, который является проверенным инструментом, зарабатывающим деньги компании. При внедрении IMA SDK этот код нельзя было просто выкинуть, так как в приложении используются различные форматы рекламы, а не только VAST.
Рекламный интерфейс ivi выглядит совершенно отличным от интерфейса IMA SDK и не может быть адаптирован к нему:
![](https://habrastorage.org/r/w1560/webt/ve/-t/k-/ve-tk-kln_bts7ocigog9owom6e.png)
Поэтому наиболее очевидным выглядело решение оставить наш рекламный движок (НРД) и параллельно ему внедрять IMA SDK, чтобы при приходе рекламы, которая содержит в себе ссылки на сервера Google, использовать IMA, а при всей остальной рекламе — НРД, который также умеет проигрывать рекламу формата VAST и пробегать по всей цепочке врапперов, но не соответствует стандартам семейной политики Google.
![](https://habrastorage.org/r/w1560/webt/tq/u-/t1/tqu-t1onj3-7ksbldotspp6fig8.png)
На данный момент реклама от Google и реклама от других источников в приложении ivi отображаются разными способами. В приложении для детей ivi kids старгетирована только реклама от Google, поэтому там ролики отображаются только с помощью IMA SDK.
IMA SDK — простой и удобный инструмент показа видео-рекламы. Если вы готовы к тому, что UI рекламного плеера не будет зависеть от вас, то IMA SDK вам вполне подходит. Если вам надо монетизировать с помощью рекламы Android-приложение для детей, то проще всего использовать нативный инструмент от Google — IMA SDK.
При публикации приложения ivi kids в Google Play мы столкнулись с проблемой, что наше внутреннее рекламное SDK не соответствовало требованиям Google, и приложение могло быть удалено из магазина. Поэтому мы отключили всю рекламу, чему очень обрадовались юные пользователи, но департамент маркетинга был хронически недоволен финансовыми показателями.
Наиболее логичным выходом из ситуации оказалось проигрывать рекламу, которую раздает сам Google с помощью сервиса Google Ad Manager. И делать это с использованием IMA SDK, которое также является продуктом Google.
В этой статье я расскажу о том, как мы внедряли IMA SDK в приложениях ivi и ivi kids и с какими ограничениями столкнулись.
![](https://habrastorage.org/webt/qt/fe/ow/qtfeowuyayeab9sgzmwnwo3iu-m.png)
Фишки IMA SDK
Не буду описывать все возможности и структуру IMA SDK, так как в любом случае официальная документация сможет сказать о них гораздо больше.
В чем главная фишка IMA SDK? И почему нам оно подошло? IMA SDK умеет проигрывать видео-рекламу формата VAST. Одной из возможностей этого формата является создание вложенных врапперов рекламных роликов, причем количество врапперов формально может быть бесконечным. То есть чтобы добраться до реального ролика, нужно пробежать все врапперы в цепочке.
![](https://habrastorage.org/webt/tz/mj/yz/tzmjyzevdgjaccvstxubfqvttdi.png)
IMA SDK умеет пробегать эту цепочку самостоятельно, если в нее просто вставить ссылку на первый VAST-файл с помощью метода setAdTagUrl(String url).
val adsRequest = ImaSdkFactory.getInstance().createAdsRequest()
adsRequest.adTagUrl = advUrl
Если воспользоваться этим методом, то задача разработчика существенно упрощается. Но иногда (в том числе в нашем случае) компания-разработчик приложения хочет собирать свою рекламную статистику, содержащуюся в самих VAST-файлах. Данные файлы нельзя запрашивать у рекламного сервера больше одного раза, так как на один и тот же запрос рекламный сервер может прислать два разных ответа (это норм, реклама должна постоянно меняться). В этом случае разработчику надо собрать все VAST-ы ручками, выцепить оттуда необходимые для сбора статистики данные и на их основе сгенерировать общий VAST, который можно скормить IMA SDK c помощью метода setAdsResponce(String vast):
val adsResponce = “<VAST>..</VAST>” //xml, соответствующий стандарту VAST
adsRequest.adsResponse = adsResponce
Еще одной полезной фишкой IMA SDK является возможность использовать внутренний плеер приложения для проигрывания рекламы. Для этого можно имплементировать интерфейс VideoAdPlayer и реализовать его методы в своем плеере:
public interface VideoAdPlayer extends AdProgressProvider, VolumeProvider {
void loadAd(AdMediaInfo var1, AdPodInfo var2);
void playAd(AdMediaInfo var1);
void pauseAd(AdMediaInfo var1);
void stopAd(AdMediaInfo var1);
void release();
void addCallback(VideoAdPlayer.VideoAdPlayerCallback var1);
void removeCallback(VideoAdPlayer.VideoAdPlayerCallback var1);
}
Но даже если в приложении нет своего видео-плеера или его по каким-то причинам нельзя использовать, то IMA SDK предоставляет собственный плеер, созданный на основе ExoPlayer:
val adUiContainer: ViewGroup = view
val videoAdPlayer = ImaSdkFactory.createSdkOwnedPlayer(context, adUiContainer)
Ограничения IMA SDK
К сожалению, с UI у IMA SDK все печально. Будьте готовы, что ваш рекламный плеер всегда будет выглядеть следующим образом:
![](https://habrastorage.org/webt/cc/c7/8s/ccc78s4jxffs5z0efuubkp9gfcq.png)
Изменить никакие контролы на экране рекламы от IMA SDK невозможно. Можно только поменять их язык:
val imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings()
imaSdkSettings.language = "ru"
![](https://habrastorage.org/webt/9q/p9/tc/9qp9tc1nxuhhr-aejbncso3d37a.png)
Наша ситуация была отягощена еще и тем, что ivi и ivi kids существуют и поддерживаются на единой кодовой базе. Это означает, что с помощью скриптов сборки в необходимый момент из одного кода можно собрать разные приложения со своими наворотами (иконки, строки, куски кода). В этой единой кодовой базе для проигрывания рекламы используется движок собственной разработки, который является проверенным инструментом, зарабатывающим деньги компании. При внедрении IMA SDK этот код нельзя было просто выкинуть, так как в приложении используются различные форматы рекламы, а не только VAST.
Рекламный интерфейс ivi выглядит совершенно отличным от интерфейса IMA SDK и не может быть адаптирован к нему:
![](https://habrastorage.org/webt/ve/-t/k-/ve-tk-kln_bts7ocigog9owom6e.png)
Поэтому наиболее очевидным выглядело решение оставить наш рекламный движок (НРД) и параллельно ему внедрять IMA SDK, чтобы при приходе рекламы, которая содержит в себе ссылки на сервера Google, использовать IMA, а при всей остальной рекламе — НРД, который также умеет проигрывать рекламу формата VAST и пробегать по всей цепочке врапперов, но не соответствует стандартам семейной политики Google.
![](https://habrastorage.org/webt/tq/u-/t1/tqu-t1onj3-7ksbldotspp6fig8.png)
На данный момент реклама от Google и реклама от других источников в приложении ivi отображаются разными способами. В приложении для детей ivi kids старгетирована только реклама от Google, поэтому там ролики отображаются только с помощью IMA SDK.
Итоги
IMA SDK — простой и удобный инструмент показа видео-рекламы. Если вы готовы к тому, что UI рекламного плеера не будет зависеть от вас, то IMA SDK вам вполне подходит. Если вам надо монетизировать с помощью рекламы Android-приложение для детей, то проще всего использовать нативный инструмент от Google — IMA SDK.