# 플러그인 통합 플러그인 통합

> 레벨플레이 SDK를 Flutter 애플리케이션 연동하여 Android 및 iOS 플랫폼 전반에서 광고 Mediation 수익화 활성화하다, 사용 가능하다.

## 필수 조건##prerequisites

* Flutter 플러그인은 Android 및 iOS용 SDK 버전 7.2.1.2부터 지원됩니다.
* Flutter 3.0.0 이상 지원

## 프로젝트에 레벨플레이 Mediation 플러그인 추가##add-the-levelplay-mediation-plug-in-to-your-project

### Pub.dev 통합##pub.dev-integration

pub.dev 인터페이스 사용하여 프로젝트에 레벨플레이 Flutter 플러그인을 추가하는 방법에는 두 가지가 있습니다.

1. Flutter CLI 커맨드 실행

   ```shell
   flutter pub get Unity_levelplay_Mediation
   ```

2. pubspec.yaml 파일에 `unity_levelplay_mediation` 정의를 추가하여 pubspec.yaml 파일을 업데이트합니다.

   ```yaml
   dependencies:
     flutter:
       sdk: 플러터
      unity_levelplay_mediation: '>=9.1.0 <9.2.0'
   ```

3. Ad Quality SDK 추가

> **Note:**
>
> Flutter 플러그인 버전 3.1.1부터 Ad 품질 레벨플레이 SDK의 일부로, 레벨플레이 구현하면 자동으로 초기화됩니다. 레벨플레이가 통합되지 않은 빌드 또는 3.1.1 이전 버전의 플러그인 플러그인에 대해 다음의 [매뉴얼 통합](#manual-integration) 단계를 사용하십시오.

1. **Android**

   ```groovy
   dependencies {
       implementation 'com.unity3d.ads-mediation:adquality-sdk:9.3.1'
   }
   ```

2. **iOS**

   ```ruby
   pod 'IronSourceAdQualitySDK','9.3.1'

   ```

### 수동 연동##manual-integration

[Flutter 플러그인 버전 다운로드](https://pub.dev/packages/ironsource_mediation/)

### 레벨플레이 데모 앱##levelplay-demo-app

연동 데모 애플리케이션 앱에 Ironsource 레벨플레이 연동하는 방법을 보여 줍니다.

[Flutter 데모 애플리케이션 다운로드](https://github.com/ironsource-mobile/Flutter-SDK/tree/master/example)

## iOS용 추가 설정##additional-settings-for-ios

### SKAdNetwork 지원##skadnetwork-support

SDK 7 이상을 사용하는 동안 아이언소스 네트워크 광고 표시를 활성화하다, 사용 가능하다 앱 프로퍼티 리스트 파일(Info.plist)에 아이언소스 광고 네트워크 ID를 포함해야 합니다.

1. Xcode의 프로젝트 내비게이터에서 **Info.plist**를 선택합니다.
2. 프로퍼티 목록 에디터에서 키 옆의 \*\*Add 버튼(+)\*\*을 선택하고 **Return**을 누릅니다.
3. 키 이름 **SKAdNetworkItems**를 입력합니다.
4. 다이얼로그의 **Type** 열에서 **배열**을 선택합니다.
5. 딕셔너리 항목과 해당하는 단일 스팅 항목을 만듭니다.
6. 키 이름 **SKAdNetworkIdentifier를** 입력하고 키 값을 입력합니다.

   ```xml
   su67r6k2v3.skadnetwork
   ```

   다음 코드를 사용하여 Info.plist에 `SKAdNetworkIdentifier`를 추가할 수도 있습니다.

```xml
<key>SKAdNetworkItems</key>
<array>
   <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>su67r6k2v3.skadnetwork</string>
   </dict>
</array>
```

아이언소스 [SKAdNetwork ID Manager](/grow/levelplay/sdk/flutter/skadnetwork-id-manager.md)를 사용하여 아이언소스 네트워크 및 미디에이션 네트워크 ID를 지원하는 코드 스니핏을 생성합니다.

프로퍼티 목록 편집에 대한 자세한 내용은 [Xcode 기술 자료](https://help.apple.com/xcode/mac/current/#/dev3f399a2a6)를 참조하십시오.

### 유니버설 SKAN 보고##universal-skan-reporting

광고된 앱의 모든 수요 소스에서 설치 확인 포스트백을 받으려면 앱의 Info.plist에 [NSAdvertisingAttributionReportEndpoint](https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint) 키를 추가하십시오.

1. Xcode의 프로젝트 내비게이터에서 Info.plist를 선택합니다.
2. 프로퍼티 리스트 에디터 키 옆의 Add 버튼(+)을 선택하고 Return을 누릅니다.
3. 키 이름을 입력합니다[NSAdvertisingAttributionReportEndpoint](https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint)
4. Type 열의 팝업 메뉴에서 String을 선택합니다.
5. URL 입력: `https://postbacks-is.com/`

### 앱 전송 보안 설정##app-transport-security-settings

모든 Mediation 네트워크에서 광고 게재에 대한 무중단 지원을 보장하기 위해 다음과 같은 변경 사항을 `info.plist`에 적용하는 것이 중요합니다.

* `NSAppTransportSecurity`라는 사전에 추가합니다. 이 사전을 **Top Level Key**에 추가해야 합니다.
* 이 사전 안에 `NSAllowsArbitraryLoads`라는 부울을 추가하고 **YES**로 설정합니다.
* 이로 인해 충돌이 발생할 수 있으므로 info.plist에 `NSAllowsArbitraryLoads` 외에 다른 예외가 포함되어 있지 않습니다.
* ATS에 대한 자세한 내용은 [Apple 기술 자료](https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33)를 참조하십시오.

## Android용 추가 설정##additional-setup-for-android

### 플레이 서비스 종속성##play-services-dependencies

다음과 같이 앱 레벨 Gradleervices 종속성을 추가합니다.

```groovy
dependencies {
   implementation 'com.google.android.gms:play-services-ads-identifier:18.2.0'
   implementation 'com.google.android.gms:play-services-appset:16.1.0'
}
```

#### Android 12 지원##android-12-support

타겟 API 레벨을 31(Android 12)으로 업데이트하는 앱 매니페스트 파일에 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)에서 확인하십시오.

#### AndroidManifest.xml에서 레이블 교체##replace-label-on-androidmanifest.xml

AndroidManifest에서 레이블 관련 오류를 방지하려면 다음을 수행합니다.

* 프로젝트의 AndroidManifest.xml에 ‘xmls:tools’를 추가합니다.
* 'tools:replace='android: 레이블''을 '애플리케이션' 태그에 추가합니다.

## 레벨플레이 SDK 초기화##initialize-levelplay-sdk

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

### 레벨플레이 SDK 8.6.0 이상##levelplay-sdk-8.6.0-and-later

1. 초기화 성공 또는 실패에 대한 콜백을 구현합니다.

2. 세션에서 초기화할 광고 형식 리스트를 정의합니다.

3. `LevelPlayInitRequest.builder`를 사용하여 init 요청을 생성합니다. 빌더는 다음 파라미터를 수신합니다.

   * appKey(필수)
   * 사용자 ID(선택 사항: 서버 간 콜백을 사용하거나 광고 품질 사용자 경로를 사용하는 경우 필수)

4. LevelPlay.init을 호출하고 컨텍스트와 init 요청을 전달합니다.

```java
클래스 MyLevelPlayInitListener는 LevelPlayInitListener 를 구현합니다.
    @override
    void onInitFailed(LevelPlayInitError error) {
	      // Provided when init is failed
    }
    @override
    void onInitSuccess(LevelPlayConfiguration configuration) {
	      // Provided when init is successfully executed
    }
}
LevelPlayInitRequest initRequest = LevelPlayInitRequest.builder([APP_KEY])
                .withUserId("userId") // required for server-to-server callbacks or Ad Quality user journey (optional otherwise)
                .build();
LevelPlay.init(initRequest, MyLevelPlayInitListener());
```

### LevelPlay SDK before 8.6.0##levelplay-sdk-before-8.6.0

1. 초기화 성공 또는 실패에 대한 콜백을 구현합니다.
2. 레거시 레벨플레이 API 지원이 필요한 광고 형식 리스트를 정의합니다. 여기에는 보상형 광고 포함되어야 합니다.
3. 해당하는 경우 appKey, 광고 형식 및 사용자 ID를 사용하여 레벨플레이.init API 호출합니다.

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

```java
클래스 MyLevelPlayInitListener는 LevelPlayInitListener 를 구현합니다.
  @override
  void onInitFailed(LevelPlayInitError error) {
	// Provided when init is failed
  }
  @override
  void onInitSuccess(LevelPlayConfiguration configuration) {
	// Provided when init is successfully executed
  }
}
// Init the SDK when implementing the Multiple Ad Units Interstitial and Banner APIs, and Rewarded using legacy APIs  
List<AdFormat> legacyAdFormats = [AdFormat.REWARDED];
LevelPlayInitRequest initRequest = LevelPlayInitRequest.builder([APP_KEY])
                .withLegacyAdFormats(legacyAdFormats)
                .withUserId("userId") // required for server-to-server callbacks or Ad Quality user journey (optional otherwise)
                .build();
LevelPlay.init(initRequest, MyLevelPlayInitListener());
```

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

* `onInitSuccess`: init가 성공적으로 완료되고 광고를 로드할 수 있을 때 트리거됩니다.
* `onInitFailed`: 설정 성공적으로 수신되지 않았으며 광고를 로드할 수 없습니다. 권장되는 베스트 프랙티스는 나중에 레벨플레이 SDK를 초기화하는 것입니다.

다음 베스트 프랙티스를 고려하십시오.

* init API 이전에 호출된 모든 API는 변경되지 않았으며 기능과 구문 측면에서 그대로 유지되어야 했습니다. 여기에는 특정 광고 형식과 관련된 [고급 설정](/grow/levelplay/sdk/unity/additional-settings.md), [규정 설정](/grow/levelplay/sdk/unity/regulation-advanced-settings.md) 또는 기타 API가 포함됩니다.
* 초기화에 실패하면 SDK를 다시 초기화해 볼 수 있습니다. 성공적인 초기화 프로세스가 끝나면 광고를 로드할 수 있습니다.

## 연동 확인##verify-your-integration

레벨플레이 통합 테스트 제품군을 사용하여 앱의 통합을 테스트하고, 플랫폼 설정을 검증하고, 설정된 네트워크와 관련된 광고를 검토할 수 있습니다.

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

```java
LevelPlay.setMetaData({'is_test_suite': ['enable']});
```

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

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

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

### 어댑터 디버그##adapters-debug

Mediation 기반 네트워크 어댑터 및 SDK의 디버그 로그를 활성화하다, 사용 가능하다 다음 API 호출.

```java
LevelPlay.setAdaptersDebug(true);
```

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

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

```java
-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface {
    public *;
}
-keepclassmembers 클래스 * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
-keep public class com.google.android.gms.ads.** {
   public *;
}
-keep class com.ironsource.adapters** { *;
}
-keep class com.ironsource.unity.androidbridge.** { *;
}
-dontwarn com. 아이언소스.mediationsdk.**
-dontwarn com.ironsource.adapters**
-keepattributes JavascriptInterface
-keepclassmembers 클래스 * {
    @android.webkit.JavascriptInterface <methods>;
}
```

## 다음 단계##next-steps

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