로딩중입니다
애드팝콘 SSP : 안드로이드
9/5/2017 4:43:09 PM

애드팝콘 SSP 연동하기 : 안드로이드 네이티브

본 가이드는 안드로이드 네이티브 프로젝트에서 애드팝콘 SSP를 연동하기 위한 문서입니다.

애드팝콘에 대한 서비스 소개나 이용방법 안내는 아래 아티클에서 확인하실 수 있습니다.

[애드팝콘 서비스 안내]


서비스 이용 중 도움이 필요한 경우에는 아래 메일 주소로 연락 부탁 드립니다.

1. 서비스 이용 및 제휴 문의 - 애드팝콘 SSP 사업팀 (ssp_biz@igaworks.com)

2. 기술문의 : 기술지원팀(tech_support@igaworks.com)




SDK 다운로드 및 설치

아래 다운로드 링크를 통해 최신 안드로이드 SDK 패키지를 다운로드 합니다.

[애드팝콘 SSP SDK 다운로드]


다운로드 받은 .zip 파일을 압축해제하여 IgawSSP~*.aar 파일을 안드로이드 스튜디오 프로젝트로 복사한 후 gradle 을 업데이트합니다.



Gradle 설정

SDK 복사 후 아래와 같이 build.gradle 에 dependiencies 를 추가하고 업데이트 합니다.

   dependencies {
       compile fileTree(dir: 'libs', include: ['*.jar'])
       compile 'com.android.support:appcompat-v7:25.1.0'
       compile(name: 'IgawSSP_1.0.6a', ext: 'aar')
       repositories {
           flatDir {
               dirs 'libs'
           }
       }
   }

       

프로가드 설정

안드로이드 스튜디오의 app/proguard-rules.pro 파일에 애드팝콘 SDK에 대한 난독화 예외설정을 추가합니다.

##---------------Begin: proguard configuration for Igaworks Common  ----------
-keep class com.igaworks.** { *; }
-dontwarn com.igaworks.**
##---------------End: proguard configuration for Igaworks Common   ----------

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.igaworks.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.igaworks.adbrix.model.** { *; }

##---------------End: proguard configuration for Gson  ----------




매니페스트 설정

애드팝콘 SSP를 이용하기 위한 내용을 AndroidManifest.xml 파일에 추가합니다.


앱키 & 해시키 추가

Igaworks 홈페이지에서 애드팝콘 앱 등록 후 발급받은 앱키, 해시키를 <application></application> 태그 안에 추가합니다.

<application>
...
    <meta-data android:name="igaworks_app_key" android:value="이곳에_앱키를_입력하세요" />
    <meta-data android:name="igaworks_hash_key" android:value="이곳에_해시키를_입력하세요" />
...
</application>


퍼미션 추가

<manifest></manifest> 태그 안에 필수 퍼미션을 추가합니다.

<manifest>
...
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...
</manifest>



필수코드연동

애드팝콘 SSP에서는 띠배너, 전면 형태의 광고를 제공합니다. 각 광고의 형태에 따라서 연동을 진행하기 전에 기본 API를 이용하여 초기화 작업을 해야 합니다.


SSP SDK 초기화

init API를 어플리케이션 실행 후 최초로 로드되는 activity 혹은 SSP 광고를 노출하고자 하는 activity에서 호출하여 SDK를 초기화합니다.

IgawSSP.init(MyDisplayAdSampleActivity.this);


리소스 해제

destroy API를 이용하여 어플리케이션이 종료될 때 메모리에 할당된 SSP 관련 리소스(View,Memory)를 해제합니다.

앱이 종료될 때 호출되는 activity의 onDestroy()에서 호출합니다.

@Override
protected void onDestroy() {
	// TODO Auto-generated method stub
	super.onDestroy();
	IgawSSP.destroy();
}


안드로이드 9.0 HTTP 통신 대응

Android P 부터 일반 텍스트 트래픽(암호화 되지 않은 HTTP)은 기본적으로 차단 됩니다.

애드팝콘 SSP에서 취급하는 광고는 기본적으로 HTTPS를 사용하고 있으나 미디에이션 광고에서는 HTTPS 사용 여부를 확신할 수 없기 때문에 AndroidManifest.xml 파일에 아래 설정을 추가 부탁 드립니다.

<manifest>
   <application android:networkSecurityConfig="@xml/network_security_config"
                   ... >
       ...
   </application>
</manifest>


네트워크 보안 구성 파일 추가

네트워크 보안 구성 기능은 res/xml/network_security_config.xml 파일에 아래 설정을 추가 부탁 드립니다.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <base-config cleartextTrafficPermitted="true" />
</network-security-config>

배너 광고

배너는 SSP의 가장 일반적인 광고 형태로 앱의 하단이나 상단에 노출되는 띠 형태의 광고입니다.


배너 뷰 인스턴스 생성


i. xml 방식

배너 광고가 노출될 뷰를 사용 중이신 Layout.xml 파일에 추가합니다.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">
	<!-- AdPOPcorn SSP Banner View -->
	<com.igaworks.ssp.part.banner.IgawBannerAd
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
		android:id="@+id/banner"/>
</LinearLayout>


xml 에서 형성된 인스턴스를 추가 합니다.

Private IgawBannerAd igawBannerAd;
  
  @Override
    protected void onCreate(Bundle savedInstanceState) {
    igawBannerAd = (IgawBannerAd)findViewById(R.id.banner);
}


ii. 코드방식

아래의 코드를 추가하여 인스턴스를 생성합니다.

Private IgawBannerAd igawBannerAd;
  
  @Override
    protected void onCreate(Bundle savedInstanceState) {
    igawBannerAd = new IgawBannerAd(context);
}


배너 PLACEMENT ID 설정 

아래 코드를 추가하여 배너광고의 PLACEMENT ID 를 설정합니다. 배너광고 PLACEMENT ID 는 애드팝콘 SSP 페이지에서 생성이 가능합니다.

igawBannerAd.setPlacementId(“배너광고_PLACEMENT_ID”);


배너 광고 요청 사이즈 설정 (Default :  320x50)

배너 사이즈는 두 가지 옵션으로 AdSize enum class 로 전달하며 사이즈는 AdSize.BANNER_320x50 / AdSize.BANNER_300x250 으로 설정 가능합니다.

igawBannerAd.setAdSize(AdSize.BANNER_320x50);


배너 광고 요청 갱신주기 설정 (Default :  60초)

IGAWorks 에서 제공하는 배너 광고에 대한 갱신주기를 설정합니다. 설정가능 범위는 15~300초 사이이며 -1 로 설정 시 자동으로 갱신되지 않습니다.

igawBannerAd.setRefreshTime(50);


네트워크 스케쥴 타임아웃 설정 (Default : 5초)

IGAWorks 에서 제공하는 배너 광고에 대한 네트워크 스케쥴 타임아웃을 설정합니다. 

배너 광고 로딩 시 각 네트워크 별로 타임아웃 시간을 주어 해당 시간 안에 광고를 받지 못할 경우 , 다음 네트워크로 넘어가게 됩니다.

igawBannerAd.setNetworkScheduleTimeout(3);


배너 광고 애니메이션 

IGAWorks 에서 제공하는 배너 광고는 총 7가지의 애니메이션을 추가할 수 있습니다.

  • BannerAnimType.NONE: 배너 애니메이션 없음 (기본)
  • BannerAnimType.FADE_IN :  페이드 인 애니메이션
  • BannerAnimType.SLIDE_LEFT : 왼쪽으로 슬라이드 애니메이션
  • BannerAnimType.SLIDE_RIGHT: 오른쪽으로 슬라이드 애니메이션
  • BannerAnimType.TOP_SLIDE : 윗쪽으로 슬라이드 애니메이션
  • BannerAnimType_BOTTOM_SLIDE : 아래쪽으로 슬라이드 애니메이션
  • BannerAnimType_CIRCLE : 배너 회전 애니메이션
bannerAdView.setBannerAnimType(BannerAnimType.SLIDE_LEFT);


배너 배경색 채우기

IGAWorks 에서 제공하는 배너 광고는 배너 광고가 나오는 뷰의 빈 공간에 배경색을 채울 수 있습니다. (기본 설정은 배경채우기로 설정되어 있습니다.)

bannerAdView.setAutoBgColor(false);


배너 뷰 광고 요청 

배너 광고 노출을 원하는 시점에 loadAd() API 를 호출하여 서버에 광고를 요청합니다.

igawBannerAd.loadAd();


배너 뷰 광고 중단 

배너 광고 노출을 더 이상 하고 싶지 않은 시점에 호출합니다. 일반적으로 배너가 노출된 activity 나 fragement 가 destroy 할 때 호출합니다.

주의 : 단 onPause 상태 진입시 stopAd 를 호출할 경우 클릭 리포트 수치가 누락되는 경우가 발생하므로

해당 배너 뷰가 포함된 activity 나 fragment 가 destory 상태 진입시에 호출하여 주시길 부탁드립니다.

igawBannerAd.stopAd();


배너 광고 로드 여부 체크

배너 광고 로드 시 광고 유/무를 파악할때 호출 합니다. (리턴 true = 광고 로드 성공 , flase = 광고 로드 실패)

igawBannerAd.isDisplayed()


이벤트 리스너

배너 광고를 불러올 때 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

  • OnBannerAdReceiveSuccess : 배너 광고 로딩 성공
  • OnBannerAdReceiveFailed : 베너 광고 로딩 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
  • getCurrentNetwork : 배너 광고 로딩 시 동작중인 네트워크 값 호출
igawBanner.setBannerEventCallbackListener(new IBannerEventCallbackListener(){
		
	@Override
	public void OnBannerAdReceiveSuccess() {
               Log.i("IgawSSPTestApp", "320x50 bannerAdView.getCurrentNetwork() : " + bannerAdView.getCurrentNetwork());	
	}
	
	@Override
	public void OnBannerAdReceiveFailed(SSPErrorCode sspErrorCode) {
                Log.d("DEBUG", "Fail Loading Banner Ad, ResultCode : " + SSPErrorCode.getErrorCode() + ", ResultMsg : " + sspErrorCode.getErrorMessage());	
	}
});


배너 광고 미디에이션 옵션  

IGAWorks 에서 제공하는 Cauly, Mopub, Mezzo Media 에 대한 배너 광고의 옵션을 설정 할 수 있습니다.


Cauly

  • IgawBannerAd,MediationExtraData.CAULY_DYNAMIC_RELOAD_INTERVAL : 광고 노출 주기를 카울리측에서 컨트롤 함 (기본값 true)
  • IgawBannerAd.MediationExtraData.CAULY_RELOAD_INTERVAL :  광고노출 주기를 매체에서 컨트롤 함 (CAULY_DAYNAMIC_RELOAD_INTERVAL 를 False 로 변경 후 사용가능 / 기본값 20s / 10~120 사이로 설정 가능)
  • IgawBannerAd.MediationExtraData.CAULY_THREAD_PRIORITY : 스레드 우선순위 설정 (기본값 : 5 / 설정범위 1~10)
  • IgawBannerAd.MediationExtraData.CAULY_ENABLE_LOCK : 카울리 광고 잠금 화면 노출 원할 경우 true 설정 (기본값 false)


        Mopub

  • IgawBannerAd.MediationExtraData.MOPUB_AUTO_REFRESH_ENABLED : Mopub 광고 자동 갱신 기능 사용 여부 (기본값 true)


       Mezzo Media

  • IgawBannerAd.MediationExtraData.MEZZO_BACKSTRETCH : 배너 광고의 백그라운드 영역 설정 방식 (0: 배경 자동채우기 (기본값) 1: 투명)
  • IgawBannerAd.MediationExtraData.MEZZO_LOCATION_TYPE : 배너 광고의 위치 컨트롤 (0 : center (기본값), 1 : left , 2 : right)
  • IgawBannerAd.MediationExtraData.MEZZO_MEDIA_TYPE : 배너 광고 형태 설정 (0 : HTML (기본값), 1 : Image)
bannerAdView = (IgawBannerAd) findViewById(R.id.banner_container_2);
 
HashMap bannerMediationExtras = new HashMap<>();
bannerMediationExtras.put(IgawBannerAd.MediationExtraData.CAULY_DYNAMIC_RELOAD_INTERVAL, true);
bannerMediationExtras.put(IgawBannerAd.MediationExtraData.CAULY_RELOAD_INTERVAL, 40);
bannerMediationExtras.put(IgawBannerAd.MediationExtraData.MEZZO_LOCATION_TYPE, 2);
bannerMediationExtras.put(IgawBannerAd.MediationExtraData.MEZZO_MEDIA_TYPE, 1);
bannerAdView.setMediationExtras(bannerMediationExtras);



전면 광고

전면광고는 화면 전체를 덮는 형태의 광고입니다. 다음을 참고하여 전면광고를 연동합니다.


전면 광고 인스턴스 생성 

아래 코드를 추가하여 전면 광고 인스턴스를 생성합니다.

Private InterstitialAd interstitialAd;
     	
      @Override
         protected void onCreate(Bundle savedInstanceState) {
	 interstitialAd = new InterstitialAd (context);
}


전면 PLACEMENT ID 설정

아래 코드를 추가하여 전면광고의 PLACEMENT ID 를 설정합니다. 전면광고 PLACEMENT ID 는 애드팝콘 SSP 페이지에서 생성이 가능합니다.

interstitialAd.setPlacementId(“전면광고PlacementId”);


전면 광고 요청 

전면 광고 노출을 원하는 시점에 loadAd() API 를 호출하여 서버에 광고를 요청합니다.

interstitialAd.loadAd();


전면 광고 노출 

전면 광고 노출 시점에 아래 API 를 추가하여 광고를 노출합니다.

interstirialAd.showAd();


전면 광고가 노출될 activity 지정

아래 코드를 추가하여 전면 광고의 Load API 를 호출한 activity 가 아닌 다른 곳에서 show 를 하고자 할 경우, 현재의 activity 에서 호출합니다.

interstitialAd.setCurrentActivity(this);


전면 광고 로드 여부 체크

전면 광고 로드 시 광고 유/무를 파악할 때 호출 합니다. (리턴 true = 광고 로드 성공 , false = 광고 로드 실패)

interstitialAd.isLoaded()


전면 비디오 광고

구글에서 제공하는 IMA SDK를 기반으로 전면 비디오 광고를 제공하고 있습니다.

전면 지면 에서 비디오 광고를 노출하고자 할 경우 , IMA SDK를 필수적으로 추가 하여야 합니다.


1) Add IMA SDK

Application level의 build.gradle 파일의 dependencies에 아래 사항을 추가 합니다.

Implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.8.7'
implementation 'com.google.android.gms:play-services-ads:15.0.1'


2) AndroidManifest.xml

AndroidManifest.xml 내에 <application> 태그 안에 아래 사항을 추가 합니다.

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

CAUTION!!!  IMA 가이드 페이지 에서 Adding the IMA Android SDk to the player app 부분을 확인 부탁 드립니다.


이벤트 리스너

1) 전면 광고 Load 이벤트 리스너

전면 광고를 불러올 때 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

  • OnInterstitialLoaded : 전면 광고 로딩 성공
  • OnInterstitialReceiveFailed : 전면 광고 로딩 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
  • getCurrentNetwork : 전면 광고 로딩 시 동작중인 네트워크 값 호출
 interstitialAd.setInterstitialLoadEventCallbackListener(new IInterstitialLoadEventCallbackListener() {
    @Override
    public void OnInterstitialLoaded() {
        Toast.makeText(MainActivity.this, "LoadEventCallback OnInterstitialLoaded", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void OnInterstitialReceiveFailed(SSPErrorCode errorCode) {
        Toast.makeText(MainActivity.this, "LoadEventCallback OnInterstitialReceiveFailed", Toast.LENGTH_SHORT).show();
    }
});


2) 전면 광고 Show 이벤트 리스너

전면 광고 열고 닫을 경우에 대한 이벤트 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

  • OnInterstitialOpened : 전면 광고 열기
  • OnInterstitialOpenFailed : 전면 광고 열기 실패 
  • OnInterstitialClosed : 전면 광고 닫기
    닫기 이벤트가 발생한 방법에 따라 closeEvent를 전달해 줍니다.
    단 , 미디에이션 광고의 경우에는 SSP에서 확인할 수 없이 Unknown으로 전달되어 집니다.
interstitialAd.setInterstitialShowEventCallbackListener(new IInterstitialShowEventCallbackListener() {
    @Override
    public void OnInterstitialOpened() {

    }

    @Override
    public void OnInterstitialOpenFailed(SSPErrorCode errorCode) {

    }

    @Override
    public void OnInterstitialClosed(int CloseEvent) {
         
         // UNKNOWN = 0;
         // CLICK_CLOSE_BTN = 1;
         // PRESSED_BACK_KEY = 2;
         // SWIPE_RIGHT_TO_LEFT = 3;
         // SWIPE_LEFT_TO_RIGHT = 4;
         // AUTO_CLOSE = 5;

    }
});


전면 광고 커스텀 옵션

전면 광고 노출시 아래와 같은 커스텀 옵션을 제공합니다. (InterstitialAd.CustomExtraData 에 정의되어 있는 값 사용)

필요한 옵션 설정 후 "endingInterstitialAd.setCustomExtras(extras);" API 를 호출합니다.

  • IGAW_AD_BACKGROUND_COLOR : 전면 광고 배경색 및 투명도 변경(Int 형) -> Default : Black , 투명도 : 0 (#ff000000)
  • IGAW_AD_CANCELABLE_TIME_MILLIS : 전면 광고 최소 노출 시간 설정 (Int 형) -> Default : 0s
  • IGAW_AD_ENABLE_SWIPE_CLOSE : Swipe 를 이용하여 전면광고 닫기 기능 추가 (Boolean 형) -> Default : false
  • IGAW_AD_HIDE_CLOSE_BTN : 전면 광고 우측 상단 닫기 버튼 노출 여부 설정 (Boolean 형) -> Default : false
  • IGAW_AD_SWIPE_MIN_DISTANCE_DP : Swipe 동작을 위한 최소 swipe 거리 -> Default : 120p
  • IGAW_AD_CLOSE_BTN_MARGIN_FROM_EDGE 
    기본 값은 true이며 , 중앙 광고 이미지를 기준으로 마진을 주고 싶은 경우 , false로 변경하여 사용 하여야 합니다.
  • IGAW_AD_CLOSE_BTN_LEFT_MARGIN : IGAW 전면 광고 닫기 버튼 좌측 마진 -> Default : -28dp
  • IGAW_AD_CLOSE_BTN_RIGHT_MARGIN : IGAW 전면 광고 닫기 버튼 우측 마진 -> Default : 20dp
  • IGAW_AD_CLOSE_BTN_TOP_MARGIN : IGAW 전면 광고 닫기 버튼 상단 마진 -> Default : 20dp
  • IGAW_AD_CLOSE_BTN_BOTTOM_MARGIN : IGAW 전면 광고 닫기 버튼 하단 마진 -> Default : 0
  • IGAW_AD_DISABLE_BACK_BTN : IGAW 전면 광고 백키 종료 사용 안함(Boolean형)  -> Default : false
  • IS_ENDING_AD : 전면 광고에 종료 메시지 노출 여부 (Boolean 형) -> Default : false
  • ENDING_TEXT : 종료 광고 메시지 변경 (String 형) -> Default : 뒤로가기를 한 번 더 누르시면 종료됩니다.  
  • ENDING_TEXT_SIZE : 종료 광고 메시지 크기 변경 (Int 형) -> Default : 11sp
  • ENDING_TEXT_COLOR : 종료 광고 메시지 색상 변경 (Int 형) -> Default : White
  • ENDING_TEXT_GRAVITY : 종료 광고 메시지 정렬 위치 변경 (Int 형) -> Default : 우측 정렬
endingInterstitialAd = new InterstitialAd(this);

endingInterstitialAd.setPlacementId(IGAWORKS_TEST_INTERSTITIAL_PLACEMENT_ID);

HashMap extras = new HashMap<>();

// 배경색 변경
extras.put(InterstitialAd.CustomExtraData.IGAW_AD_BACKGROUND_COLOR, Color.parseColor("#ff0000"));

// 배경색 + 투명도 변경
extras.put(InterstitialAd.CustomExtraData.IGAW_AD_BACKGROUND_COLOR, Color.parseColor("#11000000"));

extras.put(InterstitialAd.CustomExtraData.IGAW_AD_CANCELABLE_TIME_MILLIS, 3000);
extras.put(InterstitialAd.CustomExtraData.IGAW_AD_ENABLE_SWIPE_CLOSE, true);
extras.put(InterstitialAd.CustomExtraData.IGAW_AD_HIDE_CLOSE_BTN, true);
extras.put(InterstitialAd.CustomExtraData.IGAW_AD_SWIPE_MIN_DISTANCE_DP, 120);
      
//전면광고를 Ending 배너로 사용하실 경우 아래 옵션을 추가합니다.

extras.put(InterstitialAd.CustomExtraData.IS_ENDING_AD, true);
extras.put(InterstitialAd.CustomExtraData.ENDING_TEXT, "백키를 누르시면 종료 시켜드립니다! 감사합니다\n");
extras.put(InterstitialAd.CustomExtraData.ENDING_TEXT_SIZE, 14);
extras.put(InterstitialAd.CustomExtraData.ENDING_TEXT_COLOR, Color.parseColor("#ffffff"));
extras.put(InterstitialAd.CustomExtraData.ENDING_TEXT_GRAVITY, Gravity.RIGHT);

endingInterstitialAd.setCustomExtras(extras);
       
//Close 버튼 디바이스 우측 상단 기준 커스텀
       
HashMap customExtras = new HashMap<>();
       
customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_LEFT_MARGIN, -28); // 영향 받지 않음
customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_RIGHT_MARGIN, 50);
customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_TOP_MARGIN, 50);
customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_BOTTOM_MARGIN, 0); // 영향 받지 않음
interstitialAd.setCustomExtras(customExtra);
       
//중앙 광고물의 Close 버튼 우측 상단 기준 커스텀
//광고물 기준으로 커스텀 진행 시 디바이스 가로 , 세로 길이와 광고물의 가로 , 세로 길이에 따라 영향 받는 옵션 값이 달라짐.
//광고물이 전체 화면에 노출 되는 경우 IGAW_AD_CLOSE_BTN_RIGHT_MARGIN, IGAW_AD_CLOSE_BTN_TOP_MARGIN 영향 받음 //디바이스 화면이 광고물 보다 더 큰 경우 IGAW_AD_CLOSE_BTN_LEFT_MARGIN, IGAW_AD_CLOSE_BTN_BOTTOM_MARGIN 영향 받음. HashMap customExtras = new HashMap<>(); customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_MARGIN_FROM_EDGE, false); customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_LEFT_MARGIN, -28); customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_RIGHT_MARGIN, 50); customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_TOP_MARGIN, 50); customExtras.put(InterstitialAd.CustomExtraData.IGAW_AD_CLOSE_BTN_BOTTOM_MARGIN, 0); interstitialAd.setCustomExtras(customExtra);



리워드 비디오 광고

리워드를 제공하는 비디오 광고 입니다. 비디오 광고 종료 시 , event callback 으로 설정하신 리워드 정보를 전달 합니다.


1) Add IMA SDK

Application level의 build.gradle 파일의 dependencies에 아래 사항을 추가 합니다.

Implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.8.7'
implementation 'com.google.android.gms:play-services-ads:15.0.1'


2) AndroidManifest.xml

AndroidManifest.xml 파일 <application> 태그 안에 아래 사항을 추가 합니다.

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

CAUTION!!!  IMA 가이드 페이지 에서 Adding the IMA Android SDk to the player app 부분을 확인 부탁 드립니다.


리워드 비디오 광고 인스턴스 생성

아래 코드를 추가하여 전면 광고 인스턴스를 생성합니다.

Private IgawRewardVideoAd igawRewardVideoAd;
     	
      	@Override
         protected void onCreate(Bundle savedInstanceState) {
	 	igawRewardVideoAd = new IgawRewardVideoAd (context);
	}

리워드 비디오 광고 PLACEMENT ID 설정

아래 코드를 추가하여 리워드 비디오 광고의 PLACEMENT ID를 설정 합니다.

리워드 비디오 광고 PLACEMENT ID는 애드팝콘 SSP 페이지에서 생성 가능 합니다.

igawRewardVideoAd.setPlacementId(“리워드광고PlacementId”);        


네트워크 스케쥴 타임아웃 설정 (Default : 10초)

IGAWorks 에서 제공하는 리워드 비디오 광고에 대한 네트워크 스케쥴 타임아웃을 설정합니다. 

리워드 비디오 광고 로딩 시 각 네트워크 별로 타임아웃 시간을 주어 해당 시간 안에 광고를 받지 못할 경우 , 다음 네트워크로 넘어가게 됩니다.

igawRewardVideoAd.setNetworkScheduleTimeout(3);

CAUTION!!! 네트워크 스케쥴 타임아웃 기능은 SSP 2.0.8v 부터 적용 가능 합니다.


리워드 비디오 광고 요청

리워드 광고 노출을 원하는 시점에 loadAd() API를 호출하여 서버에 광고를 요청 합니다.

igawRewardVideoAd.loadAd();


리워드 비디오 광고 노출

리워드 광고 노출 시점에 아래 API를 추가하여 광고를 재생 합니다.

igawRewardVideoAd.showAd();


리워드 비디오 광고 이벤트 리스너

리워드 광고에서 발생하는 이벤트에 대한 리스너를 설정 합니다. 제공되는 이벤트 리스너와 구현 예시는 아래와 같습니다.

  • OnRewardVideoAdLoaded() : 비디오 광고 로딩 성공
  • OnRewardVideoAdLoadFailed(SSPErrorCode errorCode) : 비디오 광고 로딩 실패
  • OnRewardVideoAdOpened() : 비디오 광고 노출 성공 
  • OnRewardVideoAdOpenFalied() : 비디오 광고 노출 실패
  • OnRewardVideoAdClosed() : 비디오 광고 닫기
  • OnRewardVideoPlayCompleted(long quantity, String currency) : 애드팝콘 SSP 비디오 광고 재생 완료
  • OnMintegralVideoCompleted(float rewardAmount); : mintegral 광고 종료 시 호출
  • OnUnityAdsVideoCompleted(); : unity ads 광고 종료 시 호출
  • OnAdMobVideoCompleted(int amount); : admob 광고 종료 시 호출
  • OnAdColonyVideoCompleted(int rewardAmount); : AdColony 광고 종료 시 호출
  • OnVungleVideoCompleted(); : Vungle 광고 종료 시 호출
  • OnAppLovinCompleted(); : AppLovin 광고 종료 시 호출

igawRewardVideoAd.setRewardVideoAdEventCallbackListener(new IRewardVideoAdEventCallbackListener() {

    @Override
    public void OnRewardVideoAdLoaded() {
    }

    @Override
    public void OnRewardVideoAdLoadFailed(SSPErrorCode errorCode) {
    }

    @Override
    public void OnRewardVideoAdOpened() {
    }

    @Override
    public void OnRewardVideoAdOpenFalied() {
    }

    @Override
    public void OnRewardVideoAdClosed() {
    }

    @Override
    public void OnRewardVideoPlayCompleted(long quantity, String currency) {
    }
    
    @Override
    public void OnMintegralVideoCompleted(float rewardAmount) {
    }
    
    @Override
    public void OnUnityAdsVideoCompleted() {
    }

    @Override
    public void OnAdMobVideoCompleted(int amount) {

    }

    @Override
    public void OnAdColonyVideoCompleted(int rewardAmount) {

    }

    @Override
    public void OnVungleVideoCompleted() {

    }

    @Override
    public void OnAppLovinCompleted() {

    }

});


네이티브 광고

네이티브 형태의 광고를 제공 합니다.


네이티브 광고 인스턴스 생성

아래 코드를 추가하여 네이티브 광고 인스턴스를 생성 합니다.

Private IgawNativeAd igawNativeAd;
     	
@Override
protected void onCreate(Bundle savedInstanceState) {
	// Layout xml 사용할 경우
	igawNativeAd = (IgawNativeAd) findViewById(R.id.igaw_native_ad);
}

네이티브 광고 PLACEMENT ID 설정

아래 코드를 추가하여 네이티브 광고의 PLACEMENT ID를 설정 합니다.

네이티브 광고 PLACEMENT ID는 애드팝콘 SSP 페이지에서 생성 가능합니다.

igawNativeAd.setPlacementId(“네이티브 PlacementId”);
                 


네이티브 레이아웃 구성

네이티브 레이아웃의 구성은 미디에이션 사용 여부에 따라 달라지게 됩니다.

아래 두 링크를 참고하여서 레이아웃을 구성 부탁 드립니다.

CAUTION!!!   v2.0.4 부터 네이티브 미디에이션이 추가됨에 따라 네이티브 연동 방식이 변경 되었으니

v2.0.3을 사용하고 있으신  매체에서는 아래 레이아웃 구성가이드를 참고하여서 재 연동 부탁 드립니다.


[네이티브 광고 레이아웃 구성 가이드]

[네이티브 광고 미디에이션 레이아웃 구성 가이드]


네이티브 광고 요청

네이티브 광고 영역에 광고를 로드하고자 할 경우 , 아래 API를 추가하여 광고를 요청 합니다.

광고가 정상적으로 수신 될 경우 , 아래 layout 형태로 광고가 노출 됩니다.  (igaw_native_ad_layout_template.xml 사용시)

igawNativeAd.loadAd();



네이티브 광고 이벤트 리스너

네이티브 광고에서 발생하는 이벤트를 받고자 할 경우 , 이벤트 리스너를 생성하여 전달해 줍니다.

이벤트 리스너를 통해 들어오는 이벤트들을 아래와 같습니다.

igawRewardVideoAd.setNativeAdEventCallbackListener (new INativeAdEventCallbackListener ());

  • onNativeAdLoadSuccess : 네이티브 광고 요청 성공 시
  • onNativeAdLoadFailed : 네이티브 광고 요청 실패 시
  • onImpression : 네이티브 광고가 화면에 노출되었을 때
  • onClicked : 네이티브 광고를 클릭 했을 때


igawNativeAd.setNativeAdEventCallbackListener (new INativeAdEventCallbackListener () {
    @Override
    public void onNativeAdLoadSuccess () {
    }

    @Override
    public void onNativeAdLoadFailed (SSPErrorCode errorCode) {
    }

    @Override
    public void onImpression () {
    }

    @Override
    public void onClicked () {
    }
});


네이티브 광고 종료

네이티브 광고 인스턴스를 더 이상 사용하지 않을 경우 , destroy API를 호출 하여 메모리 정리를 진행 합니다.

igawNativeAd.destroy();


APPENDIX : SSP 응답 에러 코드 정의

각 광고 별 이벤트 리스너로 전달되는 에러코드의 정의입니다.

코드 메시지 설명
200 Exception 일반 에러
1000 Invalid Parameter 잘못된 파라미터
9999 Unknown Server Error 알려지지 않은 서버 에러
2000 Invalid Media Key 잘못된 앱키
2030 Invalid Spot Key 잘못된 스팟키
2100 Empty Campaign 광고 없음
2200 Invalid Third Party Name 외부 네트워크 정보 로드 실패
3200 Native Spot Does Not Initialized 네이티브 설정 초기화 오류
5000 Server Timeout 서버 타임 아웃
5001 Load Ad Failed 특정 네트워크 광고 로드의 실패
5002 No Ad 모든 네트워크 광고 로드의 실패



APPENDIX : SSP 미디에이션

미디에이션 기능을 사용하기 위해 다음 아티클을 참고하여 진행합니다.

[애드팝콘 SSP : 안드로이드 (미디에이션)]