Vungle 시작하기 - Android 또는 Amazon SDK v.5

이 설명서를 사용하여 Android 또는 Amazon용 Vungle SDK를 통합하십시오. Android SDK의 v.5.3.2부터 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는 Maven을 통해서 AAR로 이용하거나 또는 수동 다운로드를 통해 이용할 수 있습니다.

옵션 1. Maven을 통해 Vungle SDK를 AAR로 포함

프로젝트 레벨 build.gradle을 열고 모든 프로젝트 섹션에 Maven URL을 추가합니다.

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

앱에서 app-level build.gradle 파일을 열고 종속성 섹션에 컴파일 종속성을 추가합니다.

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
… }

Maven을 통해서 Vungle SDK를 포함하는 경우 "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을 열고 저장소 섹션을 업데이트합니다.

allprojects { repositories { jcenter() } }

앱에서 앱 레벨 build.gradle 파일을 열고 종속성 섹션에 기타 종속성을 추가합니다.

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 업데이트

multidex에 대한 어플리케이션 클래스 이름에 어플리케이션 항목 이름을 지정하여 다음 행을 AndroidManifest.xml에 추가합니다.

<!-- 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 초기화

참고: 앱별로 기본 플레이스먼트가 자동으로 생성됩니다. 이 초기화 단계에서 플레이스먼트 기능을 사용하지 않더라도 반드시 플레이스먼트 참조 ID를 제공해야 합니다. 플레이스먼트를 여러 개 만드는 경우, 참조 ID를 모두 제공합니다.

어플리케이션 시작

앱 내부에서 사용할 활성 플레이스먼트 참조 ID로 어플리케이션의 첫 번째 활동에서 Vungle Publisher SDK를 초기화합니다. SDK가 비동기적으로 초기화되며 init에 제공된 VungleInitListener에 콜백을 반환합니다.

참고: 잘못된 앱 ID로 init 메서드를 호출한 경우 Vungle SDK가 초기화되지 않으며 당사는 onFailure 콜백을 실행하지 않습니다. 잘못된 플레이스먼트 ID로 init 메서드를 호출한 경우 Vungle SDK가 초기화되지만 해당 플레이스먼트는 광고를 로드할 수 없으며 isAdPlayable에 대해 항상 false를 반환합니다. 잘못된 플레이스먼트 ID에 대해서는 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){ } }); } }

각 활동

또한, 각 활동(첫 번째 포함)의 onPauseonResume 메서드를 다시 정의해서 어플리케이션이 포커스를 얻거나 잃었을 때 Vungle Android SDK가 올바르게 업데이트되는지 다음과 같이 확인해야 합니다.

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단계. 리스너 설정

Vungler 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); } } }

자동 캐시된 플레이스먼트의 경우 초기화 후에 SDK가 광고를 자동으로 로드하므로 loadAd를 호출할 필요가 없습니다. 시청 수가 가장 높은 플레이스먼트를 자동 캐시 섹션으로 설정하는 것이 좋습니다.

사용자에게 광고를 닫을 수 있는 옵션을 제공할지 결정하려면 Vungle 대시보드에서 강제 보기 옵션을 사용합니다.

고급 설정

Google Play Services(선택사항)

프로젝트에 Google Play Services를 포함하면 Vungle에서 보다 강화된 맞춤형 광고 경험을 최종 사용자에게 제공할 수 있지만, 의무 사항은 아닙니다. 버전 8.4.0 이상을 사용하는 것이 좋습니다.

Google Play Services를 포함하려면 Google의 설치 설명서를 읽어 보시기 바랍니다. 앱에서 해당 장치에 최신 버전의 Google Play Services가 설치되어 있는지 확인합니다. Vungle SDK는 Google Play Services의 위치 및 광고 API를 선택적으로 사용합니다.

  • 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 이상: 지원 라이브러리 불필요

Google Play Services의 7.8.0, 8.4.0, 9.8.0, 10.2.4, 11.0.1. 버전으로 컴파일할 수 있도록 독립형 SDK를 성공적으로 컴파일했습니다.

65K Dalvik Method Limit

Vungle Android SDK 5.1.0를 프로젝트에 추가하면, 필요한 다른 종속성을 제외한 6,557개의 메서드가 추가됩니다. 프로젝트 파이프 라인에서 메서드 수를 줄일 계획을 가지고 있으나, 현재로서는 이것이 한계입니다. 프로젝트에 추가되는 총 메서드 수를 줄이려면 다음 사항을 고려합니다.

  • 선택적 Gradle 컴파일: Google Play Services(GPS) SDK는 약 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를 활성화하여 프로젝트 코드를 줄일 수 있습니다. ProGuard는 컴파일 시 사용되지 않는 모든 클래스를 버려 총 메서드 수를 최대한 작게 만듭니다. 적절한 빌드 유형에 대한 build.gradle에서 minifyEnabled true를 지정하고 프로젝트에 필요한 클래스를 유지하기 위한 규칙을 제공하여 ProGuard를 활성화할 수 있습니다.

  • Multidex: 메서드 수가 여전히 65K를 초과하는 경우, multiDex를 활성화하는 것만이 Google에서 제공된 유일한 해결책일 수 있습니다. 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

EventListener 인터페이스

VungleAdEventListener 관리에 사용할 수 있는 메서드는 다음과 같습니다.

메서드

설명

clearAndSetEventListeners(VungleEventListener..)

등록된 이벤트 리스너를 지운 다음 입력 이벤트 리스너를 추가합니다.

clearEventListeners( )

EventListeners 모두 지우기

removeEventListeners(VungleEventListener..)

입력 이벤트 리스너를 제거합니다.

addEventListeners(VungleEventListener..)

입력 eventListener를 추가합니다.

VungleAdEventListener 델리게이트 호출 API:

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(); }; }

UI 스레드 노트

콜백은 배경 스레드에서 실행되므로 이벤트 콜백에 의한 UI 상호 작용/업데이트는 실행 이전에 기본 UI 스레드로 전달되어야 합니다. UI 스레드에서 코드를 실행하는 대표적인 두 가지 방법은 다음과 같습니다.

구성 옵션

전역 광고 구성

init을 호출한 뒤에는 전역 AdConfig 개체를 설정해야 합니다. 각 playAd 호출에서 AdConfig 개체를 기본으로 사용할 수 있습니다. 이 개체를 사용하면 재생하는 모든 광고에 자동으로 적용될 옵션을 설정할 수 있습니다.

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) { } }); } } 

단일 광고 구성

playAd를 호출할 때는 반드시 AdConfig를 사용해야 합니다. 하지만, 새로운 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 코드와 리포팅 API에서는 '인센티브화'라는 용어를 사용합니다.

다음과 같은 옵션을 사용할 수 있습니다.

메서드

기본값

설명

setOrientation

Orientation.matchVideo

Orientation.autoRotate는 광고가 기기 방향을 따라 자동으로 회전함을 나타냅니다.

Orientation.matchVideo는 광고가 동영상에 가장 적합한 방향(보통 가로)으로 재생됨을 나타냅니다.

setSoundEnabled

true

광고의 시작음 상태를 설정합니다. true인 경우 오디오가 장치의 볼륨 및 소리 설정을 따릅니다. false인 경우 동영상이 무음으로 시작되지만 사용자가 변경할 수 있습니다.

setBackButtonImmediatelyEnabled

false

true로 설정하면 사용자가 뒤로 버튼을 사용해 즉시 광고를 끝낼 수 있습니다. false로 설정하면 화면에 닫기 버튼이 나타날 때까지 사용자가 뒤로 버튼을 사용해 광고를 끝낼 수 없습니다.

setImmersiveMode

false

KitKat+ 장치에서 몰입형 모드를 사용하거나 중지합니다.

setIncentivizedUserId

none

해당 사용자에게 보상형 광고 시청에 대한 보상을 제공해야 하는지 확인하기 위해 어플리케이션에 고유한 사용자 ID가 전달되도록 설정합니다. 보상형 광고가 아닌 경우에는 해당되지 않습니다.

 

setIncentivizedCancelDialogTitle

"동영상을 닫을까요?"

보상형 광고를 건너뛸 경우 표시되는 확인 대화 상자의 제목을 설정합니다. 보상형 광고가 아닌 경우에는 해당되지 않습니다.

setIncentivizedCancelDialogBodyText

"이 동영상을 일찍 닫으면 보상을 받을 수 없습니다. 정말 닫을까요?"

보상형 광고를 건너뛸 경우 표시되는 확인 대화 상자의 본문을 설정합니다. 보상형 광고가 아닌 경우에는 해당되지 않습니다.

setIncentivizedCancelDialogCloseButtonText

"동영상 닫기"

보상형 광고를 건너뛸 경우 표시되는 확인 대화 상자의 'cancel button' 텍스트를 설정합니다. 보상형 광고가 아닌 경우에는 해당되지 않습니다.

setIncentivizedCancelDialogKeepWatchingButtonText

"계속 시청"

보상형 광고를 건너뛸 경우 표시되는 확인 대화 상자의 'keep watching button' 텍스트를 설정합니다. 보상형 광고가 아닌 경우에는 해당되지 않습니다.

setTransitionAnimationEnabled

false

표준 조각 전환 애니메이션을 사용하거나 중지합니다.

setOrdinalViewCount(int)

null

Vungle에서 서수 데이터 보고를 받는 경우 이 필드를 사용하여 미디에이션 서수를 전달하십시오. 이는 게임 세션에서 해당 광고의 표시 순서를 나타내는 정수 값입니다(예를 들어, 이번 세션에서 이미 두 개의 광고가 표시되고 Vungle의 광고가 세 번째로 보여지는 경우, '3'을 내보냅니다). 서수 데이터에 대한 자세한 내용은 여기를 참조하십시오.

getOrdinalViewCount

none

이를 사용하여 setOrdinalViewCount를 통해 내보낸 값을 가져옵니다.

setFlexViewCloseTimeInSec

none

이는 Flex View 동영상이 자동으로 닫히기 전에 재생될 시간(초)입니다.

Flex View 광고

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
또 다른 질문이 있으십니까? 문의 등록

댓글