Vungle SDK v.6 - Adobe AIR 시작하기

이 지침에 따라 Vungle Adobe Air 플러그인을 기본 샘플 어플리케이션에 통합합니다. 여기에 언급된 소스 코드는 공용 GitHub 저장소에서 사용할 수 있습니다.

목차

시작하기 전에

  • Vungle Extension을 사용하려면 Adobe AIR SDK 4.0 이상이 필요합니다. Flash Builder 또는 Flash Professional에서 AIR SDK 업데이트에 대한 지침은 “추가 정보” 섹션을 참조하십시오.

  • Android에서 작업하는 경우 Vungle AIR Extension을 사용하려면 개발 시스템에 JDK 6 또는 JDK 7(사용 중인 Flash 버전에 따라 다름)이 설치되어 있어야 합니다. 어플리케이션을 실행하려면 Android 3.0(Honeycomb - API 버전11) 이상이 필요합니다.

  • ActionScript 3 클래스 문서를 참조하십시오.

  • example/VungleExample.as를 샘플 어플리케이션 클래스로 검토합니다(Flash Professional 사용자이고 문서 클래스 사용법을 모르는 경우, 이문서 마지막 부분의 "Animate 또는 Flash Professional CS6 VungleExample.as 문서 클래스 사용"를 참조합니다.)
  • 하드웨어 가속

    대상 API 수준이 14 이상으로 설정되어 있으면 하드웨어 가속이 기본적으로 활성화되어 있습니다. 다이나믹 템플릿 및 Native Flex 광고를 적절하게 표시하려면 SDK에 대해 이 옵션을 사용하도록 설정해야 합니다. 프로젝트에서 이 옵션이 'false'로 설정되어 있지 않은지 확인하십시오.

    <application android:hardwareAccelerated="true" ...>

 

GDPR: 권장 구현

5월 25일부터 GDPR(General Data Protection Regulation, 일반데이터보호규정)이 유럽 연합에서 시행됩니다. 개발자에게는 GDPR 준수를 위한 2가지 옵션이 있습니다.

  • 옵션 1(권장): 퍼블리셔는 사용자 수준에서 GDPR 동의 과정을 제어한 후 Vungle에 사용자의 선택을 전달합니다. 이를 위해 개발자는 자체 메커니즘을 사용하여 사용자의 동의를 수집한 다음 Vungle API를 사용하여 사용자의 동의 상태를 업데이트하거나 쿼리할 수​있습니다. 자세한 내용은 GDPR 권장 구현 지침 섹션을 참조하십시오.

  • 옵션 2: Vungle이 요구사항을 처리하도록 허용합니다. Vungle은 유럽 사용자를 위해 광고를 재생하기 전에 동의 대화 상자를 표시하고 이후 광고에 대한 해당 사용자의 동의 여부를 기억합니다.

1단계. 확장 라이브러리 포함

모바일 프로젝트에 대한 최신 AIR을 만들고 기본 확장을 추가하여 시작하십시오. 2~3개의 .ane 파일을 추가해야 합니다.

  • com.vungle.extensions.Vungle.ane
  • com.vungle.extensions.android.AndroidSupportLib.ane
  • com.vungle.extensions.android.GooglePlayServices.ane (Android를 대상으로 하는 경우 Google Play Services 라이브러리를 프로젝트에 추가해야 할 수 있습니다. 그러나 많은 다른 확장에 이미 이 라이브러리가 포함되어 있기 때문에 이미 존재할 수도 있습니다.)

Animate 및 Flash Professional CS6 이상

  1. Android용 AIR 또는 iOS용 AIR 프로젝트를 새로 만듭니다.
  2. File → Publish Settings...를 선택합니다.
  3. 'ActionScript 설정'에서 스크립트 옆에 있는 공구 모양 아이콘을 선택합니다.
  4. 라이브러리 경로 탭에서 기본 확장(ANE) 파일 찾아보기를 클릭하고 vungle.extensions.Vungle.ane 파일을 선택합니다. 확인을 클릭합니다.
  5. '플레이어 설정'에 대한 대상 옆에 있는 공구 모양 아이콘을 선택합니다.
  6. Android를 대상으로 하는 경우: 권한 탭에서 'INTERNET', 'WRITE_EXTERNAL_STORAGE''ACCESS_NETWORK_STATE'을(를) 활성화합니다.
  7. 이 앱에 대한 권한 및 매니페스트 추가 기능을 수동으로 관리 옵션을 선택하고 확인을 클릭합니다.
  8. 1-7단계를 반복하고 4단계에서 com.vungle.extensions.android.AndroidSupportLib.ane을(를) 선택하십시오.
  9. Android를 대상으로 하고 이 라이브러리가 존재하지 않는 경우 해당 단계를 다시 반복하고 4단계에서 com.vungle.extensions.android.GooglePlayServices.ane 파일을 선택합니다.

Flash Builder 4.6 이상을 사용하는 경우

  1. Actionscript 빌드 경로프로젝트 속성에서 기본 확장을 선택합니다.
  2. ANE 추가...를 선택하고 vungle.extensions.Vungle.ane 파일로 이동합니다.
  3. Actionscript Build Packaging → Google Android를 선택합니다.
  4. 기본 확장 탭에서 확장 옆에 있는 패키지 옵션을 선택합니다.
  5. 1-2단계를 반복하고 2단계에서 com.vungle.extensions.android.AndroidSupportLib.ane을(를) 선택하십시오.
  6. iOS를 대상으로 하는 경우, 'Apple iOS' 대상에 대해 3단계와 4단계를 반복합니다.

2단계. 어플리케이션 설명자 업데이트

Vungle을 사용하려면 앱의 어플리케이션 XML 파일을 변경해야 합니다. 다음의 변경 사항을 실행해 IDE에서 만든 XML 파일을 수정합니다.

참고: Flash Professional을 사용하는 경우, 위의 'Animate 및 Flash Professional CS6 이상에서 확장 라이브러리 포함' 단계를 수행합니다. 이를 수행하지 않으면 Flash에서 변경 사항을 실행 취소할 수 있습니다.

  1. 앱 설명자 파일에서 AIR SDK를 4.0 이상으로 설정합니다.
    <application xmlns="http://ns.adobe.com/air/application/4.0">
  2. 확장에 대한 링크를 설명자에 포함합니다.
    <extensions>
    <extensionID>com.vungle.extensions.Vungle</extensionID>
    <extensionID>com.vungle.extensions.android.AndroidSupportLib</extensionID>
    </extensions>
  3. Android를 대상으로 하는 경우: Google Play Services 확장을 추가해야 할 수 있습니다. 확장 ID도 여기에 추가합니다.
    <extensions>
    <extensionID>com.vungle.extensions.Vungle</extensionID>
    <extensionID>com.vungle.extensions.android.AndroidSupportLib</extensionID>
    <extensionID>com.vungle.extensions.android.GooglePlayServices</extensionID>
    </extensions>

Android 대상 AIR 어플리케이션의 경우

Android를 대상으로 하는 경우, Android XML 요소에서 Android 매니페스트 추가 기능을 업데이트합니다.

  • INTERNET, WRITE_EXTERNAL_STORAGEACCESS_NETWORK_STATE 권한 포함
  • VideoFullScreenAdActivity 추가,MraidFullScreenAdActivity, MraidFullScreenAdActivity 활동 정의
  • google-play-services 버전 메타데이터 태그 추가:
     <android>

    <manifestAdditions><![CDATA[

    <manifest android:installLocation="auto">

    <!--Required Permissions-->
    <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-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:networkSecurityConfig="@xml/network_security_config" >
    <activity android:name=".MainActivity">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <!-- Google Play Services -->
    <meta-data android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
    <!-- Vungle -->
    <activity
    android:name="com.vungle.warren.ui.VungleActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <!-- android-job -->
    <service
    android:name="com.evernote.android.job.v21.PlatformJobService"
    android:exported="false"
    android:permission="android.permission.BIND_JOB_SERVICE" />
    <service
    android:name="com.evernote.android.job.v14.PlatformAlarmService"
    android:exported="false"
    android:permission="android.permission.BIND_JOB_SERVICE" />
    <service
    android:name="com.evernote.android.job.v14.PlatformAlarmServiceExact"
    android:exported="false" />
    <receiver
    android:name="com.evernote.android.job.v14.PlatformAlarmReceiver"
    android:exported="false" >
    <intent-filter>
    <!-- Keep the filter for legacy intents -->
    <action android:name="com.evernote.android.job.v14.RUN_JOB" />
    <action android:name="net.vrallev.android.job.v14.RUN_JOB" />
    </intent-filter>
    </receiver>
    <receiver
    android:name="com.evernote.android.job.JobBootReceiver"
    android:exported="false" >
    <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
    </intent-filter>
    </receiver>
    <service
    android:name="com.evernote.android.job.gcm.PlatformGcmService"
    android:enabled="false"
    android:exported="true"
    android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" >
    <intent-filter>
    <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
    </intent-filter>
    </service>
    <service
    android:name="com.evernote.android.job.JobRescheduleService"
    android:exported="false"
    android:permission="android.permission.BIND_JOB_SERVICE" />
    </application>

    </manifest>
    ]]></manifestAdditions>

     </android>

3단계. Vungle API 통합

단 몇 줄의 ActionScript 만으로 Vungle API를 어플리케이션에 추가할 수 있습니다.

Vungle 확장 초기화

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

어플리케이션이 시작되면 API를 초기화합니다.

  • 순수 ActionScript를 사용하는 경우, 문서 클래스 생성자에서 이 작업을 수행합니다.
  • Flex를 사용하는 경우, 메인 클래스의 initialize() 이벤트에서 이 작업을 불러옵니다.
  • Flash에서 타임라인 코드를 사용하는 경우, 프레임 1에서 이 작업을 수행합니다.
  1. API 클래스 가져오기:
    import com.vungle.extensions.*; import com.vungle.extensions.events.*;
  2. create()을(를) 호출하고 어플리케이션 ID의 문자열 및 Vungle 대시보드에서 어플리케이션의 플레이스먼트 참조 ID를 포함하는 배열을 전달하여 API를 초기화합니다. 동일한 프로젝트에서 iOS 및 Android 모두를 대상으로 하는 경우 플랫폼에 따라 다른 어플리케이션 ID와 플레이스먼트 배열을 create() 메서드에 제공합니다.

    프로세스를 생성하는 동안 Vungle에서 오류가 발생할 수 있으므로(예: 데스크톱에서 실행 중인 경우 확장에 오류 발생) try/catch에서 Vungle.create()에 대한 호출이 중첩됩니다(예: 데스크톱에서 실행 중인 경우 확장에 오류 발생).
    try { // initialize with your app id Vungle.create("your_vungle_id", [“placement1”, “placement2”, “placement3”]); } catch (error:Error) { // could not create extension. Are you running on something besides iOS/Android? }

플레이스먼트 광고 로드

플레이스먼트 광고를 재생하려면 해당 플레이스먼트에 광고를 로드해야 합니다. 자동 캐시된 플레이스먼트에는 이 메서드를 호출할 필요가 없습니다. SDK는 자동 캐시된 플레이스먼트를 내부적으로 로드하려고 시도합니다.

Vungle.vungle.loadAd(“non_auto_cached_placement”);

플레이스먼트 광고 재생

광고가 이벤트 리스너를 통해 재생될 준비가 되면 알 수 있습니다. 플레이스먼트가 재생 가능한 상태가 되면 광고를 재생할 수 있습니다.

If (Vungle.vungle.isAdAvailable(“placement_id”)) { Vungle.vungle.playAd(“placement_id”); }

이벤트 리스너 추가

Vungle Extension은 다음과 같은 여섯 가지 이벤트를 전달합니다. VungleEvent.AD_PLAYABLE, VungleEvent.AD_STARTED, VungleEvent.AD_FINISHED, VungleEvent.AD_FAILED, VungleEvent.AD_INIT, VungleEvent.AD_LOG.

  1. 광고 재생이 준비되면 AD_PLAYABLE이(가) 전달됩니다.
    Vungle.vungle.addEventListener(VungleEvent.AD_PLAYABLE, onAdPlayable); function onAdPlayable(e:VungleEvent):void { if (e.isAdPlayable) { trace(“ad is playable for placement: “ + e.placement); Vungle.vungle.playAd(e.placement); } else { trace(“ad not playable for placement: “ + e.placement); } }
  2. 광고가 표시되고 전달될 때 각각 AD_STARTEDAD_FINISHED 이벤트가 전달됩니다.
    Vungle.vungle.addEventListener(VungleEvent.AD_STARTED, onAdStarted); Vungle.vungle.addEventListener(VungleEvent.AD_FINISHED, onAdFinished); function onAdStarted(e:VungleEvent):void { trace("ad displayed for placement: " + e.placement); } function onAdFinished(e:VungleEvent):void { trace("ad dismissed for placement: “ + e.placement + “, CTA = " + e.wasCallToActionClicked); if (e.wasSuccessfulView) { trace("counts a completed view - present reward."); } }
  3. Vungle SDK 초기화가 완료되면 AD_INIT이(가) 전달됩니다.
    function onAdInit(e:VungleEvent):void { trace(“Vungle SDK is initialized: “ + e.isInitialized”); }
  4. Vungle SDK가 로그 메시지를 전송하면 AD_LOG가 전달됩니다. 디버깅에 이를 사용할 수 있으며, 로깅은 iOS용 Vungle SDK에서만 구현되므로 이 이벤트는 플랫폼에 따라 다릅니다.
    Vungle.vungle.setLoggingEnabled(true); Vungle.vungle.addEventListener(VungleEvent.AD_LOG, onAdLog); private function onAdLog(e:VungleEvent):void { log("ad log: " + e.message); }

추가 옵션

이미 보셨듯이 playAd() 메서드를 호출하면 구성 옵션이 포함된 개체를 전달할 수 있습니다.

참고: 경우에 따라 보상형 광고가 인센티브화 광고로 불리기도 합니다. 두 용어는 항상 같은 종류의 광고를 나타냅니다. SDK 코드와 리포팅 API에서는 '인센티브화'라는 용어를 사용합니다.

VungleAdConfig에서 사용할 수 있는 속성은 다음과 같습니다.

옵션

설명

orientation

VungleOrientation

Android

VungleOrientation.AUTO_ROTATE

VungleOrientation.ANDROID_MATCH_VIDEO

iOS

VungleOrientation.IOS_LANDSCAPE

VungleOrientation.IOS_PORTRAIT

soundEnabled

부울

true인 경우(기본), 동영상 광고를 재생하는 동안 장치의 소리 설정에 따라 사운드를 사용할 수 있습니다. false인 경우, 동영상 재생이 무음 상태로 시작됩니다. 재생되는 중에 사용자가 음향을 끄거나 음소거 상태를 해제할 수 있습니다.

backButtonImmediatelyEnabled

부울

Android에 한해, true에서는 사용자가 뒤로 버튼을 사용해 즉시 광고를 끝낼 수 있습니다. false(기본값)에서는 화면에 닫기 버튼이 나타날 때까지 사용자가 뒤로 버튼을 사용해 광고를 끝낼 수 없습니다.

immersiveMode

부울

Android에 한해, true에서는 KitKat+ 장치에서 몰입형 모드를 사용합니다. false가 기본으로 설정되어 있습니다.

incentivizedUserId

문자열

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

flexViewCloseTimeInSec

Int

지정된 시간(초)이 지난 후 Flex View 광고가 자동적으로 해제되게 하려면 이 옵션을 사용하십시오.
이 함수는 Flex View 광고에서만 작동합니다.

incentivizedCancelDialogTitle

문자열

사용자가 동영상을 끝나기 전에 닫으려고 할 때 표시되는 메시지를 사용자 정의할 수 있습니다.

 

참고: 이 옵션은 표준 Vungle 광고에만 적용되며 다이나믹 템플릿 광고에는 적용되지 않습니다. 다이나믹 템플릿 광고에 적용되는 옵션은 대시보드에서 지정할 수 있으며, 동일한 옵션이 제공됩니다.

incentivizedCancelDialogBodyText

incentivizedCancelDialogCloseButtonText

incentivizedCancelDialogKeepWatchingButtonText

샘플 코드:

var adConfig:VungleAdConfig = new VungleAdConfig(); adConfig.orientation = VungleOrientation.ANDROID_MATCH_VIDEO | VungleOrientation.IOS_LANDSCAPE; adConfig.soundEnabled = false; android: { adConfig.backButtonImmediatelyEnabled = true; adConfig.immersiveMode = true; }; adConfig.incentivizedUserId = "vungle_test_user"; adConfig.incentivizedCancelDialogBodyText = "body_text"; adConfig.incentivizedCancelDialogCloseButtonText = "close_button_text"; adConfig.incentivizedCancelDialogKeepWatchingButtonText = "continue_button_text"; adConfig.incentivizedCancelDialogTitle = "title_text"; Vungle.vungle.playAd(placement, adConfig);

전역 기본값

전역 구성 객체를 사용하여 옵션 기본값을 설정할 수 있습니다.

// set any configuration options you like VungleAdConfig.globalConfig.orientation = VungleOrientation.ANDROID_MATCH_VIDEO; VungleAdConfig.globalConfig.soundEnabled = false;

그러면 새로운 VungleAdConfig 객체를 만들 때 모두 이 기본값으로 생성됩니다. 옵션 없는 playAd()도 전역 구성을 사용합니다.

참고: 앱이 테스트 모드에 있는 동안에는 광고 중인 앱을 다운로드할 수 없습니다. 또한, 대시보드가 광고 노출 수를 보고하지 않습니다. 이는 사용자가 올바르게 SDK를 통합했는지 확인하는 데에만 테스트 광고가 사용되기 때문입니다. 이 기능은 해당 앱이 활성 모드에서 작동할 준비가 되었을 때 비로소 제공됩니다.

Flex View 광고

Flex View 광고를 프로그래밍 방식으로 닫으려면 광고가 시작된 후 closeFlexViewAd 함수를 호출하십시오.

Vungle.vungle.closeFlexViewAd(placement);

이 함수는 Flex View 광고와 Vungle SDK iOS에서만 작동합니다.

 

추가 정보

GDPR 권장 구현 지침

Vungle API를 사용하여 업데이트하거나 사용자 동의 상태를 쿼리하려면(GDPR: 권장 구현의 옵션 1 참조) 다음 함수를 사용하십시오.

동의 상태 업데이트

Vungle.vungle.updateConsentStatus(VungleConsent.ENUMSTATE);

가능한 상태:

수락 - VungleConsent.OPTED_IN // 1

거부 - VungleConsent.OPTED_OUT // 0

 

현재 동의 상태 가져오기

//Returns a VungleConsent enum

var status:int = Vungle.vungle.getConsentStatus();

 

Animate 또는 Flash Professional CS6에서 VungleExample.as 문서 클래스 사용

  1. 먼저 어플리케이션을 만들고 이 통합 설명서의 1-3단계에 따라 확장을 추가합니다.
  2. 복사하여 .fla와 동일한 폴더에 붙여 넣습니다. 해당 내용을 복사하여 타임라인에 붙여 넣지 마십시오.
  3. 20행의 앱 ID 및 플레이스먼트 ID를 내 Vungle ID로 변경합니다.
  4. Flash 속성의 문서 클래스에서 VungleExample을 입력하고 확인을 클릭합니다.
  5. 어플리케이션을 빌드하고 설치합니다.

Flash Professional CS6에 AIR SDK의 새로운 버전(4.0 이상) 설치

다음 링크를 사용해 최신 AIR SDK를 찾습니다. AIR 4.0 이상이 설치되어 있는 경우 이 단계를 건너뜁니다. 그렇지 않으면 아래 지침을 따르십시오.

  1. AIR 4.0 이상의 SDK 패키지를 하드 드라이브 위치에 압축 해제합니다.
  2. Flash Professional CS6를 시작합니다.
  3. Help → Manage AIR SDK...를 선택합니다.
  4. +(플러스)를 클릭하고 AIR SDK를 압축 해제한 위치로 이동합니다.
  5. 확인을 클릭합니다.
  6. File → Publish Settings를 선택합니다.
  7. 대상 드롭 다운 메뉴에서 iOS용 최신 AIR SDK를 선택합니다.

Flash Builder에 AIR SDK의 새로운 버전(4.0 이상) 설치

다음 링크를 사용해 최신 AIR SDK를 찾습니다. AIR 4.0 이상이 설치되어 있는 경우 이 단계를 건너뜁니다. Adobe의 최신 Flash Builder AIR SDK 업데이트 지침을 이용할 수도 있습니다.

Adobe Animate 잘못된 입력 오류 해결

아래 이미지와 같은 오류가 발생하면 이 문서를 참조합니다.

image2.png

또 다른 질문이 있으십니까? 문의 등록

댓글