안드로이드 SDK 연동
아이언소스 SDK 7.6.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
- 아래와 같이 프로젝트 루트 디렉토리(폴더)의 build.gradle 파일의 “repositories”절에 하기와 같이 아이언소스 Maven repository를 추가합니다.
repositories { maven { url 'https://android-sdk.is.com/' } }
- 다음, 아래와 같이 아이언소스 SDK 디펜던시를 dependencies 절에 추가합니다:
dependencies { implementation 'com.ironsource.sdk:mediationsdk:8.4.0' implementation 'com.ironsource:adqualitysdk:7.21.3' }
Ad Quality를 프로젝트에서 제외하려면, 앱의 build.gradle상의 dependencies 섹션에서 Ad Quality SDK dependency를 제거합니다.
Gradle 버전 7 이상의 경우
Gradle 7 이상 버전을 사용 시에는 build.grade 파일 대신 settings.gradle 파일에 repository를 추가해야 합니다. 이 때, repositories 섹션은 dependencyResolutionManagement 섹션에 포함되어 있으니 참고 부탁 드립니다:
dependencyResolutionManagement {
repositories {
maven {
url 'https://android-sdk.is.com/'
}
}
}
직접 SDK를 다운로드 하는 경우
- Download Android SDK Version 8.4.0
- Ad Quality SDK를 다운로드 합니다.
- .AAR 파일을 라이브러리 프로젝트로 Import 합니다.
- 안드로이드 스튜디오를 사용하는 경우, 아래와 같이 아이언소스 SDK의 .AAR 파일을 다운로드하고 사용하시는 모듈에 디펜던시로 추가합니다.
- File ➣ New ➣ New Module ➣ Import .AAR 로 이동하고 IronSource SDK의 .AAR 파일이 다운로드 된 경로를 지정합니다.
- 참고: 아이언소스 Manifest Activity들이 .AAR 파일에 포함되어 있습니다.
- build.gradle 파일의 dependencies 섹션에 아래의 구문을 반드시 추가해 주시기 바랍니다.
implementation(name: 'mediationsdk-8.4.0', ext:'aar') implementation(name: 'IronSourceAdQuality-v7.21.3', ext:'aar')
- 아이언소스 SDK 7.0.4 버전 이상부터는 반드시 코틀린JAR 파일을 대상 프로젝트에 추가해 주셔야 합니다. 코틀린 지원에 대한 자세한 사항은 여기를 참조 부탁 드립니다.
- 새로운 mediationsdk-xxx.aar 의 파일명을 mediationsdk-xxx.zip 으로 변경합니다.
- 새로운 IronSourceAdQuality-xxx.jar의 파일명을 IronSourceAdQuality-xxx.zip으로 변경합니다.
- Classes.jar 파일을 추출합니다.
- 해당 Classes.jar의 파일명을 mediationsdk_xxx.jar 로 변경합니다.
- AndroidManifext.xml에 후술할 내용을 추가하여 업데이트합니다.
-
- 매니페스트 권한:
AndroidManifest.xml 파일에서, <application> 태그 밖에 아래와 같이 필요 권한을 추가합니다:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 매니페스트 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" />
- 매니페스트 권한:
- GAID 및 App Set ID 정보 취득을 가능하게 하기 위해 아래와 같이 플레이 스토어 서비스 관련 디펜던시들을 디펜던시 모듈 정의구문에 추가합니다.
구글의 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' }
- 애플리케이션의 타겟 API 레벨이 33 이상 (안드로이드 1)인 경우 아래와 같이 매니페스트 파일에 구글 플레이 서비스의 일반 권한을 요청해야 합니다:
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
구글 광고 ID 변경사항에 대해서는 여기를 참고하세요.
- 보상형 동영상 광고
IronSource.setLevelPlayRewardedVideoListener(mLevelPlayRewardedVideoListener);
- 인터스티셜 광고
IronSource.setLevelPlayInterstitialListener(mLevelPlayInterstitialListener);
- 배너 광고
mBannerLayout.setLevelPlayBannerListener(mLevelPlayBannerListener);
- 초기화 성공 및 실패 시의 콜백을 구현합니다.
- 기존 아이언소스 API에서 지원하는 광고 포맷들의 목록을 정의합니다. 보상형 동영상 또는 네이티브 광고 사용 시 REWARDED 및 NATIVE_AD는 반드시 이 목록에 포함되어야 합니다.
- 앱 키, 광고 포맷 목록 및 사용자 ID (필요시에만)로 레벨플레이 초기화 API를 호출하세요.
- 아래의 연동 가이드 문서들을 따라서 광고 유닛을 구현해 보세요:
보상형 동영상 광고
인터스티셜(전면) 광고
배너 광고 - 미디에이션에 관심이 있으신가요? 미디에이션 게시물을 따라서 여러분의 앱에 보상형 동영상, 인터스티셜, 배너 광고들을 연동해 보세요.
. - 연동 도우미를 사용하여 연동이 잘 되었는지 확인해 보세요.
.
선택사항:수동 JAR 파일 연동
대상 프로젝트에서 mediationsdk_xxx.jar 를 사용하시는 경우, 동일한 구성으로 사용 가능합니다.
직접 JAR파일로 연동을 위한 AndroidManifest.xml 업데이트
AndroidManifest.xml 파일 업데이트를 위해서는 아래의 단계를 완료해 주세요:
레벨플레이 데모 애플리케이션
연동 데모 애플리케이션은 레벨플레이 미디에이션 SDK를 어떻게 연동해야 하는지를 보여주는 예제입니다.
Download Android Demo Application2단계. 구글 ID 퍼미션
3단계. Activity 수명주기 오버라이드
애플리케이션 생명주기
각 Activity 내의 onPause(), onResume() 메서드들이 각 메서드에 대응하는 아이언소스 메서드를 호출하도록 아래와 같이 오버라이드합니다:
protected void onResume() { super.onResume(); IronSource.onResume(this); } protected void onPause() { super.onPause(); IronSource.onPause(this); }
4단계. 리스너 설정
아이언소스 SDK는 광고 유닛 활동 정보를 알리기 위해 여러가지 이벤트들을 송출합니다. 해당 이벤트들의 수신을 위해서는 레벨플레이 플랫폼 상에서 설정된 각 광고 유닛의 리스너를 등록합니다.
이벤트 정보 손실을 피하기 위해서는, 반드시 해당 리스너들은 아이언소스 SDK 초기화 이전에 설정해 주시기 바랍니다.
5단계. SDK 초기화
아래의 단계를 따라 아이언소스 SDK를 초기화 합니다:
사용자 보상에 서버간 콜백을 사용하거나, Ad Quality 사용자 이력 기능을 사용할 경우 반드시 사용자 ID를 초기화 API에 포함하여 호출해 주세요.
// Init the SDK when implementing the Multiple Ad Units Interstitial and Banner APIs, and Rewarded using legacy APIs
List<LevelPlay.AdFormat> legacyAdFormats = Arrays.asList(LevelPlay.AdFormat.REWARDED);
LevelPlayInitRequest initRequest = new LevelPlayInitRequest.Builder(appKey)
.withLegacyAdFormats(legacyAdFormats)
.withUserId("UserID")
.build();
LevelPlayInitListener initListener = new LevelPlayInitListener() {
@Override
public void onInitFailed(@NonNull LevelPlayInitError error) {
//Recommended to initialize again
}
@Override
public void onInitSuccess(LevelPlayConfiguration configuration) {
//Create ad objects and load ads
}
};
LevelPlay.init(context, initRequest, initListener);
// Init the SDK when implementing the Multiple Ad Units Interstitial and Banner APIs, and Rewarded using legacy APIs
val legacyAdFormats = listOf(LevelPlay.AdFormat.INTERSTITIAL,LevelPlay.AdFormat.REWARDED)
val initRequest = LevelPlayInitRequest.Builder("AppKey")
.withLegacyAdFormats(legacyAdFormats)
.withUserId("UserId")
.build()
LevelPlay.init(context, initRequest, object: LevelPlayInitListener {
override fun onInitFailed(error: LevelPlayInitError) {
//Recommended to initialize again
}
override fun onInitSuccess(configuration: LevelPlayConfiguration) {
//Create ad objects and load ads
}
})
레벨플레이 초기화 이벤트 리스너 콜백
OnInitSuccess – 초기화가 성공적으로 완료되었을 때 호출됩니다. 해당 이벤트 콜백을 수신한 후에 광고 객체 생성 및 광고 로드를 할 수 있습니다.
OnInitFailed – 서버로부터 초기화 응답으로 전달되는 SDK 및 앱 설정 취득에 실패하여 광고 로드가 불가능합니다. 초기화에 실패했다면, 이후 인터넷 연결 상태가 양호하고 초기화 실패 이유가 해결된 상태에서 다시 초기화를 시도하시는 것이 좋습니다.
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 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 연동이 완료됐습니다.
이제 아이언소스 광고 유닛 및 미디에이션 도구 사용을 시작하실 수 있습니다.