# Android SDK 통합

> Gradle 또는 매뉴얼 다운로드 사용하여 레벨플레이 Android SDK 연동하고 앱 라이프사이클, 권한, 광고 유닛 리스너를 설정.

## 필수 조건##prerequisites

* Android 운영 체제 버전 4.4(API 레벨 19) 이상을 지원합니다.
* 지원되는 최소 Kotlin 버전은 1.7.0입니다.

## 1단계. 프로젝트에 레벨플레이 SDK를 추가합니다.##step-1.-add-the-levelplay-sdk-to-your-project

레벨플레이 SDK는 Gradle 종속성과 매뉴얼 다운로드 메커니즘을 모두 지원하여 SDK를 통합합니다.

### Gradle##gradle

1. 저장소 섹션 내부에서 앱 레벨 **빌드.gradle** 파일에 다음 코드를 추가합니다.

   ```java
   repositories {
   	mavenCentral()
   }
   ```

2. 종속성 섹션에 다음을 추가합니다.

```java
dependencies {
    implementation 'com.unity3d.ads-mediation:mediation-sdk:9.5.0'
}
```

#### Gradle 버전 7+##gradle-version-7+

[Gradle 버전 7 이상](https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:centralized-repository-declaration)을 사용하는 경우 **빌드.Gradle** 대신 **settings. Gradle** 파일의 저장소 섹션을 업데이트합니다. 참고 저장소 섹션은 dependencyResolutionManagement 섹션의 일부로 포함되어야 합니다.

```java
repositories {
	mavenCentral()
}
```

> **Note:**
>
> 버전 8.9.0부터 AdQuality는 레벨플레이 SDK에 통합되며, 레벨플레이 구현될 때 자동으로 초기화됩니다. 자세히 알아보기 AdQuality [여기](/grow/ad-quality/overview.md).

#### 매뉴얼 다운로드##manual-download

1. [Android SDK 버전 9.5.0 다운로드](https://repo1.maven.org/maven2/com/unity3d/ads-mediation/mediation-sdk/9.5.0/mediation-sdk-9.5.0.aar)
2. .AAR 파일을 라이브러리 프로젝트로 임포트.
3. Android Studio를 사용하는 경우 .AAR 파일을 다운로드 자체 모듈에 종속성으로 추가합니다.
4. **File** > **New** > **New Module** > **Import .AAR**로 이동하여 .AAR 파일이 다운로드된 위치로 이동합니다.
5. 참고: 매니페스트 활동은 연간 보고서에 포함됩니다.
6. 다음을 **종속성 섹션 아래의 **빌드.gradle** 파일에 추가해야 합니다.**

```text
implementation(name: 'mediation-sdk-9.5.0', ext:'aar')
```

7. 레벨플레이 SDK 7.0.4 이상부터 Kotlin JAR을 프로젝트에 추가해야 합니다. Kotlin 지원에 대한 자세한 내용은 [여기](https://developer.android.com/kotlin/add-kotlin)에서 확인할 수 있습니다.

#### 선택 사항: 매뉴얼 JAR 통합##optional:-manual-jar-integration

프로젝트에서 **Mediation-sdk-xxx.jar** 및 **adquality-sdk-xxx.jar**을 사용하는 경우에도 동일한 설정을 사용할 수 있습니다.  

1. 새로운 Mediation-sdk-xxx.aar의 이름을 Mediation-sdk-xxx.zip로 변경합니다. 
2. 새 adquality-sdk-xxx.jar의 이름을 adquality-sdk-xxx.zip로 변경합니다. 
3. class.jar 추출
4. 이를 Mediation 및 adquality-sdk-xxx.jar로 이름을 변경합니다. 
5. AndroidManifest.xml 업데이트

**매뉴얼 JAR 통합용 AndroidManifest.xml 업데이트** 

**AndroidManifest.xml**을 업데이트하려면 다음 단계를 완료합니다.

1. **매니페스트 사용 권한**
   매니페스트 태그 내부에 있지만 `<application>` 태그 외부에 있는 **AndroidManifest.xml** 파일에 다음 권한을 추가합니다.\*\*

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

2. **매니페스트 활동 및 제공자** **AndroidManifest**의 `<application>` 태그에 이 섹션을 추가합니다.

   ```xml
           <activity
               android:name="com.ironsource.sdk.controller.ControllerActivity"
               android:configChanges="orientation|screenSize"
               android:hardwareAccelerated="true"
               android:theme="@android:style/Theme.NoTitleBar" />
           <activity
               android:name="com.ironsource.sdk.controller.InterstitialActivity"
               android:configChanges="orientation|screenSize"
               android:hardwareAccelerated="true"
               android:theme="@android:style/Theme.Translucent.NoTitleBar" />
           <activity
               android:name="com.ironsource.sdk.controller.OpenUrlActivity"
               android:configChanges="orientation|screenSize"
               android:hardwareAccelerated="true"
               android:theme="@android:style/Theme.Translucent.NoTitleBar" />
           <activity
               android:name="com.ironsource.mediationsdk.testSuite.TestSuiteActivity"
               android:configChanges="orientation|screenSize"
               android:hardwareAccelerated="true"
               android:theme="@android:style/Theme.NoTitleBar" />
           <provider
               android:name="com.ironsource.lifecycle.IronsourceLifecycleProvider"
               android:authorities="${applicationId}.IronsourceLifecycleProvider" />
   ```

#### 데모 애플리케이션##demo-application

통합 데모 애플리케이션 앱에 레벨플레이 Mediation 통합하는 방법을 보여 줍니다.

[Android 데모 애플리케이션 다운로드](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

## 2단계. Google 식별자 권한##step-2.-google-identifier-permissions

1. 종속성 차단 Play Services 종속성을 추가하여 GAID 및 APP Set ID 정보를 검색해서 가져올 수 있습니다.

   ```java
   dependencies { 
       구현 파일트리(dire: 'libs', include: ['*.jar']) 
       implementation 'com.google.android.gms:play-services-appset:16.0.0' 
       implementation 'com.google.android.gms:play-services-ads-identifier:18.1.0' 
       implementation 'com.google.android.gms:play-services-basement:18.1.0' 
   }
   ```

   Google의 앱 세트 ID에 대해 자세히 알아보기 [여기](https://developer.android.com/training/articles/app-set-id).

2. 타겟 API 레벨을 33(Android 13)으로 업데이트하는 앱 매니페스트 파일에 Google Play 서비스의 노멀 권한 다음과 같이 선언해야 합니다.

   ```xml
   <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
   ```

   Google Advertising ID 변경에 대한 자세한 내용은 [여기](https://support.google.com/googleplay/android-developer/answer/6048248?hl=en)에서 확인하십시오.

> **Note:**
>
> Amazon 기기는 Google Play 서비스를 활용하지 않습니다. Amazon 플랫폼용으로 빌드하는 경우 이전 단계를 건너뛰십시오.

## 3단계. SDK 초기화##step-3.-initialize-the-sdk

레벨플레이 SDK를 초기화하려면 다음 단계를 따르십시오.

1. 초기화 성공 또는 실패에 대한 콜백을 구현합니다.
2. 해당하는 경우 appKey와 사용자 ID를 사용하여 레벨플레이 init API 호출.

> **Note:**
>
> 사용자 보상을 위해 서버 간 콜백을 사용하거나 광고 품질 사용자 여정을 사용하는 경우 초기화 API 일부로 사용자 ID를 추가합니다.

1. **Java**

   ```java
   LevelPlayInitRequest initRequest = new LevelPlayInitRequest.Builder(appKey)
           .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);
   ```

2. **Kotlin**

   ```kotlin
   val initRequest = LevelPlayInitRequest.Builder("AppKey")
           .withUserId("UserId")
           .build()
   LevelPlay.init(context, initRequest, object : LevelPlayInitListener {
      override fun onInitFailed(error: LevelPlayInitError) {
          //다시 초기화할 것을 권장합니다.
      }
      오버라이드 fun onInitSuccess(설정: LevelPlayConfiguration) {
          //광고 오브젝트 생성 및 광고 로드
      }
   })
   ```

### **레벨플레이 Init 리스너**##**levelplay-init-listeners**

**OnInitSuccess** – 초기화가 성공적으로 완료되면 트리거됩니다. 이 표시를 수신하면 광고를 생성하고 로드할 수 있습니다.

**OnInitFailed** – 설정이 성공적으로 검색되지 않았으며 광고를 로드할 수 없습니다. 나중에 레벨플레이 SDK를 초기화하는 것이 좋습니다(인터넷 연결이 가능하거나 오류 원인이 해결된 경우).

### ProGuard 사용자 전용##for-proguard-users-only

레벨플레이 SDK와 함께 ProGuard를 사용하는 경우 ProGuard 파일(Android Studio: proguard-rules.pro 또는 Eclipse: proguard-project.txt)에 다음 코드를 추가해야 합니다.

```java
-keepclassmembers 클래스 * 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 클래스 com.iab.omid** {*;}
#javascript
-keepattributes JavascriptInterface
-keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
#For AmazonAps integration
-keep class com.amazon.device.ads.DtbThreadService {
    정적 *;
}
-keep public interface com.amazon.device.ads** {*; }
#For AppLovin integration
-keepclassmembers class com.applovin.sdk.AppLovinSdk {
    정적 *;
}
-keep public interface com.applovin.sdk** {*; }
-keep 공용 인터페이스 com.applovin.adview** {*; }
-keep 공용 인터페이스 com.applovin.mediation** {*; }
-keep public interface com.applovin.communicator** {*; }
#For Bytedance integration
-keep 공용 인터페이스 com.bytedance.sdk.openadsdk** {*; }
#For Facebook integration
-keepclassmembers class com.facebook.ads.internal.AdSdkVersion {
    정적 *;
}
-keepclassmembers class com.facebook.ads.internal.settings.AdSdkVersion {
    정적 *;
 }
-keepclassmembers class com.facebook.ads.BuildConfig {
    정적 *;
 }
-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 {
    정적 *;
}
-keepclassmembers class com.hyprmx.android.BuildConfig {
    정적 *;
}
-keep public interface com.hyprmx.android.sdk.activity** {*; }
-keep public interface com.hyprmx.android.sdk.graphics** {*; }
# For Inmobi integration##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##for-ironsource-integration
-keep 공용 인터페이스 com. 아이언소스.mediationsdk.sdk** {*; }
-keep public interface com.ironsource.mediationsdk.impressionData.ImpressionDataListener {*; }
# For Mintergral integration##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 클래스 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##for-tapjoy-integration
-keep 공용 인터페이스 com.tapjoy.** {*; }
# For Tencent integration##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 {
    정적 *;
}
-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 클래스 androidx.recyclerview.widget.RecyclerView { *;}
-keep 클래스 androidx.recyclerview.widget.RecyclerView$OnScrollListener { *;}
#For Android
-keep 클래스 * 확장 android.app.Activity
```

## 4단계. 통합 확인##step-4.-verify-your-integration

레벨플레이 SDK는 레벨플레이 통합 테스트 제품군에서 통합이 성공적으로 완료되었는지 확인하는 간편한 방법을 제공합니다. 앱의 연동을 테스트하고, 플랫폼 설정을 검증하고, 설정된 네트워크와 관련된 광고를 검토합니다.

앱에서 테스트 제품군을 활성화하다, 사용 가능하다 init를 설정하기 전에 setMetaData API 호출.

```java
LevelPlay.setMetaData("is_test_suite", "enable");
```

Mediation init가 완료되면 다음 메서드를 호출하여 테스트 제품군을 실행(애플리케이션 컨텍스트 필요).

```java
LevelPlay.launchTestSuite(context);
```

레벨플레이 통합 테스트 제품군의 구현 예와 자세한 내용은 이 [문서](/grow/levelplay/sdk/android/integration-test-suite.md)를 참조하십시오.

## 다음 단계##next-steps

1. 연동 가이드를 따라 광고 형식을 구현합니다.
   * [보상형 비디오](/grow/levelplay/sdk/android/rewarded-ads-integration.md)
   * [인터스티셜 광고](/grow/levelplay/sdk/android/interstitial-integration.md)
   * [Banner](/grow/levelplay/sdk/android/banner-integration.md)
   * [네이티브 광고](/grow/levelplay/sdk/android/native-ads-integration.md) 
2. 앱에 보상형 비디오, 인터스티셜 광고 또는 배너 광고를 통합하고 [Mediation 기사](/grow/levelplay/sdk/android/mediation-networks.md)를 따르십시오.
3. [통합 테스트 제품군](/grow/levelplay/sdk/android/integration-test-suite.md)과의 통합 여부 확인
