안드로이드 SDK 연동

시작하기 전에 읽어주세요 아이언소스 SDK 는 안드로이드 OS 4.1 (API 버전 16) 이상 버전에서 지원됩니다.

아이언소스 SDK 7.3.0 버전부터, 코틀린 최소 지원 버전은 1.7.0 입니다.

SDK의 다운로드, 사용 및 접근에는 아이언소스 플랫폼 온라인 이용약관이 적용됩니다. 만약 아이언소스 모바일 SDK 퍼블리셔 온라인 이용약관에 동의하지 않으시는 경우에는 다운로드, 접근 및 사용하지 않도록 주의 부탁 드립니다.

1단계. 프로젝트에 아이언소스 SDK 추가하기

중요합니다! 앱을  target Android SDK 레벨 30 이상으로 앱 빌드하실 경우, 반드시 아이언소스 SDK 6.18.0 이상 버전을 사용해 주시길 바랍니다.

아이언소스 SDK는 6.16.0 버전부터 AAR 라이브러리 형태로 배포되고 있습니다.
반드시 아래에 기술된 정보를 토대로 Gradle 파일 상의 디펜던시 모듈 설정을 업데이트 해주시길 바랍니다.
AAR 파일에는 Manifest파일에 포함되어야 하는 Manifest Activity 클래스들이 포함되어 있으니 참고 부탁 드립니다.

아이언소스 SDK 연동 시, Gradle 디펜던시와 모듈 수동 다운로드 방식 모두 지원하고 있습니다.

Gradle

  1. 아래와 같이 프로젝트 루트 디렉토리(폴더)의 build.gradle 파일의 “repositories”절에 하기와 같이 아이언소스 Maven repository를 추가합니다.
    repositories {
        maven {
            url 'https://android-sdk.is.com/'
       }
    }
  2. 다음, 아래와 같이 아이언소스 SDK 디펜던시를 dependencies 절에 추가합니다:
    아이언소스 SDK 6.16.0 버전 부터는 AAR 라이브러리 형태로 배포되고 있으니 참고하시기 바랍니다.
    dependencies {
        implementation 'com.ironsource.sdk:mediationsdk:7.6.1' 
        // ironSource Ad Quality SDK
        implementation 'com.ironsource:adqualitysdk:7.14.3'
    }

    Gradle 버전 7 이상의 경우

    Gradle 7 이상 버전을 사용 시에는 build.grade 파일 대신 settings.gradle 파일에 repository를 추가해야 합니다. 이 때, repositories 섹션은 dependencyResolutionManagement 섹션에 포함되어 있으니 참고 부탁 드립니다:

    dependencyResolutionManagement {
        repositories {
            maven {
                url 'https://android-sdk.is.com/' 
             }
        }
    }

    직접 SDK를 다운로드 하는 경우

    1. Download Android SDK Version 8.0.0
    2. Ad Quality SDK를 다운로드 합니다.
    3. .AAR 파일을 라이브러리 프로젝트로 Import 합니다.
    4. 안드로이드 스튜디오를 사용하는 경우, 아래와 같이 아이언소스 SDK의 .AAR 파일을 다운로드하고 사용하시는 모듈에 디펜던시로 추가합니다.
    5. FileNewNew ModuleImport .AAR 로 이동하고 IronSource SDK의 .AAR 파일이 다운로드 된 경로를 지정합니다.
    6. 참고: 아이언소스 Manifest Activity들이 .AAR 파일에 포함되어 있습니다.
    7. build.gradle 파일의 dependencies 섹션에 아래의 구문을 반드시 추가해 주시기 바랍니다.
      implementation(name: 'mediationsdk-8.0.0', ext:'aar')

    8. 아이언소스 SDK 7.0.4 버전 이상부터는 반드시 코틀린JAR 파일을 대상 프로젝트에 추가해 주셔야 합니다. 코틀린 지원에 대한 자세한 사항은 여기를 참조 부탁 드립니다.

    선택사항:수동 JAR 파일 연동

    대상 프로젝트에서 mediationsdk_xxx.jar 를 사용하시는 경우, 동일한 구성으로 사용 가능합니다.

    1. 새로운 mediationsdk-xxx.aar 의 파일명을  mediationsdk-xxx.zip 으로 변경합니다.
    2. 새로운 IronSourceAdQuality-xxx.jar의 파일명을 IronSourceAdQuality-xxx.zip으로 변경합니다.
    3. Classes.jar 파일을 추출합니다.
    4. 해당 Classes.jar의 파일명을 mediationsdk_xxx.jar 로 변경합니다.
    5. AndroidManifext.xml에 후술할 내용을 추가하여 업데이트합니다.

    직접 JAR파일로 연동을 위한 AndroidManifest.xml 업데이트

    AndroidManifest.xml 파일 업데이트를 위해서는 아래의 단계를 완료해 주세요:

      1. 매니페스트 권한:
        AndroidManifest.xml 파일에서, <application> 태그 밖에 아래와 같이 필요 권한을 추가합니다:
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      2. 매니페스트 Activity 및 Provider
        AndroidManifest.xml파일의 <application> 태그 안에 아래와 같이 Activity들과 Provider를 추가합니다:
        <activity
                    android:name="com.ironsource.sdk.controller.ControllerActivity"
                    android:configChanges="orientation|screenSize"
                    android:hardwareAccelerated="true" />
        <activity
                    android:name="com.ironsource.sdk.controller.InterstitialActivity"
                    android:configChanges="orientation|screenSize"
                    android:hardwareAccelerated="true"
                    android:theme="@android:style/Theme.Translucent" />
        <activity
                    android:name="com.ironsource.sdk.controller.OpenUrlActivity"
                    android:configChanges="orientation|screenSize"
                    android:hardwareAccelerated="true"
                    android:theme="@android:style/Theme.Translucent" />
        <provider
                    android:authorities="${applicationId}.IronsourceLifecycleProvider"
                    android:name="com.ironsource.lifecycle.IronsourceLifecycleProvider" />

    레벨플레이 데모 애플리케이션

    연동 데모 애플리케이션은 레벨플레이 미디에이션 SDK를 어떻게 연동해야 하는지를 보여주는 예제입니다.

    Download Android Demo Application

    2단계. 구글 ID 퍼미션

    1. GAID 및 App Set ID 정보 취득을 가능하게 하기 위해 아래와 같이 플레이 스토어 서비스 관련 디펜던시들을 디펜던시 모듈 정의구문에 추가합니다.
      dependencies { 
          implementation fileTree(dir: 'libs', include: ['*.jar']) 
          implementation 'com.google.android.gms:play-services-appset:16.0.0' 
          implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' 
          implementation 'com.google.android.gms:play-services-basement:18.1.0' 
      }
      구글의 App Set ID에 대한 더 자세한 정보는
      여기를 참고하세요.

    2. 애플리케이션의 타겟 API 레벨이 31 이상 (안드로이드 12)인 경우 아래와 같이 매니페스트 파일에 구글 플레이 서비스의 일반 권한을 요청해야 합니다:
      <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

      구글 광고 ID 변경사항에 대해서는 여기를 참고하세요.

    아마존 기기는 구글 플레이 서비스를 사용하지 않습니다. 만약 아마존 플랫폼용 애플리케이션을 제작하시는 경우라면 위의 2번 단계는 건너뛰시기 바랍니다.

    3단계. Activity 수명주기 오버라이드

    애플리케이션 생명주기
    각 Activity 내의 onPause(), onResume() 메서드들이 각 메서드에 대응하는 아이언소스 메서드를 호출하도록 아래와 같이 오버라이드합니다:

    protected void onResume() {
            super.onResume();
            IronSource.onResume(this);
        }
    protected void onPause() {
            super.onPause();
            IronSource.onPause(this);
        }

    4단계. 리스너 설정

    아이언소스 SDK는 광고 유닛 활동 정보를 알리기 위해 여러가지 이벤트들을 송출합니다. 해당 이벤트들의 수신을 위해서는 레벨플레이 플랫폼 상에서 설정된 각 광고 유닛의 리스너를 등록합니다.

    이벤트 정보 손실을 피하기 위해서는, 반드시 해당 리스너들은 아이언소스 SDK 초기화 이전에 설정해 주시기 바랍니다.

    • 보상형 동영상 광고
      IronSource.setLevelPlayRewardedVideoListener(mLevelPlayRewardedVideoListener);
    • 인터스티셜 광고
      IronSource.setLevelPlayInterstitialListener(mLevelPlayInterstitialListener);
    • 배너 광고
      mBannerLayout.setLevelPlayBannerListener(mLevelPlayBannerListener);

    5단계. SDK 초기화

    중요합니다! 아이언소스가 지원하는 UserID나 세그먼트와 같은 일부 선택적 설정 항목의 경우 SDK 초기화 이전에 설정이 완료되어야 합니다. 해당 설정에 대한 설명은 고급 설정을 참고해 주세요.
    보상형 광고 유닛에서 유저 보상을 위해 서버간 콜백 통신을 사용하거나 Ad Quality의 사용자 이력 기능을 사용할 경우, 반드시 UserID를 설정해야 합니다.

    SDK를 초기화하기

    SDK는 2가지 방법으로 초기화가 가능합니다:

    1. adUnits 파라미터에 사용하실 광고 유닛들만 지정하는 방법으로, 이 방법은 지정된 광고 유닛들만 가져오기 때문에 이 방법을 권장 드립니다. adUnits 파라미터는 string 배열입니다.
      /**
      *Ad Units should be in the type of IronSource.Ad_Unit.AdUnitName, example 
      */
      IronSource.init(this, appKey, IronSource.AD_UNIT.INTERSTITIAL, IronSource.AD_UNIT.REWARDED_VIDEO, IronSource.AD_UNIT.BANNER);

      이 초기화 방식을 사용하면, 앱 세션상의 각기 다른 지점에서 각 광고유닛에 대해 별도로 초기화 할 수 있습니다.

      //Rewarded Video
      IronSource.init(this, appKey, IronSource.AD_UNIT.REWARDED_VIDEO);
      //Init Interstitial 
      IronSource.init(this, appKey, IronSource.AD_UNIT.INTERSTITIAL); 
      //Init Banner
      IronSource.init(this, appKey,IronSource.AD_UNIT.BANNER);
    2. 또는, 아래와 같이 SDK를 초기화할 수도 있으며 이 경우 SDK는 레벨플레이 플랫폼에서 정의된 광고 유닛들을 모두 초기화합니다:
      IronSource.init(this, appKey);

    초기화 완료 콜백           

    아이언소스 SDK 7.2.1 이상 버전부터 SDK는 초기화 성공 시 이 정보를 이벤트 콜백으로 전달합니다. 해당 리스너는 초기화 과정 완료 알림을 제공하며, 이후 광고 로딩을 시작하실 수 있습니다. 이 콜백은 세션 당 최초 초기화 시 1회만 송출됩니다. 

    IronSource.init(this, appKey,new InitializationListener){
       
        @Override
        public void onInitializationComplete() {
            // ironSource SDK is initialized 
        }
    

    ProGuard를 사용하는 경우

    아이언소스 SDK를 ProGuard와 함께 사용하시는 경우, 아래와 같은 코드를 ProGuard 파일에 추가해 주셔야 합니다:

    -keepclassmembers class * implements android.os.Parcelable {
        public static final android.os.Parcelable$Creator *;
    }
    #noinspection ShrinkerUnresolvedReference
    #unity
    -keep class com.google.android.gms.ads.** {public *;}
    -keep class com.google.android.gms.appset.** { *; }
    -keep class com.google.android.gms.tasks.** { *; }
    #adapters
    -keep class com.ironsource.adapters.** { *; }
    #sdk
    -dontwarn com.ironsource.**
    -dontwarn com.ironsource.adapters.**
    -keepclassmembers class com.ironsource.** { public *; }
    -keep public class com.ironsource.**
    -keep class com.ironsource.adapters.** { *;
    }
    #omid
    -dontwarn com.iab.omid.**
    -keep class com.iab.omid.** {*;}
    #javascript
    -keepattributes JavascriptInterface
    -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
    #For AmazonAps integration
    -keep class com.amazon.device.ads.DtbThreadService {
        static *;
    }
    -keep public interface com.amazon.device.ads** {*; }
    #For AppLovin integration
    -keepclassmembers class com.applovin.sdk.AppLovinSdk {
        static *;
    }
    -keep public interface com.applovin.sdk** {*; }
    -keep public interface com.applovin.adview** {*; }
    -keep public interface com.applovin.mediation** {*; }
    -keep public interface com.applovin.communicator** {*; }
    #For Bytedance integration
    -keep public interface com.bytedance.sdk.openadsdk** {*; }
    #For Facebook integration
    -keepclassmembers class com.facebook.ads.internal.AdSdkVersion {
        static *;
    }
    -keepclassmembers class com.facebook.ads.internal.settings.AdSdkVersion {
        static *;
     }
    -keepclassmembers class com.facebook.ads.BuildConfig {
        static *;
     }
    -keep public interface com.facebook.ads** {*; }
    #For Fairbid
    -keep public interface com.fyber.fairbid.ads.interstitial** {*; }
    -keep public interface com.fyber.fairbid.ads.rewarded** {*; }
    -keep class com.fyber.offerwall.*
    #For Fivead
    -keep public interface com.five_corp.ad** {*; }
    #For Fyber(Inneractive) integration
    -keep public interface com.fyber.inneractive.sdk.external** {*; }
    -keep public interface com.fyber.inneractive.sdk.activities** {*; }
    -keep public interface com.fyber.inneractive.sdk.ui** {*; }
    #For HyprMX integration
    -keepclassmembers class com.hyprmx.android.sdk.utility.HyprMXProperties {
        static *;
    }
    -keepclassmembers class com.hyprmx.android.BuildConfig {
        static *;
    }
    -keep public interface com.hyprmx.android.sdk.activity** {*; }
    -keep public interface com.hyprmx.android.sdk.graphics** {*; }
    # For Inmobi integration
    -keep class com.inmobi.*
    -keep public interface com.inmobi.ads.listeners** {*; }
    -keep public interface com.inmobi.ads.InMobiInterstitial** {*; }
    -keep public interface com.inmobi.ads.InMobiBanner** {*; }
    # For ironSource integration
    -keep public interface com.ironsource.mediationsdk.sdk** {*; }
    -keep public interface com.ironsource.mediationsdk.impressionData.ImpressionDataListener {*; }
    #For Maio integration
    -keep public interface jp.maio.sdk.android.MaioAdsListenerInterface {*; }
    # For Mintergral integration
    -keep public interface com.mbridge.msdk.out** {*; }
    -keep public interface com.mbridge.msdk.videocommon.listener** {*; }
    -keep public interface com.mbridge.msdk.interstitialvideo.out** {*; }
    -keep public interface com.mintegral.msdk.out** {*; }
    -keep public interface com.mintegral.msdk.videocommon.listener** {*; }
    -keep public interface com.mintegral.msdk.interstitialvideo.out** {*; }
    #For MyTarget integration
    -keep class com.my.target.** {*;}
    #For Ogury integration
    -keep public interface io.presage.interstitial** {*; }
    -keep public interface io.presage.interstitial.PresageInterstitialCallback {*; }
    #For Pubnative integration
    -keep public interface net.pubnative.lite.sdk.interstitial.HyBidInterstitialAd** {*; }
    -keep public interface net.pubnative.lite.sdk.rewarded.HyBidRewardedAd** {*; }
    -keep public interface net.pubnative.lite.sdk.views.HyBidAdView** {*; }
    #For Smaato integration
    -keep public interface com.smaato.sdk.interstitial** {*; }
    -keep public interface com.smaato.sdk.video.vast** {*; }
    -keep public interface com.smaato.sdk.banner.widget** {*; }
    -keep public interface com.smaato.sdk.core.util** {*; }
    # For Tapjoy integration
    -keep public interface com.tapjoy.** {*; }
    # For Tencent integration
    -keep public interface com.qq.e.ads.interstitial2** {*; }
    -keep public interface com.qq.e.ads.interstitial3** {*; }
    -keep public interface com.qq.e.ads.rewardvideo** {*; }
    -keep public interface com.qq.e.ads.rewardvideo2** {*; }
    -keep public interface com.qq.e.ads.banner2** {*; }
    -keep public interface com.qq.e.comm.adevent** {*; }
    #For Verizon integration
    -keepclassmembers class com.verizon.ads.edition.BuildConfig {
        static *;
    }
    -keep public interface com.verizon.ads.interstitialplacement** {*; }
    -keep public interface com.verizon.ads.inlineplacement** {*; }
    -keep public interface com.verizon.ads.vastcontroller** {*; }
    -keep public interface com.verizon.ads.webcontroller** {*; }
    #For Vungle integration
    -keep public interface com.vungle.warren.PlayAdCallback {*; }
    -keep public interface com.vungle.warren.ui.contract** {*; }
    -keep public interface com.vungle.warren.ui.view** {*; }
    #For Yahoo integration
    -keep public interface com.yahoo.ads.interstitialplacement** {*; }
    -keep public interface com.yahoo.ads.inlineplacement** {*; }
    -keep public interface com.yahoo.ads.vastcontroller** {*; }
    -keep public interface com.yahoo.ads.webcontroller** {*; }
    #For AndroidX
    -keep class androidx.localbroadcastmanager.content.LocalBroadcastManager { *;}
    -keep class androidx.recyclerview.widget.RecyclerView { *;}
    -keep class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *;}
    #For Android
    -keep class * extends android.app.Activity

    6단계. 연동 구현 검증

    아이언소스 SDK는 보상형 동영상 광고 미디에이션 연동이 성공적으로 완료되었는지 확인할 수 있는 매우 쉬운 방법을 제공합니다. 아이언소스 SDK 연동 및 추가 광고 네트워크 구현 사항을 검증하기 위해서는, 아래 메서드를 대상 프로젝트에 추가하시면 됩니다:

    IntegrationHelper.validateIntegration(activity);

    아이언소스 연동 검증 도구에 대한 더 자세한 정보를 보시려면 여기로 이동하세요.

    다 됐습니다! 이제 아이언소스 SDK 연동이 완료됐습니다. 
    이제 아이언소스 광고 유닛 및 미디에이션 도구 사용을 시작하실 수 있습니다.


    다음엔 뭘 할까요?
    1. 아래의 연동 가이드 문서들을 따라서 광고 유닛을 구현해 보세요:
      보상형 동영상 광고
      인터스티셜(전면) 광고
      배너 광고
    2. 미디에이션에 관심이 있으신가요? 미디에이션 게시물을 따라서 여러분의 앱에 보상형 동영상, 인터스티셜, 배너 광고들을 연동해 보세요.
      .
    3. 연동 도우미를 사용하여 연동이 잘 되었는지 확인해 보세요.
      .
    You can read this article in: