로딩중입니다
애드팝콘 DA : 안드로이드
5/4/2017 10:26:36 AM

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

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

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

[애드팝콘 서비스 안내]


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

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

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




SDK 다운로드 및 설치

[SDK 다운로드 센터] 에서 최신 안드로이드 SDK 패키지를 다운로드 합니다.

다운로드 받은 .zip 파일을 압축해제하여 IgawCommon~*.jar 파일과 IgawDisplayAd~*.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: 'IgawDisplayAd_2.0.9a', ext: 'aar')
       repositories {
           flatDir {
               dirs 'libs'
           }
       }
   }

        ※ aar 은 이클립스를 지원하지 않습니다. 이클립스를 사용하신다면 동봉된 IgawDisplayAd~*.jar 를 사용해 주시길 바랍니다.


프로가드 설정

안드로이드 스튜디오의 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  ----------





매니페스트 설정

오퍼월을 이용하기 위한 내용을 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>




애드팝콘 DA 기본 연동

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


SDK 초기화

앱이 시작되는 액티비티의 onResume(), onPause()에서 startSession, endSession api를 호출하여 SDK를 초기화합니다.

초기화가 진행되지 않으면 애드팝콘DA SDK가 정상 동작하지 않습니다.

@Override
protected void onResume() {
    super.onResume();
    IgawCommon.startSession(ActivityContext);

}

@Override
protected void onPause() {
    super.onPause();
    IgawCommon.endSession();

}


DA SDK 초기화

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

IgawDisplayAd.init(MyDisplayAdSampleActivity.this);


리소스 해제

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

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

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


미디에이션 전환 주기

setRefreshTime API를 이용하여 미디에이션 기능을 사용할 때 각 네트워크 별로 수신한 광고의 전환 주기를 설정합니다.

별도로 설정하지 않을 경우 기본값(60초)으로 유지됩니다.

//IgawDisplayAd.setRefressTime(int seconds);
IgawDisplayAd.setRefreshTime(40);


위치 정보 설정

setLocation API를 이용하여 위치 정보를 입력합니다. 입력된 정보와 일치하는 위치 타겟팅 광고가 있을 경우에 해당 광고가 노출됩니다.

//IgawDisplayAd.setLocation(long latitude, double longitude);
IgawDisplayAd.setLocation(123.456789, 23.456789);


화면방향 고정해제

setSensorLandscapeEnable API를 이용하여 전면, 엔딩, 팝업 광고의 방향 고정을 설정 또는 해제할 수 있습니다.

고정을 해제할 때에는 디바이스의 방향에 따라서 광고가 회전됩니다.

// 화면방향 고정 해제, false로 설정 시 다시 고정 됩니다.(기본값)
IgawDisplayAd.setSensorLandscapeEnable(true);



배너 광고

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


뷰 설정

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">
	<!-- AdPOPcorn DA View -->
	<com.igaworks.displayad.part.banner.view.BannerContainerView
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:id="@+id/banner_container"/>
</LinearLayout>

<!--IgawDisplayAd 2.0.8a 이하 버전에서는 아래와 같이 적용합니다.-->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">
	<!-- AdPOPcorn DA View -->
	<com.igaworks.displayad.view.BannerContainerView
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:id="@+id/banner_container"/>
</LinearLayout>


광고 노출

startBannerAd API를 호출하여 배너 광고를 노출합니다. 광고를 노출할 모든 activity의 onResume() 혹은 광고를 노출하고자 하는 시점에서 호출합니다.

//bannerView 생성
private BannerContainerView bannerView;
bannerView = (BannerContainerView)findViewById(R.id.banner_container);

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    IgawCommon.startSession(MyDisplayAdSampleActivity.this);
    // 배너 시작
    IgawDisplayAd.startBannerAd(MyDisplayAdSampleActivity.this, “배너광고스팟키”, bannerView);
}

+ bannerView : Layout.xml에 등록한 com.igaworks.displayad.view.BannerContainerView

+ 배너광고스팟키 : 애드팝콘 DA 관리페이지에서 생성한 spotkey 


광고 일시정지

pauseBannerAd API를 호출하여 배너 광고를 노출합니다. 광고를 노출한 모든 activity의 onPause()에서 호출합니다.

@Override
protected void onPause() {
    super.onPause();

    // 배너 일시정지
    IgawDisplayAd.pauseBannerAd(MainActivity.this, “배너광고스팟키”);;
}


광고 노출 정지

stopBannerAd API를 호출하여 광고의 노출을 정지합니다. 어플리케이션이 종료되는 activity의 onDestroy()에서 호출합니다.

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    // 배너 중지
    IgawDisplayAd.stopBannerAd(MyDisplayAdSampleActivity.this);
    // 배너 및 광고 리소스 해제.
    IgawDisplayAd.destroy();
}


이벤트 리스너

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

    • OnBannerAdReceiveSuccess : 배너광고 로딩 성공
    • OnBannerAdReceiveFailed : 배너광고 로딩 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
IgawDisplayAd.setBannerEventCallbackListener(MyDisplayAdSampleActivity.this, “배너광고스팟키”, 
new IBannerEventCallbackListener() { @Override public void OnBannerAdReceiveSuccess() { Log.d("DEBUG", "Complete Loading Banner Ad"); } @Override public void OnBannerAdReceiveFailed(DAErrorCode daErrorCode) { Log.d("DEBUG", "Fail Loading Banner Ad, ResultCode : " + daErrorCode.getErrorCode() + ", ResultMsg : " + daErrorCode.getErrorMessage()); } });




전면 광고

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


광고 노출

showInterstitial API를 호출하여 전면광고를 노출합니다.

public void showInterstitialAdSample () {
	  IgawDisplayAd.showInterstitialAd(MyDisplayAdSampleActivity.this, “전면광고스팟키”);
}

+ 전면광고스팟키 : 애드팝콘 DA 관리페이지에서 생성한 전면광고 spotkey


이벤트 리스너

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

    • OnInterstitialReceiveSuccess : 전면광고 로딩 성공
    • OnInterstitialReceiveFailed : 전면광고 로딩 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
    • OnInterstitialClosed : 전면광고 창 종료
IgawDisplayAd.setInterstitialEventCallbackListener(MyDisplayAdSampleActivity.this, "전면광고스팟키", 
		new IInterstitialEventCallbackListener() {
		
	@Override
	public void OnInterstitialReceiveSuccess() {
	        Log.d("DEBUG", "Complete Loading Interstitial Ad");		
	}
	
	@Override
	public void OnInterstitialReceiveFailed(DAErrorCode daErrorCode) {
                Log.d("DEBUG", "Fail Loading Interstitial Ad, ResultCode : " + daErrorCode.getErrorCode() + ", ResultMsg : " + daErrorCode.getErrorMessage());		
	}
	
	@Override
	public void OnInterstitialClosed() {
		Log.d("DEBUG", "Interstitial Ad is closed!");	
	}
});




팝업 광고

광고가 전체 화면을 덮지 않고 여백을 통해 뒷 배경이 보이는 광고 형태입니다.


광고 노출

showPopupAd API를 호출하여 팝업 광고를 노출합니다. 

public void showPopupAdSample () {
	  IgawDisplayAd.showPopupAd(MyDisplayAdSampleActivity.this, “팝업광고스팟키”);
}

+ 팝업광고스팟키 : 애드팝콘 DA 관리페이지에서 생성한 팝업광고 spotkey


이벤트 리스너

팝업광고에서 발생하는 이벤트에 대한 리스너를 제공합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

    • OnPopupAdReceiveSuccess : 팝업광고 로딩 성공
    • OnPopupAdReceiveFailed : 팝업광고 로딩 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
    • OnPopupAdClosed : 팝업광고 창 종료
IgawDisplayAd.setPopupEventCallbackListener(MyDisplayAdSampleActivity.this, "팝업광고스팟키", 
new IPopupEventCallbackListener() { @Override public void OnPopupAdReceiveSuccess() { Log.d("DEBUG", "PopupAdReceiveSuccess()"); } @Override public void OnPopupAdReceiveFailed(DAErrorCode daErrorCode) { Log.d("DEBUG", "OnPopupAdReceiveFailed(), ResultCode : " + daErrorCode.getErrorCode() + ", ResultMsg : " + daErrorCode.getErrorMessage()); } @Override public void OnPopupAdClosed() { Log.d("DEBUG", "OnPopupAdClosed()"); } });




엔딩 광고 

어플리케이션의 종료 여부를 묻는 팝업과 함께 광고를 노출하는 광고 형태입니다.


광고 로드

loadEndingAd API를 이용하여 엔딩광고를 로드합니다. 어플리케이션 시작 시점에서 미리 광고 정보를 로드할 수 있도록 호출하여야 합니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
 	//DA SDK 초기화
	IgawDisplayAd.init(MyDisplayAdSampleActivity.this);
		
	//엔딩광고로드 IgawDisplayAd 2.0.9a 부터는 필요하지 않습니다.
	IgawDisplayAd.loadEndingAd(MyDisplayAdSampleActivity.this, "엔딩광고스팟키");
}

+ 엔딩광고스팟키 : 애드팝콘 DA 관리페이지에서 생성한 팝업광고 spotkey


광고 노출

showEndingAd API를 호출하여 광고를 노출합니다. 안드로이드 뒤로가기 버튼 이벤트나 별도의 종료 액션에 연결하여 사용하는 것을 권장합니다.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
		
		IgawDisplayAd.showEndingAd(MainActivity.this, "엔딩광고스팟키");

      return true;
    }
    return super.onKeyDown(keyCode, event);
}


이벤트 리스너

엔딩광고에서 발생하는 이벤트에 대한 리스너를 제공합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

    • OnBtnClickListener : 버튼 클릭 이벤트, true-종료버튼클릭
IgawDisplayAd.setEndingAdEventCallbackListener(MyDisplayAdSampleActivity.this, "엔딩광고스팟키", 
		new IEndingAdEventCallbackListener() {
	
	@Override
	public void OnBtnClickListener(boolean isClicked) {
		Log.d("DEBUG", "Ending Btn Clicked :: " + isClicked);
	}
});




원스팟 광고

원스팟 광고는 사용자가 원하는 시점에 DA, NCPI, VIDEO AD 를 하나의 스팟에서 노출시킬 수 있는 지면입니다.


광고 노출

showOneSpotAd API를 호출하여 원스팟 광고를 노출합니다. 

public void showOneSpotAdSample () {
	  IgawDisplayAd.showOneSpotAd(MyDisplayAdSampleActivity.this, “원스팟광고스팟키”);
}

+ 원스팟광고스팟키 : 애드팝콘 DA 관리페이지에서 생성한 원스팟광고 spotkey


이벤트 리스너 생성

원스팟 광고를 로드하기 위한 인스턴스와 요청 결과가 전달될 이벤트 리스너를 아래와 같이 생성합니다.

    • OnOneSpotAdReceiveSuccess : 원스팟 광고 로드 성공,
    • OnOneSpotAdReceiveFailed : 원스팟 광고 로드 실패 (전달되는 에러코드는 아티클 하단의 테이블 참고)
    • OnOneSpotAdClosed : 원스팟 광고 닫기
    • OnVideoComplete : 원스팟 비디오 광고 노출 완료 
IgawDisplayAd.setOneSpotEventCallbackListener(MainActivity.this, mOneSpotSpotKey, new IOneSpotEventCallbackListener() {
    @Override
    public void OnOneSpotAdReceiveSuccess() {
        Log.i("IgaworksDisplayAd", "OnOneSpotAdReceiveSuccess");
        Toast.makeText(MainActivity.this, "OnOneSpotAdReceiveSuccess", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void OnOneSpotAdReceiveFailed(DAErrorCode errorCode) {
        Log.i("IgaworksDisplayAd", "OnOneSpotAdReceiveFailed : " + errorCode.getErrorMessage());
        Toast.makeText(MainActivity.this, "OnOneSpotAdReceiveFailed : " + errorCode.getErrorMessage(), Toast.LENGTH_SHORT).show();

    }

    @Override
    public void OnOneSpotAdClosed() {
        Log.i("IgaworksDisplayAd", "OnOneSpotAdClosed");
        Toast.makeText(MainActivity.this, "OnOneSpotAdClosed", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void OnVideoComplete() {
        Log.i("IgaworksDisplayAd", "OnVideoComplete");
        Toast.makeText(MainActivity.this, "OnVideoComplete", Toast.LENGTH_SHORT).show();
    }
});




APPENDIX : DA 응답 에러 코드 정의

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

코드 메시지 설명
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 : DA 미디에이션

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

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