# React Native 插件集成

> 将 Unity LevelPlay React Native 插件(v8.4.0+)集成到应用程序中以启用广告聚合和 Monetization。

## 先决条件##prerequisites

* 适用于 Android 的原生 SDK 版本 7.2.4.1 和 iOS 的原生 SDK 版本 7.2.4 支持我们的 React Native 插件。
* 该插件支持 JavaScript 和 TypeScript。类型声明包含在 npm 软件包。
* Support React Native 0.66+。
* iOS 版本支持是按网络定义的。 LevelPlay 广告服务和 LevelPlay 聚合支持 iOS 版本 12+、XCode 版本 15.4+。
* Android 操作系统版本 5.0（API 级别 21）+。

## 步骤 1.向项目添加 Unity LevelPlay React Mediation 插件##step-1.-add-the-unity-levelplay-react-mediation-plugin-to-your-project

### NPM 集成##npm-integration

可使用 npm 将 Unity LevelPlay React Native 插件添加到项目中有两个选项：

1. 运行 npm CLI 命令

   ```shell
   npm 安装 Unity-levelplay-mediation
   ```

2. Update 软件包 文件：将 Unity-levelplay-mediation 定义添加到 软件包 文件中：

   ```json
   "dependencies": {
       "unity-levelplay-mediation":"9.1.0"
   }
   ```

3. **添加 Ad Quality SDK**

   > **Note:**
   >
   > 从 React Native Plugin 3.1.1 版开始，Ad 品质 集成到 LevelPlay SDK 中，并在实现 LevelPlay 时自动初始化。如果未在构建中实现 LevelPlay，或者使用的是 3.1.1 之前的 React Native Plugin 版本，则适用以下概述的步骤。

   Android：

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

   iOS：

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

**手动集成**

1. [下载 React 原生插件版本](https://github.com/ironsource-mobile/react-native-SDK/archive/refs/heads/master.zip)
2. 将 Unity-levelplay-mediation 定义添加到 软件包 文件中：

```json
"dependencies": {
  "unity-levelplay-mediation":"路径/目标/本地/目录"
}
```

### Unity LevelPlay 演示应用程序##unity-levelplay-demo-app

集成demo应用程序演示了如何在app程序中集成 Unity LevelPlay。

[下载 React Native demo 应用程序](https://github.com/ironsource-mobile/react-native-SDK/tree/master/example)

## 步骤 2.iOS 的其他设置##step-2.-additional-settings-for-ios

### SKAdNetwork 支持##skadnetwork-support

要在使用 SDK 7+ 启用 LevelPlay 网络广告服务的显示，请确保在app属性列表文件 (Info.plist) 中包含 LevelPlay 广告网络 ID。 

1. 在 Xcode 中的项目导航器中选择 **Info.plist**
2. 选择属性列表编辑器中某个关键点旁边的**添加按钮 (+)**，然后按 **Return**
3. 键入键名称 **SKAdNetworkItems**
4. 从 Type 列的弹出菜单中选择 **Array**
5. 创建一个字典项，并在其下方创建一个单刺项  
6. 输入键名称 **SKAdNetworkIdentifier** 和键值：

   ```xml
   su67r6k2v3.skadnetwork
   ```

您还可以使用以下代码将 **SKAdNetworkIdentifier** 添加到 Info.plist：

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

> **Note:**
>
> 使用 [SKAdNetwork IDs Manager](/grow/levelplay/sdk/react/skadnetwork-id-manager.md) 创建代码片段以支持 LevelPlay 网络和聚合网络 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. 键入网址：`https://postbacks-is.com`

### app 传输安全设置##app-transport-security-settings

为了确保在所有聚合网络中不间断地支持广告投放，必须在 **info.plist** 中进行以下更改：

* 添加一个名为“**NSAppTransportSecurity**”的字典。确保在“**顶级键**”上添加此字典。
*  在此字典中，添加一个名为“**NSAllowsArbitraryLoads**”的布尔值，并将其设置为 **YES**。
* 确保 info.plist 不包含除“**NSAllowsArbitraryLoads**”之外的任何其他异常，因为这可能会产生冲突。
* 在[此处](https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33)查找有关安非他明类兴奋剂的更多信息。

## 步骤 3.Android 的其他设置##step-3.-additional-setup-for-android

### 播放服务依赖项##play-services-dependencies

将 播放 服务 Dependencies 添加到app程序级别的 构建，如下所示：

```js
dependencies {
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
    implementation 'com.google.android.gms:play-services-basement:18.3.0'
    implementation 'com.google.android.gms:play-services-appset:16.0.2'
}
```

### Android 12 支持##android-12-support

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

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

请参阅 [Google 文档](https://support.google.com/googleplay/android-developer/answer/6048248)了解有关 Google Advertising ID 更改的更多信息。

## 步骤 4.初始化 LevelPlay SDK##step-4.-initialize-levelplay-sdk

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

### LevelPlay SDK 8.7.0+##levelplay-sdk-8.7.0+

1. 实现初始化成功和失败的回调。

2. 使用 **LevelPlayInitRequest.Builder** 创建初始化请求。构建器应接收以下参数：

   * 您的 appKey（必填）
   * 用户 ID（可选：如果使用服务器到服务器回调或使用广告品质用户旅程，则需要此 ID）

3. 调用 **LevelPlay.init** 并通道上下文和初始化请求。

```js
const initListener：LevelPlayInitListener = {
    onInitFailed：（报错：LevelPlayInitError) => {
        // Provided when init fails
    },
    onInitSuccess：（配置：LevelPlayConfiguration) => {
        // Provided when init is successfully executed
    }
}
// Init the SDK when implementing the Multiple Ad Units APIs for all ad formats
const initRequest：LevelPlayInitRequest = LevelPlayInitRequest.builder(APP_KEY)
      .withUserId("userId") // required for server-to-server callbacks or Ad Quality user journey (optional otherwise)
      .build();
LevelPlay.init(initRequest, initListener)
```

### LevelPlay SDK 8.7.0 之前的版本##levelplay-sdk-before-8.7.0

1. 实现初始化成功和失败的回调。
2. 定义需要旧版 Ironsource API 支持的广告格式列表。这应包括奖励。 
3. 使用 appKey、广告格式和用户 ID（如果相关）调用 LevelPlay init API。

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

```js
const initListener：LevelPlayInitListener = {
   onInitFailed：（报错：LevelPlayInitError) => {
    // Provided when init is failed
   },
   onInitSuccess：（配置：LevelPlayConfiguration) => {
    // Provided when init is successfully executed
   }
}
// Init the SDK when implementing the Multiple Ad Units Interstitial and Banner APIs, and Rewarded using legacy APIs  
const legacyAdFormats = [AdFormat.REWARDED];
const initRequest：LevelPlayInitRequest = LevelPlayInitRequest.builder(APP_KEY)
      .withLegacyAdFormats(legacyAdFormats)
      .withUserId("userId") // required for server-to-server callbacks or Ad Quality user journey (optional otherwise)
      .build();
await LevelPlay.init(initRequest, initListener)
```

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

* **onInitSuccess –** 将在初始化成功完成时触发，并可加载广告服务。
* **onInitFailed –** 未成功接收配置，无法加载广告服务。建议稍后尝试并初始化 LevelPlay SDK。

在初始化 API 之前调用的所有 API 均未更改，在功能和语法方面应保持原样。这包括[高级设置](/grow/levelplay/sdk/react/advanced-settings.md)、[监管设置](/grow/levelplay/sdk/react/regulation-advanced-settings.md)或与指定广告格式相关的其他 API。  

如果初始化失败，可以尝试再次初始化 SDK。只有在初始化过程成功之后，才能加载广告服务。

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

使用 LevelPlay 集成测试套件可以测试app程序的集成情况，验证平台设置，并审查与配置的网络相关的广告服务。 

要在 app 中启用测试套件，请在设置 init 之前调用 setMetaData API：

```js
LevelPlay.setMetaData('is_test_suite', ['enable'])
```

聚合初始化成功完成后，通过调用以下方法启动测试套件：

```js
LevelPlay.launchTestSuite()
```

有关 LevelPlay 集成测试套件的更多详细信息和实现示例，请导航到本[文章](/grow/levelplay/sdk/react/integration-test-suite.md)。

### 适配器调试##adapters-debug

调用以下 API 启用聚合网络适配器和 SDK 的调试日志：

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

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

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

```js
-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface {
    public *;
}
-keepclassmembers 类 * 实现 Android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
- 保留 public 类 com.google.android.gms.广告服务。** {
   public *;
}
- keep 类 com. ironsource.adapters。** { *;
}
- 保留 com. ironsource. unity.androidbridge 类。** { *;
}
-dontwarn com. ironsource.mediationsdk。**
-dontwarn com. ironsource.adapters。**
-keepattributes JavascriptInterface
-keepclassmembers 类 * {
    @android.webkit.JavascriptInterface <methods>;
}
```

## 后续步骤##next-steps

1. 按照我们的集成指南来实现广告格式
   * [奖励视频](/grow/levelplay/sdk/react/rewarded-ads-integration.md)
   * [插页式视频](/grow/levelplay/sdk/react/interstitial-integration.md)
   * [横幅广告](/grow/levelplay/sdk/react/banner-integration.md)
   * [原生广告服务](/grow/levelplay/sdk/react/native-ads-integration.md)
2. 在您的 app 中集成奖励视频、插页式或横幅广告服务，并关注我们的[聚合文章](/grow/levelplay/sdk/react/mediation-networks.md)。
3. 验证您与我们的[集成测试套件](/grow/levelplay/sdk/react/integration-test-suite.md)的集成。
