# Android SDK 集成

> 使用 Gradle 集成 LevelPlay Android SDK 或手动下载并配置 app 生命周期、权限和广告单元监听器。

## 先决条件##prerequisites

* 我们支持 Android 操作系统版本 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** 文件的 repository 部分中：

   ```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)，请更新 **Settings.gradle** 文件的代码仓库部分，而不是**构建.gradle**。请注意，代码仓库部分应包含在 dependencyResolutionManagement 部分中：

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

> **Note:**
>
> 从版本 8.9.0 开始，AdQuality 集成到 LevelPlay SDK 中，并在实现 LevelPlay 时自动初始化。[此处](/grow/ad-quality/overview.md)了解有关 AdQuality 的更多信息。

#### 手动下载##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. 转到**文件** > **New** > **New Module** > **Import .AAR**，然后导航到 .AAR 文件的下载位置。
5. 注意：清单活动包含在 AAR 中。
6. 确保将以下内容添加到**构建.gradle** 文件的 **dependencies 部分：**

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

7. 从 LevelPlay SDK 7.0.4+ 开始，必须将 Kotlin JAR 添加到项目中。您可以在[此处](https://developer.android.com/kotlin/add-kotlin)阅读有关 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

**更新 AndroidManifest.xml 以进行手动 JAR 集成** 

要更新 **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 应用程序##demo-application

Integration Demo 应用程序演示了如何在 app 中集成 LevelPlay Mediation。

[下载 Android Demo 应用程序](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

## 步骤 2.Google 标识符权限##step-2.-google-identifier-permissions

1. 将 播放 服务 依赖项添加到依赖项代代码块中，以便检索 GAID app ID 信息。

   ```java
   dependencies { 
       实现 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' 
   }
   ```

   在[此处](https://developer.android.com/training/articles/app-set-id)了解有关 Google app set ID 的更多信息。

2. 将目标 API 级别更新为 33（Android 13）的应用程序需要在清单文件中声明 Google 播放服务的正常权限，如下所示：

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

   在[此处](https://support.google.com/googleplay/android-developer/answer/6048248?hl=en)阅读有关 Google 广告 ID 更改的更多信息。

> **Note:**
>
> Amazon 设备不使用 Google 播放服务。如果要针对 Amazon 平台进行构建，请跳过上一步。

## 步骤 3.初始化 SDK##step-3.-initialize-the-sdk

要初始化 LevelPlay SDK，请执行以下步骤：

1. 实现初始化成功和失败的回调。
2. 使用 appKey 和用户 ID（如果相关）调用 LevelPlay init API。

> **Note:**
>
> 如果使用服务器到服务器回调来奖励用户，或使用广告品质用户旅程，请将用户 ID 添加为初始化 API 的一部分。

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) {
          //建议再次初始化
      }
      覆盖 fun onInitSuccess(configuration:LevelPlayConfiguration) {
          //创建广告对象并加载广告服务
      }
   })
   ```

### **LevelPlay 初始化监听器**##**levelplay-init-listeners**

**OnInitSuccess** – 初始化成功完成时触发。收到此指示后，您可以创建和加载广告。

**OnInitFailed** – 未成功检索配置，无法加载广告服务。建议稍后尝试并初始化 LevelPlay SDK（当互联网连接可用或故障原因得到解决时）。

### 仅适用于 ProGuard 用户##for-proguard-users-only

如果将 ProGuard 与 LevelPlay SDK 结合使用，必须将以下代码添加到 ProGuard 文件（Android Studio：proguard-rules.pro 或 Eclipse：proguard-项目.txt）：

```java
-keepclassmembers 类 * 实现 Android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
#noinspection ShrinkerUnresolvedReference
#unity
-keep class com.google.android.gms.ads.identifier.** { public *; }
-keep class com.google.android.gms.appset.** { *; }
-keep class com.google.android.gms.tasks.** { *; }
#adapters
- keep 类 com. ironsource.adapters。** { *; }
#sdk
-dontwarn com. ironsource。**
-dontwarn com. ironsource.adapters。**
-keepclassmembers 类 com. ironsource。** { public *; }
- 保留 public 类 com. ironsource。**
- keep 类 com. ironsource.adapters。** { *;
}
#omid
-dontwarn com.iab.omid。**
-keep 类 com.iab.omid** {*;}
#javascript
-keepattributes JavascriptInterface
-keepclassmembers 类 * { @android.webkit.JavascriptInterface <methods>; }
#For AmazonAps integration
-keep class com.amazon.device.ads.DtbThreadService {
    static * ;
}
- 保留公共接口 com.amazon.device.广告服务** {*; }
#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 * ;
 }
- 保留公共接口 com.facebook.广告服务** {*; }
#For Fairbid
-keep public interface com.fyber.fairbid.ads.interstitial** {*; }
- 保持公共接口 com.fyber.fairbid.广告服务。rewarded** {*; }
- 保留 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 类 com.hyprmx.android.BuildConfig {
    static * ;
}
-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.*
- 保留公共接口 com.inmobi.广告服务。listeners** {*; }
- 保留公共接口 com.inmobi.广告服务。InMobiInterstitial** {*; }
- 保留公共接口 com.inmobi.广告服务。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.view.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
- 保留公共接口 com.Tapjoy。** {*; }
# For Tencent integration##for-tencent-integration
-keep public interface com.qq.e.ads.interstitial2** {*; }
-keep public interface com.qq.e.ads.interstitial3** {*; }
- 保留公共接口 com.qq.e.广告服务。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 类 com.verizon.广告服务.edition.BuildConfig {
    static * ;
}
- 保留公共接口 com.verizon.广告服务。interstitialplacement** {*; }
- 保留公共接口 com.verizon.广告服务。inlineplacement** {*; }
-keep public interface com.verizon.ads.vastcontroller** {*; }
- 保留公共接口 com.verizon.广告服务。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 class androidx.recyclerview.widget.RecyclerView$OnScrollListener { *;}
#For Android
-keep 类 * 扩展 Android.app.Activity
```

## 步骤 4.验证您的集成##step-4.-verify-your-integration

LevelPlay SDK 提供了一种简单的方法来验证是否已使用 LevelPlay 集成测试套件成功完成集成。测试app的集成度，验证平台设置，并审查与配置的网络相关的广告服务。

要在 app 中启用测试套件，请在设置 init 之前调用 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)
   * [插页式视频](/grow/levelplay/sdk/android/interstitial-integration.md)
   * [横幅广告](/grow/levelplay/sdk/android/banner-integration.md)
   * [原生广告服务](/grow/levelplay/sdk/android/native-ads-integration.md) 
2. 在您的 app 中集成奖励视频、插页式或横幅广告服务，并关注我们的[聚合文章](/grow/levelplay/sdk/android/mediation-networks.md)。
3. 验证您与我们的[集成测试套件](/grow/levelplay/sdk/android/integration-test-suite.md)的集成。
