유니티 플러그인 연동
유니티 레벨플레이 미디에이션은 유니티 버전 2017.2 이상 버전 및 안드로이드 OS 4.1 (API 레벨 16) 이상 버전을 지원합니다.
iOS 버전 지원은 네트워크 별로 차이가 있을 수 있습니다. 아이언소스 광고 및 레벨플레이 미디에이션은 iOS 11 이상, XCode 버전 14.3.1 이상 버전을 지원합니다.
아이언소스 SDK 7.3.0 이상 버전부터 코틀린은 최소 지원 버전은 1.7.0 입니다.
SDK를 다운로드, 접근에는 아이언소스 플랫폼 온라인 이용약관이 적용됩니다. 만약 아이언소스 모바일 SDK 퍼블리셔 온라인 이용약관에 동의하지 않으시는 경우에는 다운로드, 접근 및 사용하지 않도록 주의 부탁 드립니다.
iOS14 호환성을 위해 아이언소스는 SDK 버전 7 이상 배포판부터 SKAdNetwork 속성을 지원하고 있습니다. SDK 7 버전으로의 업데이트에 관한 설명은 여기를 읽어주세요.
아답터의 AndroidX 및 iOS 14 지원내용을 확인하세요.
유니티 Integration Manager
Integration Manager 도구를 사용해서 아이언소스 SDK와 아답터를 유니티 개발 플랫폼으로부터 직접 다운로드할 수 있습니다. 유니티 연동 프로젝트가 이미 있으시다면, 이 가이드의 순서를 따라 프로젝트에 추가해 주세요.
중요합니다! 7.3.1 버전으로 업그레이드 시에는 반드시 다음 경로에 있는 플러그인 확장 파일을 삭제해 주세요: Assets/IronSource/Plugins/Android/IronSource.plu
1단계. 레벨플레이 유니티 패키지를 프로젝트에 추가하기
다음을 순서대로 수행해 레벨플레이 유니티 패키지를 프로젝트에 추가합니다:
- Download Unity Plugin Version 8.4.1
- 유니티 프로젝트가 열려 있는지 확인하고 유니티 패키지를 불러옵니다.
- 다운로드한 파일을 압축 해제하여 더블 클릭합니다. 아래와 같이 각기 다른 파일들이 자동으로 추가됩니다:
Ad Quality SDK 추가하기
- Ad Quality dependency XML을 다운로드 합니다.
- 해당 XML 파일을 프로젝트 내 Assets/IronSource/Editor 경로로 복사합니다.
유니티 레벨플레이 데모 앱
연동 데모 앱은 유니티 레벨플레이 미디에이션을 어떻게 앱에 연동하는지에 대한 예제를 보여줍니다.
Download Unity Demo Application
2단계. Unity Integration Manager (권장)
선호하는 광고 네트워크의 아답터들을 설치합니다. 반드시 왼편에 있는 가이드 문서들을 따라 올바르게 광고 네트워크들을 설정해 주세요.
필수 준비 사항
- 유니티 개발자 도구 버전 2017.2 이상 버전
- iOS의 경우: CocoaPods 적용 필수
SDK 버전 관리
새로운 SDK와 Integration Manager 설치를 위해 유니티 패키지를 업데이트하면, 아래와 같이 유니티 메뉴 막대에서 Ads Mediation 서브 메뉴가 보이게 됩니다.
SDK 및 아답터 버전 업그레이드를 하려면 아래와 같이 해주세요:
- Ads Mediation > Integration Manager로 이동합니다.
- Install 또는 Update를 선택합니다.
이미 아이언소스 SDK 및 아답터 최신 버전을 가지고 계시다면, 각 항목의 동작 버튼은 “Updated”로 변경되고 비활성화 됩니다.
안드로이드
변경 사항 적용을 위해서는 반드시 “Resolve” 단계를 진행해 주세요. Resolve 단계에서는 선택사항에 따라 관련된 모든 아티팩트를 다운로드 합니다.
수동 resolve
메뉴 진입: Assets → Mobile Dependency Manager → Android Resolver → Resolve
이 작업은 레벨플레이 Integration Manager에서 변경사항이 발생했을 때마다 수행해야 합니다.
자동 Resolve를 사용 중이라면, Integration Manager 창을 닫을 때 모든 업데이트가 수행됩니다.
Gradle을 사용하는 경우
Unity용 레벨플레이 Integration Manager를 사용하면 안드로이드 아티팩트들이 프로젝트로 다운로드되는 것을 피할 수 있게 됩니다. 이 경우, 대신 이 아티팩트들은 컴파일 중 Gradle 파일에 추가됩니다.
이 과정을 활성화 하려면 아래 순서와 같이 진행해 주세요:
-
- 메뉴 진입: Project Settings → Player → Android → Publishing Settings
- “Enable Custom Main Gradle Template” 옵션에 체크하고 저장합니다.
- 메뉴 진입: Assets → Mobile Dependency Manager → Android Resolver → Settings
- “Patch mainTemplate.gradle”을 선택합니다.
- OK를 눌러서 변경사항을 저장합니다.
iOS
반드시 CocoaPods가 설치되었는지 확인해 주세요:
메뉴 진입: Assets → Mobile Dependency Manager → iOS Resolver → Install Cocoapods
3단계. iOS용 추가 설정
Xcode 프로젝트에 Ad-Support.framework 추가하기
레벨플레이 유니티 플러그인은 모든 필수 프레임워크들을 자동으로 추가합니다. 다만 Ad-Support.framework의 경우 유니티 5.6을 사용하는 경우 간혹 자동으로 추가가 되지 않을 수 있습니다. 반드시 해당 프레임워크가 프로젝트에 정상적으로 추가가 되었는지 확인하고, 자동으로 추가되지 않은 경우 반드시 수동으로 추가해 주세요.
SKAdNetwork 지원
SDK7이상 버전에서 아이언소스 네트워크 광고 표시를 활성화 하려면 반드시 아이언소스 광고 네트워크 ID를 Property 목록 파일 (Info.plist)에 포함시켜 주세요.
- Xcode의 프로젝트 네비게이터에서 Info.plist를 선택합니다
- 프로퍼티 목록 편집기에서 키 아래에 있는 추가(+) 버튼을 클릭하고 Return을 누릅니다.
- Key Name 필드에 SDKAdNetworkItems를 넣습니다.
- Type 열의 팝업 메뉴에서 Array를 선택하세요.
- Dictionary 아이템을 작성하고 그 아래에 String 아이템을 하나 생성해 주세요.
- String 아이템의 Key Name을 SKAdNetworkIdentifier으로 입력하고, 설정값을 아래와 같이 입력합니다:
su67r6k2v3.skadnetwork
아래의 코드 구문과 같이 Info.plist 파일을 직접 조작하여 SKAdNetworkIdentifier를 추가해도 됩니다:
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>su67r6k2v3.skadnetwork</string>
</dict>
</array>
프로퍼티 목록 편집에 대한 더 자세한 설명은 Xcode 문서를 참조해 주세요.
Universal SKAN 리포트
앱 내 광고를 제공한 광고 제공자들로부터 사용자들의 앱 설치 검증 확인 포스트백을 받기 위해서는 NSAdvertisingAttributionReportEndpoint 키를 앱 프로젝트의 Info.plist에 추가해 주세요.
- Xcode의 프로젝트 네비게이터 (기본 화면 좌측)에서 Info.plist 파일을 선택합니다
- 프로퍼티 목록 편집기에서 키 항목 아래에 있는 추가 (+) 버튼을 클릭하고 리턴 키를 누릅니다
- 키 명칭 필드에 NSAdvertisingAttributionReportEndpoint를 입력합니다
- Type 열의 팝업 메뉴에서 String을 선택합니다
- 다음의 URL을 입력합니다: https://postbacks-is.com
Universal SKAN 보고에 대한 더 자세한 사항은 여기를 참고하세요.
App Transport Security 설정
모든 미디에이션 네트워크상에서 아이언소스 광고 게재가 지속적으로 지원되도록 하려면, 반드시 아래와 같이 info.plist 파일을 수정해야 합니다.
- ‘NSAppTransportSecurity‘ 라는 명칭의 키를 Dictionary 타입으로 추가합니다. 반드시 최상위 프로퍼티 키로 생성하셔야 합니다.
- 이 dictionary 키 하위에 ‘NSAllowsArbitraryLoads‘ 라는 Boolean 타입 키를 생성하고 값을 YES로 설정합니다.
- 충돌을 유발할 수 있기 때문에, 프로젝트의 Info.plist가 ‘NSAllowsArbitraryLoads‘ 이외의 예외사항을 포함하지 않도록 합니다.
- ATS에 대한 더 자세한 정보는 여기에서 보실 수 있습니다.
4단계. 안드로이드용 추가 설정
애플리케이션의 타겟 API 레벨이 31 이상 (안드로이드 12)인 경우 아래와 같이 매니페스트 파일에 구글 플레이 서비스의 일반 권한을 요청해야 합니다.
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
구글 광고 ID에 대해서는 여기를 참고 부탁 드립니다.
Unity 2020이상 버전 설정
Unity 2020 이상 버전을 사용할 경우 아래의 Gradle property를 android/gradle.properties에 추가해 주세요:
android.enableDexingArtifactTransform=false
Unity 6 Requirements
Unity 6 이상 버전을 사용할 경우 아래의 Gradle property를 android/gradle.properties에 추가해 주세요:
android.useFullClasspathForDexingTransform=true
5단계. 아이언소스 SDK 초기화 하기
플러그인 및 광고 유닛을 초기화하기
아래의 단계를 따라 아이언소스 SDK를 초기화합니다:
- 초기화 성공 및 실패 시의 콜백을 구현합니다.
- 기존 아이언소스 API에서 지원하는 광고 포맷들의 목록을 정의합니다. 보상형 동영상 광고 포맷 사용 시 REWARDED는 반드시 이 목록에 포함되어야 합니다.
- 앱 키, 광고 포맷 목록 및 유저 ID(필요시에만)를 사용해 레벨플레이 초기화 API를 호출하세요.
유저 보상에 서버간 콜백을 사용하거나, Ad Quality 유저 이력 기능을 사용할 경우 반드시 유저 ID를 초기화 API에 포함하여 호출해 주세요.
using com.unity3d.mediation;
// Init the SDK when implementing the Multiple Ad Units API for Interstitial and Banner formats, with Rewarded using legacy APIs
LevelPlayAdFormat[] legacyAdFormats = new[] { LevelPlayAdFormat.REWARDED };
LevelPlay.OnInitSuccess += SdkInitializationCompletedEvent;
LevelPlay.OnInitFailed += SdkInitializationFailedEvent;
LevelPlay.Init(appKey,legacyAdFormats, "UserId");
레벨플레이 초기화 이벤트 리스너 콜백
OnInitSuccess – 초기화가 성공적으로 완료되었을 때 호출됩니다. 해당 이벤트 콜백을 수신한 후에 광고 객체 생성 및 광고 로드를 할 수 있습니다.
OnInitFailed – 서버로부터 초기화 응답으로 전달되는 SDK 및 앱 설정 취득에 실패하여 광고 로드가 불가능합니다. 초기화에 실패했다면, 이후 인터넷 연결 상태가 양호하고 초기화 실패 이유가 해결된 상태에서 다시 초기화를 시도하시는 것이 좋습니다.
6단계. 연동을 검증하기
아이언소스 SDK는 SDK와 미디에이션 연동이 성공적으로 완료되었는지 간단하게 확인하는 방법을 제공합니다. 아이언소스 SDK 연동 및 추가 광고 네트워크 연동을 검증하려면 아래의 메서드를 프로젝트에 추가해 주세요:
IronSource.Agent.validateIntegration();
아이언소스 Integration Verification 도구에 대한 더 자세한 사항은 여기에서 확인해 주세요.
ProGuard를 사용하는 경우에만 보세요
아이언소스 SDK와 ProGuard를 사용하는 경우, 반드시 아래의 코드를 ProGuard 파일에 추가해야 합니다. (Android Studio의 경우: proguard-rules.pro, Eclipse의 경우 proguard-project.txt):
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#noinspection ShrinkerUnresolvedReference
#unity
-keep class com.ironsource.unity.androidbridge.** { *;}
-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
완료했습니다!
이제 아이언소스 광고 유닛 및 미디에이션 도구 사용을 시작하실 수 있습니다.
다음엔 뭘 할까요?
Integration Helper로 연동 검증이 완료되었다면, 아래의 연동 가이드를 따라 광고 유닛을 연동해 보세요:
아이언소스 미디에이션 플랫폼에 관심이 있으신가요? 미디에이션 설명서를 따라 보상형 동영상 또는 인터스티셜(전면) 광고를 연동해 보세요.