미디에이션 (Android)

미디에이션이란 디스플레이 광고지면에 타 광고네트워크의 광고를 라이브 할 수 있는 기능을 의미하며, 내부/자체 광고의 운영 및 여러 국내/해외의 외부 광고를 노출시킬 수 있어 수익극대화에 효과적입니다.

1. 주의 사항

애드팝콘 SSP 미디에이션 연동하기 전에 반드시 애드팝콘 SSP 연동이 진행 되어야 합니다. [애드팝콘 SSP : 안드로이드]

  • 애드팝콘 SSP 미디에이션 연동 시 애드팝콘 최신 SSP 버전(3.5.2)과 각 업체별 호환 버전을 반드시 확인 후 연동을 진행 부탁 드립니다.

  • 각 업체별 호환 버전은 아래 가이드 바로가기 링크에 기재되어 있으니 확인 부탁 드립니다.

  • Unity 환경의 경우 각 업체의 UnityPlugin은 사용할 필요 없이 아래 기재되어 있는 버전을 사용하시면 됩니다.

2. 호환성 관련 SDK 릴리즈 정보

SDK 버전호환성

AdPopcornSSP_v3.5.0

  • NAM 7.5.1 호환 검증 완료

AdPopcornSSP_v3.4.1

  • TapJoy 13.3.0 호환 검증 완료

AdPopcornSSP_v3.3.5

  • NAM v7.2.0

AdPopcornSSP_v3.3.4

  • Vungle 7.1.0 지원

  • UnityAds 4.9.2 지원

  • AdFit 3.15.2 지원

AdPopcornSSP_v3.3.2

  • AppLovin 12.1.0 지원

  • FAN 6.16.0 지원

  • Fyber 8.2.4 지원

  • Mintegral 16.5.81 지원

  • TapJoy 12.11.1 지원

  • UnityAds 4.7.0 지원

  • AdColony 4.8.0 지원

  • AdFit 3.13.6 지원

  • NAM 6.6.1 지원

AdPopcornSSP_v3.2.10

  • NAM 6.4.2 (v3.2.10 부터 지원)

  • Cauly 3.5.26

  • Mintegral 16.5.31

AdPopcornSSP_v3.2.6

  • NAM 6.1.1

AdPopcornSSP_v3.1.9

  • Adfit 3.12.15

  • AdMob, GAM, ADOP 21.4.0

  • APPLOVIN MAX DYNAMIC BID 11.6.0

  • Pangle 5.0.0.7

AdPopcornSSP_v3.1.7

  • AppLovin 11.6.0 대응

  • Mintegral 16.3.11 대응

  • Cauly 3.5.24 대응

  • pangle 4.7.1.3 대응

  • NAM 네이티브 로드 실패 이벤트 전달 오류 수정

AdPopcornSSP_v3.1.3

  • AdMob, GAM 21.2.0 대응

  • NAM 4.4.0 대응

AdPopcornSSP_v3.1.2

  • Pangle SDK v4.6.0.9 대응

AdPopcornSSP_v3.0.18

  • Coupang v1.2.1 대응

3. Build.gradle

1) Build.gradle(Project Level)

아래 Build.gradle 내용을 참고하여, 사용하고자 하는 업체의 SDK를 설정합니다. 업체 정보가 없을 경우에는 기본이 되는 mavenCentral() 추가로 충분합니다.

allprojects {
    repositories {
        google()
        mavenCentral()
        maven{
            url "https://maven.google.com"
        }

        // AdFit
        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }

        // TapJoy
        maven {
            name "Tapjoy's maven repo"
            url "https://sdk.tapjoy.com/"
        }

        // Pangle
        maven {
            url 'https://artifact.bytedance.com/repository/pangle'
        }

        // Cauly
        maven {
            url "s3://repo.cauly.net/releases"
            credentials(AwsCredentials) {
                accessKey "AKIAWRZUK5MFKYVSUOLB"
                secretKey "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"
            }
        }

        // Coupang
        maven {
            url "https://raw.githubusercontent.com/coupang-ads-sdk/android/main"
        }
				
	// Mintegral
        maven {
            url  "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea"
        }
    }
}

2) Build.gradle(App Level)

아래 Build.gradle 내용을 참고하여, 사용하고자 하는 업체의 SDK를 설정합니다.

// 기본
api 'com.google.android.gms:play-services-ads-identifier:18.0.0'

// 1. AdColony SDK
api 'com.adcolony:sdk:4.8.0'

// 2. AdFit
api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10'
api 'com.kakao.adfit:ads-base:3.15.2'

// 3. AdMob, AdManager, ADOP
api 'com.google.android.gms:play-services-ads:21.4.0'

// 4. Cauly
api 'com.google.android.gms:play-services-appset:16.0.0'
api 'com.fsn.cauly:cauly-sdk:3.5.26'

// 5. FAN SDK
api 'androidx.annotation:annotation:1.4.0'
api 'com.facebook.android:audience-network-sdk:6.16.0'

// 6. MezzoMedia
api files('libs/adMan_211115.jar') //version2 200

// 7. Mintegral
api 'com.mbridge.msdk.oversea:reward:16.7.41'
api 'com.mbridge.msdk.oversea:mbbid:16.7.41'
api 'com.mbridge.msdk.oversea:mbnative:16.7.41'
api 'com.mbridge.msdk.oversea:mbbanner:16.7.41'
api 'com.mbridge.msdk.oversea:newinterstitial:16.5.81'
api 'com.mbridge.msdk.oversea:mbnativeadvanced:16.5.81'

// 8. Mobon 
api('io.github.mobon:mobonSDK:1.0.0.64') {
    transitive = true
}

// 9. UnityAds
api 'com.unity3d.ads:unity-ads:4.9.2' // min target이 31이하인 경우는 4.6.0 사용

// 10. Vungle SDK
//api 'com.vungle:publisher-sdk-android:6.11.0'
//api 'androidx.core:core-ktx:1.7.0'
//api 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'

api 'com.vungle:vungle-ads:7.1.0' // For Vungle(Liftoff)

// 11. Fyber
api "com.fyber:marketplace-sdk:8.2.4"

// 12. TapJoy
api 'com.tapjoy:tapjoy-android-sdk:13.3.0'

// 13. Pangle
api 'com.pangle.global:ads-sdk:6.0.0.8'

// 14. coupang
api "com.coupang:ads:1.2.4"

// 15. AppLovin
api 'com.applovin:applovin-sdk:12.5.0'

// 16. NAM(Naver Ad Manager)
api platform('com.naver.gfpsdk:nam-bom:7.5.1')
api 'com.naver.gfpsdk:nam-core'      // GFP SDK core (mandatory)
api 'com.naver.gfpsdk:nam-nda'       // Naver S2S extension

4. 미디에이션 적용 방법

  1. 사용하고자 하는 미디에이션 업체의 SDK를 아래 리스트의 가이드 링크에서 확인 하신 뒤 build.gradle 혹은 직접 다운로드 하여 포함시켜 주시기 바랍니다.

  2. 각 업체 별 proguard 설정이 필요한 경우, 가이드 링크에서 확인 하신 뒤 반드시 설정해 주시기 바랍니다.

  3. 아래 리스트에 적힌 호환 버전 이외의 버전을 사용하고자 하는 경우 반드시 애드팝콘 SSP 사업팀 (monetize@adpopcorn.com) 문의 후 사용하시기 바랍니다.

  4. 일부 업체의 광고 타입의 경우 앱의 activity life cycle에 따라 추가 연동이 필요할 수 있습니다. 이 부분도 아래 추가 연동 부분을 참고하여 연동해 주시기 바랍니다.

Unity 개발 환경에서도 각 업체의 UnityPlugin을 설치할 필요는 없고 각 업체의 SDK만 build.gradle 해 주시면 정상 동작 합니다.

1) AndroidManifest.xml 코드 연동

아래 미디에이션 업체에 대해서는 AndroidManifest.xml 파일 내에 Key-Value 값을 설정해야 미디에이션이 정상적으로 동작합니다. 입력해야 되는 키 값에 대해서는 사업팀(monetize@adpopcorn.com)에 문의해 주시기 바랍니다.

[1] Admob, GAM, ADOP

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>

[2] Mobon

<meta-data
            android:name="com.mobon.sdk.MediaCode"
            android:value="YOUR_mobon_code"/>

[3] Coupang

<meta-data android:name="coupang_ads_affiliate_id"
            android:value="YOUR_COUPANG_AFFILAIATE_ID"/>
<meta-data android:name="coupang_ads_sub_id"
            android:value="YOUR_COUPANG_ADS_SUB_ID"/>

[4] AppLovin

<meta-data android:name="applovin.sdk.key"
            android:value="YOUR_APPLOVIN_SDK_KEY"  />

[5] NAM (Naver Ad Manager)

NAM의 nam_publisher_cd의 값은 반드시 string.xml 에 추가하여 사용 바랍니다.

<resources>
    <string name="nam_publisher_cd">7976096509</string>
</resources>
<meta-data
            android:name="com.naver.gfpsdk.PUBLISHER_CD"
            android:value="@string/nam_publisher_cd"/>

2) 미디에이션 업체 리스트

업체 명호환 버전Supported Format가이드

Admob

21.4.0

  • 배너

  • 전면

  • 네이티브

  • 전면 비디오

  • 리워드 비디오

GAM(Google Ad Manager)

21.4.0

  • 배너

  • 전면

  • 네이티브

  • 전면 비디오

  • 리워드 비디오

Facebook Audience Network

6.16.0

  • 배너

  • 전면

  • 네이티브

  • 리워드 비디오

Cauly

3.5.26

  • 배너

  • 전면

https://github.com/cauly/Android-SDK/blob/master/Android SDK 연동 가이드.md#1-CAULY-시작하기

MezzoMedia

v.200(11/15)

  • 배너

Mobon

1.0.0.64

  • 배너

  • 전면

  • 네이티브

UnityAds

4.9.2

  • 배너

  • 전면 비디오

  • 리워드 비디오

Mintegral

16.7.41

  • 배너

  • 네이티브

  • 전면 비디오

  • 리워드 비디오

Adfit

3.15.2

  • 배너

  • 네이티브 (beta)

Adcolony

4.8.0

  • 전면 비디오

  • 리워드 비디오

Vungle

7.1.0

  • 전면 비디오

  • 리워드 비디오

Fyber

8.2.4

  • 리워드 비디오

Tapjoy

13.3.0

  • 리워드 비디오

Pangle

6.0.0.8

  • 배너

  • 네이티브

  • 전면 비디오

  • 리워드 비디오

AppLovin

12.5.0

  • 배너

  • 네이티브

  • 전면 비디오

  • 리워드 비디오

Coupang

1.2.4

  • 배너

NAM(Naver Ad Manager)

7.5.1

  • 배너

  • 네이티브

4) 추가 연동 코드

[1] 배너 연동 중, 아래 업체를 미디에이션으로 사용하고자 할 경우, 아래 코드를 추가해 주시길 바랍니다.

  • Cauly, Adfit

Cauly, Adfit 사용 시
@Override
protected void onResume() {
    super.onResume();
    if(bannerAdView != null)
        bannerAdView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    if(bannerAdView != null)
        bannerAdView.onPause();
}

[2] 쿠팡 미디에이션 추가 시, Activity 화면에서 배너, 전면 광고를 연동하고자 할 경우, Activity에 LifecycleOwner 를 구현해야 광고가 노출될 수 있습니다. ComponentActivity 사용 시에는 아래 추가 연동이 필요 없습니다.

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;

public class MainActivity extends Activity implements LifecycleOwner {
    private final LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
	
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
    }		
	
    @Override
    protected void onStart() {
        super.onStart();
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
    }

    @Override
    protected void onResume() {
        super.onResume();
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
    }

    @Override
    protected void onPause() {
        super.onPause();
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
    }

    @Override
    public Lifecycle getLifecycle() {
        return lifecycleRegistry;
    }
}

Last updated