# Flutter プラグインインテグレーション

> LevelPlay SDK を Flutter アプリケーションに統合して、Android と iOS プラットフォームで広告メディエーションとMonetization化を可能にします。

## 前提条件##prerequisites

* Flutter プラグインは、Android および iOS 用の SDK バージョン 7.2.1.2 からサポートされています。
* Flutter 3.0.0+ サポート

## LevelPlay Mediation プラグインをプロジェクトに追加する##add-the-levelplay-mediation-plug-in-to-your-project

### Pub.dev Integration##pub.dev-integration

pub.dev インターフェースを使用して LevelPlay Flutter プラグインをプロジェクトに追加する方法は 2 つあります。

1. Flutter CLI コマンドの実行

   ```shell
   flutter pub get unity_levelplay_mediation
   ```

2. pubspec.yaml ファイルに`unity_levelplay_mediation`定義を追加して、pubspec.yaml ファイルを更新。

   ```yaml
   dependencies (依存関係):
     flutter:
       sdk: flutter
      unity_levelplay_mediation: '>=9.1.0 <9.2.0'
   ```

3. 広告品質 SDK の追加

> **Note:**
>
> Flutter プラグインバージョン 3.1.1 では、広告品質は LevelPlay SDK の一部であり、LevelPlay を実装すると自動的に初期化されます。LevelPlay が統合されていないビルド、または 3.1.1 より前のバージョンの Flutter プラグインでは、以下の [手動インテグレーション](#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 アプリケーション##levelplay-demo-app

インテグレーション Demo アプリケーションは、Ironsource LevelPlay をアプリケーションに統合する方法を示しています。

[Flutter デモアプリケーションをダウンロード](https://github.com/ironsource-mobile/Flutter-SDK/tree/master/example)

## iOS の追加設定##additional-settings-for-ios

### SKAdNetworkサポート##skadnetwork-support

SDK 7 以降を使用しているときに Ironsource ネットワークワーク広告のディスプレイを有効にするには、アプリケーションのリスト(Info.plist) に Ironsource 広告ネットワーク ID を必ず含めてください。

1. Xcode のプロジェクトナビゲーターで **Info.plist** を選択します。
2. プロパティリストエディタでキーの横にある**追加ボタン (+)** を選択し、**Return キーを**押します。
3. キー名 **SKAdNetworkItems** を入力します。
4. ダイアログの「\*\*型」\*\*列で、**配列**を選択します。
5. ディクショナリ項目と対応する 1 つの刺項目を作成します。
6. キー名 **SKAdNetworkIdentifier** とキー値を入力します。

   ```xml
   su67r6k2v3.skadnetwork
   ```

   以下のコードで Info.plist に`SKAdNetworkIdentifier`を追加することもできます。

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

ironsource [SKAdNetwork IDs Manager](/grow/levelplay/sdk/flutter/skadnetwork-id-manager.md) を使用して、Ironsource ネットワークとメディエーションネットワーク 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. プロパティリストエディタでキーの横にある追加ボタン (+) を選択し、Return キーを押します。
3. キー名 [NSAdvertisingAttributionReportEndpoint](https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint) を入力します。
4. Type カラムのポップアップメニューから文字列を選択します。
5. URL を入力します。 `https://postbacks-is.com/`

### アプリケーション転送のセキュリティ設定##app-transport-security-settings

すべてのメディエーションネットワークで広告配信のサポートを中断しないようにするには、`info.plist`に以下の変更を加えることが重要です。

* `NSAppTransportSecurity` というディクショナリを追加します。このディクショナリは**トップレベルキー**に追加してください。
* このディクショナリ内で、`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

以下のように、再生 Services の依存関係をアプリケーションレベルの ビルド.gradle に追加します。

```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 再生サービスの法線権限を宣言する必要があります。

```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:ラベル”」を追加します。

## LevelPlay SDK の初期化##initialize-levelplay-sdk

LevelPlay SDK を初期化するには、以下の手順に従います。

### LevelPlay SDK 8.6.0 以降##levelplay-sdk-8.6.0-and-later

1. 初期化の成功と失敗のコールバックを実装します。

2. セッションで初期化する広告フォーマットのリストを定義します。

3. `LevelPlayInitRequest.builder` を使用して init リクエストを作成します。Builder は以下のパラメータを受け取ります。

   * appKey (必須)
   * ユーザーID(任意:サーバー間のコールバックまたは広告品質ユーザー ジャーニーを使用している場合に必要)

4. LevelPlay.init を呼び出し、コンテキストと リクエストを渡します。

```java
class MyLevelPlayInitListener implements 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. 古い機能 LevelPlay API のサポートを必要とする広告フォーマットのリストを定義します。これには REWARDED が含まれます。
3. appKey、広告フォーマット、およびユーザー ID (必要な場合) を使用して LevelPlay.init API を呼び出します。

サーバー間のコールバックを使用してユーザーに報酬を与える場合や、広告品質ユーザー ジャーニーを使用する場合は、初期化APIの一部としてユーザーIDを追加します。

```java
class MyLevelPlayInitListener implements 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());
```

### LevelPlay Init リスナー##levelplay-init-listeners

* `onInitSuccess`: init が正常に完了し、広告をロードできるようになったときにトリガーされます。
* `onInitFailed`: 設定が正常に受信されず、広告をロードできません。推奨されるベストプラクティスは、後で LevelPlay SDK を試行して初期化することです。

以下のベストプラクティスを検討してください。

* init API の前に呼び出されたすべての API は変更されておらず、機能と構文の点ではそのままになっている必要があります。これには、特定の広告形式に関連する[詳細設定](/grow/levelplay/sdk/unity/additional-settings.md)、[規制設定](/grow/levelplay/sdk/unity/regulation-advanced-settings.md)、その他の API が含まれます。
* 初期化に失敗した場合は、SDK の初期化を再試行できます。初期化プロセスが成功した後にのみ、広告をロードできるようになります。

## インテグレーションの確認##verify-your-integration

LevelPlay インテグレーションテストスイートを使用して、アプリケーションのインテグレーションのテスト、プラットフォーム設定の確認、構成したネットワークに関連する広告のレビューを行います。

アプリケーションでテストスイートを有効にするには、初期化を設定する前に setMetaData API を呼び出します。

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

メディエーションの初期化が正常に完了したら、以下のメソッドを呼び出してテストスイートを起動します (アプリケーションコンテキストが必要です)。

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

LevelPlay インテグレーションテストスイートの詳細と実装例については、この[記事](/grow/levelplay/sdk/flutter/integration-test-suite.md)を操作してください。

### Adapters デバッグ##adapters-debug

以下の API を呼び出して、メディエーションネットワークワークアダプターと SDK のデバッグを有効にします。

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

### ProGuard ユーザーのみ##for-proguard-users-only

LevelPlay SDK で ProGuard を使用している場合は、ProGuard ファイルに以下のコードを追加する必要があります (Android Studio: proguard-rules.Pro または Eclipse: proguard-project.txt)。

```java
-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface {
    public *;
}
-keepclassmembers class * 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.ironsource.mediationsdk.**
-dontwarn com.ironsource.adapters.**
-keepattributes JavascriptInterface
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
```

## 次のステップ##next-steps

1. インテグレーション ガイドに従って広告フォーマットを実装
   * [動画リワード](/grow/levelplay/sdk/flutter/rewarded-ads-integration.md)
   * [Interstitial (インタースティシャル)](/grow/levelplay/sdk/flutter/interstitial-integration.md)
   * [Banner](/grow/levelplay/sdk/flutter/banner-integration.md)
   * [ネイティブ広告](/grow/levelplay/sdk/flutter/native-ads-integration.md)
2. 動画リワード広告、インタースティシャル広告、バナー広告をアプリケーションに統合します。[メディエーションに関する記事](/grow/levelplay/sdk/flutter/mediation-networks.md)を参照してください。
3. [インテグレーションテストスイート](/grow/levelplay/sdk/flutter/integration-test-suite.md)とのインテグレーションを確認します。
