Начало работы с Vungle SDK — Android или Amazon SDK v. 5

Используйте эту статью для интеграции Vungle SDK для Android или Amazon. Начиная с версии v.5.3.2 нашего Android SDK, Vungle поддерживает Amazon OS 5.4 и выше в качестве платформы. Инструкции по интеграции Amazon SDK не отличаются от Android.

Содержание

Требования

  • Android 4.0 (Ice Cream Sandwich — версия API 14) или более поздняя версия
  • Java 1.7 — для совместимости с Android 5.+ требуется наличие JDK 7
  • Java 1.8 — для совместимости с Android 7.+ требуется наличие JDK 8

Шаг 1. Добавление Vungle SDK в проект

Получить пакет Vungle SDK можно двумя способами: в формате AAR через репозиторий Maven или скачать вручную.

Вариант 1. Добавление Vungle SDK в формате AAR через Maven

Откройте файл project-level build.gradle и добавьте в раздел all projects URL-адрес maven.

allprojects { repositories { maven { url 'https://jitpack.io' } } }

Откройте файл app-level build.gradle для своего приложения и добавьте в раздел dependencies зависимости для компиляции.

dependencies { … compile 'com.github.vungle:vungle-android-sdk:5.3.2'
compile 'com.google.android.gms:play-services-basement:11.0.4' //This library is optional, but if used, use version 11.0.1 and up only compile 'com.google.android.gms:play-services-location:11.0.4' //This library is optional, but if used, use version 11.0.1 and up only
… }

Если вы добавляете Vungle SDK через Maven, можете пропустить раздел «Шаг 2. Обновление AndroidManifest.xml».

Вариант 2. Скачивание Vungle SDK и добавление в приложение

Скачайте Vungle SDK, распакуйте архив, перейдите в папку libs, скопируйте все Jar-файлы и добавьте пакет в библиотеку проекта.

Screen_Shot_2017-10-05_at_2.51.15_PM.png

Откройте файл project-level build.gradle и внесите изменения в раздел repositories.

allprojects { repositories { jcenter() } }

Откройте файл app-level build.gradle для своего приложения и добавьте в раздел dependencies другие зависимости.

android{ ... packagingOptions{ exclude 'META-INF/rxjava.properties' } ... } dependencies { … compile files('libs/adapter-rxjava-2.2.0.jar') compile files('libs/converter-gson-2.2.0.jar') compile files('libs/dagger-2.7.jar') compile files('libs/eventbus-2.2.1.jar') compile files('libs/gson-2.7.jar') compile files('libs/javax.inject-1.jar') compile files('libs/okhttp-3.6.0.jar') compile files('libs/okio-1.11.0.jar') compile files('libs/publisher-sdk-android-5.3.2.jar') compile files('libs/retrofit-2.2.0.jar') compile files('libs/rxjava-1.2.0.jar') compile 'com.google.android.gms:play-services-basement:11.0.4' //use version 11.0.1 and up only compile 'com.google.android.gms:play-services-location:11.0.4' //use version 11.0.1 and up only … } 

Если вы добавляете Vungle SDK вручную, перейдите к разделу «Шаг 2. Обновление AndroidManifest.xml».

Шаг 2. Обновление AndroidManifest.xml

Добавьте в файл AndroidManifest.xml следующие строки, назначающие имя элемента приложения имени класса приложения для multidex:

<!-- Required permissions for caching and ad operations to work -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- Optional permissions to enable better geo-targeting of ads (recommended) -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
android:name=".(YourApplicationName)"
...
<activity android:name="com.vungle.publisher.VideoFullScreenAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

<activity android:name="com.vungle.publisher.MraidFullScreenAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

<activity android:name="com.vungle.publisher.FlexViewAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
>

Шаг 3. Инициализация Vungle SDK

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

Запуск приложения

Инициализируйте пакет Vungle Publisher SDK в первом классе Activity приложения, используя идентификаторы активных размещений, которые будете использовать в приложении. Пакет SDK будет инициализироваться асинхронно и направит обратный вызов в VungleInitListener, указанный в init.

Примечание. Если вы вызываете метод init с неправильным идентификатором приложения, SDK Vungle не будет инициализироваться, и мы не запустим обратный вызов onFailure. При вызове метода init с неправильным идентификатором размещения Vungle SDK будет инициализироваться, но размещение не сможет загружать рекламу и всегда будет возвращать значение false для isAdPlayable. Опять же, мы не запускаем обратный вызов onFailure для неправильного идентификатора размещения.

public class FirstActivity extends android.app.Activity { // get the VunglePub instance final VunglePub vunglePub = VunglePub.getInstance(); // get your App ID from the app's main page on the Vungle Dashboard after setting up your app @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // initialize Publisher SDK with app id, placement reference id list and init callback handler vunglePub.init(this, app_id, new String[] { placementID1, placementID2, placementID3 }, new VungleInitListener() { @Override public void onSuccess() { } @Override public void onFailure(Throwable e){ } }); } }

Каждый класс Activity

Кроме того, переопределите методы onPause и onResume в каждом классе Activity (включая первый), чтобы пакет Vungle SDK для Android надлежащим образом обновлялся при получении или потере фокуса приложением.

public class EachActivity extends android.app.Activity { // get the VunglePub instance final VunglePub vunglePub = VunglePub.getInstance(); ... @Override protected void onPause() { super.onPause(); vunglePub.onPause(); } @Override protected void onResume() { super.onResume(); vunglePub.onResume(); } }

Шаг 4. Настройка прослушивателей

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

vunglePub.clearAndSetEventListeners(vungleDefaultListener, vungleSecondListener);

Шаг 5. Загрузка и воспроизведение рекламы

После успешной инициализации пакета Vungle SDK вы можете загрузить свое размещение и воспроизводить рекламу по готовности. Если вы указали прослушиватель VungleAdEventListener, он будет уведомлять о готовности рекламы к воспроизведению с помощью обратного вызова onAdAvailabilityUpdate(String placementReferenceId, boolean isAdAvailable).

public class GameActivity extends android.app.Activity { // get the VunglePub instance final VunglePub vunglePub = VunglePub.getInstance(); final String placementIdForLevel = "your placement reference id"; private void onLevelStart() {() { vunglePub.loadAd(placementIdForLevel); } private void onLevelComplete() { if (vunglePub.isAdPlayable(placementIdForLevel)) { vunglePub.playAd(placementIdForLevel, globalAdConfig); } } }

Учитывайте, что для размещения с автоматическим кэшированием вам не нужно вызывать loadAd, поскольку пакет SDK будет автоматически загружать рекламу после инициализации. Рекомендуем выбирать для автоматического кэширования наиболее часто просматриваемое размещение.

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

Дополнительные параметры

Сервисы Google Play (необязательно)

Включение сервисов Google Play в ваш проект позволяет Vungle обеспечить более органичное взаимодействие пользователя с рекламным объявлением, но не является обязательным. Мы рекомендуем использовать версию 8.4.0 или более позднюю.

О том, как добавить сервисы Google Play, см. в руководстве по настройке Google. В приложении следует убедиться, что на устройстве имеется достаточно новая версия сервисов Google Play. Vungle SDK может дополнительно использовать API расположений и рекламных объявлений из сервисов Google Play.

  • google.android.gms:play-services-location:11.0.1
  • google.android.gms:play-services-ads:11.0.1
  • Для play-services 7.8.0 и более ранних версий: сохраните библиотеку поддержки
  • Для play-services 8.4.0 и более поздних версий: библиотека поддержки не требуется

Мы успешно скомпилировали автономный пакет SDK для компиляции со следующими версиями сервисов Google Play: 7.8.0, 8.4.0, 9.8.0, 10.2.4, 11.0.1.

65K — ограничение метода Dalvik

При добавлении Vungle Android SDK 5.1.0 в проект добавляется 6 557 методов, не считая других обязательных зависимостей. Это текущее ограничение, и мы должны как-то сократить количество методов в проекте. Ознакомьтесь с некоторыми предложениями по сокращению общего количества методов, добавляемых в проект.

  • Выборочная компиляция сборки. Пакет SDK для сервисов Google Play (GPS) включает около 20 000 методов. Если в проекте используются GPS, есть возможность выборочной компиляции пакета GPS SDK, необходимого проекту.
    • com.google.android.gms:play-services-location:11.0.1
    • com.google.android.gms:play-services-ads:11.0.1

  • ProGuard. Вы можете включить ProGuard для сокращения кода проекта. Он будет удалять все неиспользуемые классы во время компиляции, чтобы максимально снизить суммарное число методов. Вы можете включить его, указав minifyEnabled true в build.gradle для соответствующего типа сборки и предоставив правила для сохранения классов, необходимых вашему проекту.

  • Multidex. Если общее количество методов по-прежнему превышает 65 000 (65K), Google предлагает только одно решение — включить multiDex. Вам нужно только один раз настроить проект на multiDex, но это повлияет на время сборки и запуска приложения.

Proguard

При использовании Proguard добавьте в файл конфигурации ProGuard следующие правила:

# Vungle -dontwarn com.vungle.** -dontnote com.vungle.** -keep class com.vungle.** { *; } -keep class javax.inject.* # GreenRobot -dontwarn de.greenrobot.event.util.** # RxJava -dontwarn rx.internal.util.unsafe.** -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { rx.internal.util.atomic.LinkedQueueNode producerNode; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { rx.internal.util.atomic.LinkedQueueNode consumerNode; } -keep class rx.schedulers.Schedulers { public static <methods>; } -keep class rx.schedulers.ImmediateScheduler { public <methods>; } -keep class rx.schedulers.TestScheduler { public <methods>; } -keep class rx.schedulers.Schedulers { public static ** test(); }
# MOAT -dontwarn com.moat.** -keep class com.moat.** { public protected private *; }
# Retrofit -dontwarn okio.** -dontwarn retrofit2.Platform$Java8

Интерфейс прослушивателя событий

Ниже перечислены доступные методы управления VungleAdEventListener.

Метод

Описание

clearAndSetEventListeners(VungleEventListener..)

Очищает зарегистрированные прослушиватели событий EventListener, затем добавляет входные прослушиватели событий eventListener.

clearEventListeners( )

Очищает все объекты прослушивателя событий

removeEventListeners(VungleEventListener..)

Удаляет входные EventListener.

addEventListeners(VungleEventListener..)

Добавляет входные объекты прослушивателя событий

API делегирования вызовов для VungleAdEventListener:

public class FirstActivity extends android.app.Activity { private final VungleAdEventListener vungleListener = new VungleAdEventListener(){ @Override public void onAdEnd(String placementReferenceId, boolean wasSuccessfulView, boolean wasCallToActionClicked) { // Called when user exits the ad and control is returned to your application // if wasSuccessfulView is true, the user watched the ad and should be rewarded // (if this was a rewarded ad). // if wasCallToActionClicked is true, the user clicked the call to action // button in the ad. } @Override public void onAdStart(String placementReferenceId) { // Called before playing an ad } @Override public void onUnableToPlayAd(String placementReferenceId, String reason) { // Called after playAd(placementId, adConfig) is unable to play the ad } @Override public void onAdAvailabilityUpdate(String placementReferenceId, boolean isAdAvailable) { // Notifies ad availability for the indicated placement // There can be duplicate notifications } }; @Override public void onDestroy() { vunglePub.clearEventListeners(); super.onDestroy(); }; }

Замечание о потоке пользовательского интерфейса

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

Параметры конфигурации

Глобальная конфигурация рекламных объявлений

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

public class FirstActivity extends android.app.Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); vunglePub.init(this, app_id, placement_list, new VungleInitListener() { @Override public void onSuccess() { // get a reference to the global AdConfig object final AdConfig globalAdConfig = vunglePub.getGlobalAdConfig(); // For a full description of available options, see the 'Config Object'section. globalAdConfig.setSoundEnabled(true); } @Override public void onFailure(Throwable e) { } }); } } 

Конфигурация отдельных объявлений

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

public class GameActivity extends android.app.Activity { … private void onLevelComplete() { // create a new AdConfig object final AdConfig overrideConfig = new AdConfig(); overrideConfig.setSoundEnabled(false); // the overrideConfig object will only affect this ad play. vunglePub.playAd(yourPlacementId, overrideConfig); } }

Объект AdConfig

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

Примечание. Рекламные объявления с вознаграждением в некоторых случаях называются рекламными объявлениями со стимулом, оба термина относятся к одному и тому же типу рекламных объявлений. В коде SDK и нашем интерфейсе Reporting API мы используем термин incentivized (со стимулом).

Доступные параметры указаны ниже.

Метод

По умолчанию

Описание

setOrientation

Orientation.matchVideo

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

Orientation.matchVideo указывает, что реклама будет воспроизводиться в наилучшей ориентации для видео (обычно альбомная).

setSoundEnabled

true

Задает начальное состояние звука для рекламного объявления. Если указано true, используются громкость устройства и настройки звука. Если указано false, видео начинает воспроизводиться с отключенным звуком, но пользователь может это изменить.

setBackButtonImmediatelyEnabled

false

Если указано true, пользователь может незамедлительно закрыть объявление с помощью кнопки «Назад». Если указано false, пользователь не может использовать кнопку «Назад» для выхода из объявления, пока не покажется кнопка «Закрыть» на экране.

setImmersiveMode

false

Включает или выключает режим комфортного просмотра на устройствах KitKat+

setIncentivizedUserId

нет

Указывает, что уникальный идентификатор пользователя, который передается в ваше приложение, должен подтверждать, что этот пользователь должен быть вознагражден за просмотр стимулированной рекламы. Н/Д, если объявление не является стимулированным.

 

setIncentivizedCancelDialogTitle

«Закрыть видео?»

Задает заголовок диалога подтверждения при пропуске стимулированной рекламы. Н/Д, если объявление не является стимулированным.

setIncentivizedCancelDialogBodyText

«Ранее закрытие этого видео не позволит вам заработать вознаграждение. Вы уверены?»

Задает текст диалога подтверждения при пропуске стимулированной рекламы. Н/Д, если объявление не является стимулированным.

setIncentivizedCancelDialogCloseButtonText

«Закрыть видео»

Задает текст «кнопки отмены» диалога подтверждения при пропуске стимулированной рекламы. Н/Д, если объявление не является стимулированным.

setIncentivizedCancelDialogKeepWatchingButtonText

«Продолжить просмотр»

Задает текст «кнопки продолжения просмотра» диалога подтверждения при пропуске стимулированной рекламы. Н/Д, если объявление не является стимулированным.

setTransitionAnimationEnabled

false

Включает или отключает стандартную анимацию переходов фрагментов

setOrdinalViewCount(int)

null

Если вы получаете отчеты о порядковых данных из Vungle, используйте это поле, чтобы передать порядковый номер посредника. Это целое число, указывающее порядок, в котором это рекламное объявление было показано в игровом сеансе (например, если два объявления уже были показаны в этом сеансе, и это рекламное объявление из Vungle было показано третьим, передайте «3»). Подробнее об порядковых данных см. здесь.

getOrdinalViewCount

нет

Используйте это, чтобы получить значение, переданное через setOrdinalViewCount.

setFlexViewCloseTimeInSec

нет

Это количество времени в секундах, в течение которого будут воспроизводиться видео Flex View перед автоматическим закрытием.

Реклама Flex Feed

Чтобы программно закрыть рекламу Flex View, используйте функцию объект vunglePub:

vunglePub.closeFlexViewAd(placementID2);

Дополнительные примечания

В Android Studios присутствует известная проблема, которая приводит к аварийному завершению работы, как показано ниже. Если у вас установлена последняя версия Android Studios Instant Run, отключите Android Studios Instant Run, чтобы устранить проблему.

1-20 13:53:03.649 27642-27828/com.publisher.sample W/GooglePlayServicesUtil: Google Play services out of date. Requires 10240000 but found 9879438 
11-20 13:53:03.659 27642-27828/com.publisher.sample W/VungleDevice: Google Play Services not available: SERVICE_VERSION_UPDATE_REQUIRED
11-20 13:53:05.679 27642-27642/com.publisher.sample D/Event: No subscribers registered for event class com.vungle.publisher.lu
11-20 13:53:05.679 27642-27642/com.publisher.sample D/Event: No subscribers registered for event class de.greenrobot.event.NoSubscriberEvent
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0
Еще есть вопросы? Отправить запрос

Комментарии