# Android SDKインテグレーション

> Gradle または手動ダウンロードを使用して LevelPlay Android SDK を統合し、アプリケーションライフサイクル、権限、広告単位リスナーを設定します。

## 前提条件##prerequisites

* Android Operating Systems Version 4.4 (API レベル 19) 以降をサポートします。
* サポートされている Kotlin の最小バージョンは 1.7.0 です。

## ステップ 1. LevelPlay SDK をプロジェクトに追加する##step-1.-add-the-levelplay-sdk-to-your-project

LevelPlay SDK は、Gradle の依存関係と SDK を統合するための手動ダウンロードメカニズムの両方をサポートしています。

### Gradle##gradle

1. アプリケーションの **build.gradle** ファイル inside repositories セクションに、以下のコードを追加します。

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

2. dependencies セクションに以下のコードを追加します。

```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 は LevelPlay SDK に統合され、LevelPlay が実装されると自動的に初期化されます。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. ノート:マニフェストアクティビティーは AAR に含まれています。
6. **dependencies セクション**の下の **build.gradle** ファイルに以下を追加することを確認します

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

7. LevelPlay 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. classes.jar の抽出
4. 名前を mediation-sdk-xxx.jar と adquality-sdk-xxx.jar に変更します。 
5. AndroidManifest.xml 更新

**Update AndroidManifest.xml for Manual JAR Integration** 

**AndroidManifest.xml** を更新するには、以下の手順を実行します。

1.**マニフェスト権限**
以下の権限を **AndroidManifest.xml** ファイルのマニフェストタグ内、ただし `<application>` タグ外に追加します。\*\*

```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" />
           <プロバイダー
               android:name="com.ironsource.lifecycle.IronsourceLifecycleProvider"
               android:authorities="${applicationId}.IronsourceLifecycleProvider" />
   ```

#### アプリケーション##demo-application

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

[Androidデモアプリケーションのダウンロード](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

## ステップ 2. Google 識別子の権限##step-2.-google-identifier-permissions

1. 再生サービスの依存関係を dependencies ブロックに追加して、GAID とアプリケーションセット ID 情報を取得できるようにします。

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

   ```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 再生サービスを利用しません。Amazon プラットフォーム用に構築する場合は、前のステップをスキップします。

## ステップ 3. SDK を初期化する##step-3.-initialize-the-sdk

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

1. 初期化の成功と失敗のコールバックを実装します。
2. 必要に応じて appKey とユーザー ID を使用して LevelPlay 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 {
      オーバーライド fun onInitFailed(エラー:LevelPlayInitError) {
          //再度初期化することをお勧めします
      }
      override fun onInitSuccess(configuration:LevelPlayConfiguration) {
          //広告オブジェクトの作成と広告のロード
      }
   })
   ```

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

**OnInitSuccess** – 初期化が正常に完了したときにトリガーされます。この通知を受け取ったら、広告を作成してロードできます。

**OnInitFailed** – 設定が正常に取得されず、広告をロードできません。後で LevelPlay SDK を初期化してみることをお勧めします (インターネット接続が利用可能なとき、または失敗の理由が解決されたとき)。

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

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

```java
-keepclassmembers class * 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 *; }
-public クラス 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 {
    静的 *;
}
-keep public interface com.amazon.device.ads** {*; }
#For AppLovin integration
-keepclassmembers class com.applovin.sdk.AppLovinSdk {
    静的 *;
}
-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 {
    静的 *;
}
-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 public interface com.ironsource.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 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##for-tapjoy-integration
-keep public interface 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 class androidx.recyclerview.widget.RecyclerView { *;}
-keep class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *;}
#For Android
-keep class * extends android.app.Activity
```

## ステップ 4. インテグレーションの確認##step-4.-verify-your-integration

LevelPlay SDK は、LevelPlay インテグレーションテストスイートを使用してインテグレーションが正常に完了したことを簡単に検証する方法を提供します。アプリケーションのインテグレーションのテスト、プラットフォーム設定の確認、および設定されたネットワークに関連する広告のレビューを行います。

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

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

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

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

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

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

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