유니티 플러그인 연동

레벨플레이 미디에이션이 처음이신가요? 앱 수익화를 어떻게 시작해야 하는지 여기에서 확인해보세요.
시작하기 전에 읽어주세요

유니티 레벨플레이 미디에이션은 유니티 버전 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 버전으로의 업데이트에 관한 설명은 여기를 읽어주세요.

아답터의 AndroidXiOS 14 지원내용을 확인하세요.

유니티 Integration Manager
Integration Manager 도구를 사용해서 아이언소스 SDK와 아답터를 유니티 개발 플랫폼으로부터 직접 다운로드할 수 있습니다. 유니티 연동 프로젝트가 이미 있으시다면, 이 가이드의 순서를 따라 프로젝트에 추가해 주세요.

중요합니다! 7.3.1 버전으로 업그레이드 시에는 반드시 다음 경로에 있는 플러그인 확장 파일을 삭제해 주세요: Assets/IronSource/Plugins/Android/IronSource.plu

1단계. 레벨플레이 유니티 패키지를 프로젝트에 추가하기

다음을 순서대로 수행해 레벨플레이 유니티 패키지를 프로젝트에 추가합니다:

  1. Download Unity Plugin Version 8.0.0
  2. 유니티 프로젝트가 열려 있는지 확인하고 유니티 패키지를 불러옵니다.
  3. 다운로드한 파일을 압축 해제하여 더블 클릭합니다. 아래와 같이 각기 다른 파일들이 자동으로 추가됩니다:

유니티 에디터에서 아이언소스 SDK 사용하기 아이언소스 SDK는 안드로이드와 iOS 플랫폼에서 동작하도록 설계되었습니다. 유니티 에디터에는 유니티 코드로 동작하는 시뮬레이터가 포함되어 있습니다. 아이언소스 SDK 플러그인 작동동을 위해서는 반드시 안드로이드 또는 iOS 둘 중 하나로 타겟 플랫폼 빌드를 설정하고 연동 앱을 테스트 해야 합니다.

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 버전 관리

새로운 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 파일에 추가됩니다.

이 과정을 활성화 하려면 아래 순서와 같이 진행해 주세요: 

  1. 메뉴 진입: Assets → Mobile Dependency Manager → Android Resolver → Settings
  2. “Patch mainTemplate.gradle”을 선택합니다.
  3. 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)에 포함시켜 주세요.

  1. Xcode의 프로젝트 네비게이터에서 Info.plist를 선택합니다
  2. 프로퍼티 목록 편집기에서 키 아래에 있는 추가(+) 버튼을 클릭하고 Return을 누릅니다.
  3. Key Name 필드에 SDKAdNetworkItems를 넣습니다.
  4. Type 열의 팝업 메뉴에서 Array를 선택하세요.
  5. Dictionary 아이템을 작성하고 그 아래에 String 아이템을 하나 생성해 주세요.
  6. 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에 추가해 주세요.

  1. Xcode의 프로젝트 네비게이터 (기본 화면 좌측)에서 Info.plist 파일을 선택합니다
  2. 프로퍼티 목록 편집기에서 키 항목 아래에 있는 추가 (+) 버튼을 클릭하고 리턴 키를 누릅니다
  3. 키 명칭 필드에 NSAdvertisingAttributionReportEndpoint를 입력합니다
  4. Type 열의 팝업 메뉴에서 String을 선택합니다
  5. 다음의 URL을 입력합니다: https://postbacks-is.com

Universal SKAN 보고에 대한 더 자세한 사항은 여기를 참고하세요.

App Transport Security 설정

모든 미디에이션 네트워크상에서 아이언소스 광고 게재가 지속적으로 지원되도록 하려면, 반드시 아래와 같이 info.plist 파일을 수정해야 합니다.

  • NSAppTransportSecurity‘ 라는 명칭의 키를 Dictionary 타입으로 추가합니다. 반드시 최상위 프로퍼티 키로 생성하셔야 합니다.
  •  이 dictionary 키 하위에 ‘NSAllowsArbitraryLoads‘ 라는 Boolean 타입 키를 생성하고 값을 YES로 설정합니다.ats
  • 충돌을 유발할 수 있기 때문에, 프로젝트의 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

5단계. 수동 연동

유니티 Integration Manager를 사용하는 대신, 아이언소스 SDK를 직접 수동으로 연동할 수도 있습니다.

안드로이드 수동 연동

  1. Download Android SDK Version 8.0.0
  2. Ad Quality SDK를 다운로드 합니다.
  3. 다운로드한 .aar 파일을 /Assets/Plugins/Android 경로에 복사

Google ID 퍼미션

ironSource SDK는 Google Play Services BasementGoogle Play Services Identifier 모듈을 필요로 하며, 다른 네트워크들의 경우 Google Play service 모듈이 추가로 필요할 수 있습니다. GAID 및 App Set ID 정보 취득 허가를 위해 필요한 Google Play Service 패키지들을 디펜던시 구문에 추가하여 주세요.

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:17.0.0' 
    implementation 'com.google.android.gms:play-services-basement:17.1.1' 
}

구글의 App Set ID에 대한 더 자세한 정보는 여기를 참고하세요.

iOS 수동 연동

  1. Download iOS SDK Version 8.0.0
  2. 다운로드 받은 파일 압축을 해제하고 IronSource.framework를 /Assets/Plugins/iOS에 추가합니다.
  3. Ad Quality SDK를 다운로드 합니다.
  4. Ad Quality SDK 파일 압축을 해제한 후, 압축이 해제된 IronSource.framework 파일의 파일명을 IronSourceAdQuality.xcframework로 변경합니다.
  5. XCode 프로젝트에 “z”, “sqlite3.0” 라이브러리를 추가(Import)합니다.
  6. XCode 프로젝트에 “JavaScriptCore”, “WebKit”, “AdSupport”, “SystemConfiguration” 프레임워크들을 추가(Import)합니다.

6단계. 광고 유닛 초기화 하기

  • 아이언소스에서 지원하는 UserID나 세그먼트 같은 선택적 설정의 경우 SDK 초기화 이전에 설정이 완료되어야 합니다. 이 기능의 설정에 대한 설명은 고급 설정에서 찾으실 수 있습니다.
  • (iOS 14 이상의 경우) 앱 시작 구동시마다 팝업을 통한 사용자 인증을 요청하도록 구현하시려면 이 과정이 아이언소스 SDK 초기화 이전에 수행하시길 권장합니다. 앱 추적 투명성에 대한 자세한 설명은 애플 문서를 참고하세요.
  • (iOS 14 이상의 경우) 앱 시작 구동시에 사용자 인증을 요청하지 않을 것이라면, 시작 구동 시에 바로 아이언소스 SDK를 초기화 해 주세요.
  • 아이언소스 SDK 보상형 광고 유닛들을 통해 서버간 콜백을 이용한 사용자 보상을 사용하는 경우 또는 Ad Quality의 사용자 이력 기능을 사용하는 경우, UserID를 설정합니다.

애플리케이션 상태

먼저, 애플리케이션 실행주기 중에 아래의 이벤트 함수를 실행해 애플리케이션의 상태를 전달해야 합니다.
유니티 Scene에서 onApplicationPause를 아래와 같이 구현 및 호출하도록 합니다:

void OnApplicationPause(bool isPaused) {                 
  IronSource.Agent.onApplicationPause(isPaused);
}

플러그인 및 광고 유닛을 초기화하기

플러그인은 두 가지 방법으로 초기화 할 수 있습니다. 첫 번째 방법은 특정 광고 유닛을 지정해서 초기화 할 수 있기 때문에 이 방법 사용을 권장 드립니다.

  1. 하기 메서드는 adUnits 파라미터에 기재된 특정 광고 유닛만을 초기화 합니다:
    IronSource.Agent.init (YOUR_APP_KEY, IronSourceAdUnits.REWARDED_VIDEO, IronSourceAdUnits.INTERSTITIAL, IronSourceAdUnits.BANNER);
    

    이 초기화 방식을 사용하면 동일 세션상의 앱 실행 중 각기 다른 시점에서 각 광고 유닛을 별도로 초기화 할 수 있습니다.

    //For Rewarded Video
    IronSource.Agent.init (YOUR_APP_KEY, IronSourceAdUnits.REWARDED_VIDEO);
    //For Interstitial
    IronSource.Agent.init (YOUR_APP_KEY, IronSourceAdUnits.INTERSTITIAL);
    //For Banners
    IronSource.Agent.init (YOUR_APP_KEY, IronSourceAdUnits.BANNER);
  2. 또는, 아래와 같이 초기화 할 경우 아이언소스 플랫폼에서 설정된 모든 광고 유닛들을 초기화 할 수 있습니다:
    IronSource.Agent.init (YOUR_APP_KEY);

 ironSource 초기화 완료 리스너 

ironSource SDK 7.2.1 이상 버전에서는 아이언소스 SDK가 초기화 성공을 알리는 postback을을 송출합니다. 이 리스너는 초기화 과정이 성공적으로 완료되었고, 해당 시점부터 광고 로드가 가능함을 알립니다. 이 콜백은 세션당 단 한번, 처음 SDK 초기화가 완료되었을 때 송출됩니다. 

IronSourceEvents.onSdkInitializationCompletedEvent += SdkInitializationCompletedEvent;
private void SdkInitializationCompletedEvent(){}

7단계. 연동을 검증하기

아이언소스 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 AdColony integration
-keep class com.jirbo.adcolony.* {
    static *;
}
-keep public interface com.adcolony.sdk** {*; }
#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

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


다음엔 뭘 할까요?

Integration Helper로 연동 검증이 완료되었다면, 아래의 연동 가이드를 따라 광고 유닛을 연동해 보세요:

아이언소스 미디에이션 플랫폼에 관심이 있으신가요? 미디에이션 설명서를 따라 보상형 동영상 또는 인터스티셜(전면) 광고를 연동해 보세요.

You can read this article in: