# Adobe AIR 的奖励广告服务集成

> 使用 LevelPlay SDK（包括事件监听器和广告放置/位置配置）将奖励视频广告集成到 Adobe AIR 应用程序中。

## 先决条件##prerequisites

确保已正确集成 ironSource Adobe AIR 插件。[此处](/grow/levelplay/sdk/adobe/air-plugin-integration.md)概述了集成。

## 步骤 1.实现奖励视频监听器##step-1.-implement-the-rewarded-video-listener

ironSource AIR 插件会触发多个事件来通知您广告的可用性。要监听任何事件，请调用以下方法：

```text
IronSource.instance.addEventListener( "EventName", functionToCall  );
```

* **EventName** 是包含要监听的事件的字符串。
* **functionToCall** 是在触发事件时要调用的函数。

插件将通知监听器以下列出的所有可能事件：

```java
IronSource.instance.addEventListener("levelPlayRewardedAvailable", levelPlayRewardedAvailable);
IronSource.instance.addEventListener("levelPlayRewardedAdUnavailable", levelPlayRewardedAdUnavailable);
IronSource.instance.addEventListener("levelPlayRewardedAdOpened", levelPlayRewardedAdOpened);
IronSource.instance.addEventListener("levelPlayRewardedOnAdRewarded", levelPlayRewardedOnAdRewarded);
IronSource.instance.addEventListener("levelPlayRewardedAdShowFailed", levelPlayRewardedAdShowFailed);
IronSource.instance.addEventListener("levelPlayRewardedVideoAdClicked", levelPlayRewardedVideoAdClicked);
IronSource.instance.addEventListener("levelPlayRewardedAdClosed", levelPlayRewardedAdClosed);
```

插件将通知监听器以下列出的所有可能事件：

```java
private function levelPlayRewardedAdOpened(event:Event):void {
   //level Play Rewarded Ad Opened
}
private function levelPlayRewardedOnAdRewarded(event:Event):void {
   //level Play Rewarded On Ad Rewarded
}
private function levelPlayRewardedAdShowFailed(event:Event):void {
   //level Play Rewarded Ad Show Failed
}
private function levelPlayRewardedVideoAdClicked(event:Event):void {
   //level Play Rewarded Video Ad Clicked
}
private function levelPlayRewardedAdClosed(event:Event):void {
   //level Play Rewarded Ad Closed
}
private function levelPlayRewardedAdUnavailable(event:Event):void {
   //level Play Rewarded Ad Unavailable
}
private function levelPlayRewardedAvailable(event:Event):void {
   //level Play Rewarded Available
}

```

Ironsource 提供了一种报错代码机制，可帮助您了解在集成或实际生产过程中可能运行的错误。按如下方式从 DataEvent 对象中提取报错数据：

```java
var errorCode:String;
var errorDescription:String;
                
if(event.data){
   var error:Object = JSON.parse(event.data);
   errorDescription = error.error_description;
   errorCode = error.error_code;
}
```

请参阅[此处](/grow/levelplay/sdk/adobe/additional-settings.md)关于 ironSource 报错代码的完整描述。

## 步骤 2.向用户显示视频广告##step-2.-show-a-video-ad-to-your-users

### 广告可用性##ad-availability

通过正确实现奖励视频监听器及其功能，您可以通过 **levelPlayRewardedAvailable** 接收可用性状态。然后，在广告可用性发生更改时，您将收到以下委托函数的通知：

```java
private function levelPlayRewardedAvailable(event:Event):void { 
}
```

使用以下行检查 DataEvent 对象中的奖励视频可用性：

```java
event.data == “true/false”
```

或者，您也可以直接调用以下函数来请求广告可用性：

```java
IronSource.instance.isRewardedVideoAvailable()
```

### 服务视频广告##serve-video-ad

广告网络提供可用视频后，即可向用户展示此视频广告。这是插入触发器器以鼓励用户观看视频广告的理想时机。通过在 **IronSource** 实例上调用 **showRewardedVideo()** 方法，您可以向用户展示视频广告：

```java
IronSource.instance.showRewardedVideo();
```

#### 广告位##ad-placements

通过 LevelPlay 的广告位，您可以自定义和优化奖励视频体验。此工具允许您根据奖励情况向用户展示不同广告位的视频。您可以使用以下函数来定义要展示广告的确切放置/位置。

通过在 ironSource 实例上调用 **showRewardedVideo()** 方法，您可以向用户展示视频广告，并定义要展示广告的确切放置/位置。此放置/位置的奖励设置将从 ironSource 服务器中拉取：

```java
IronSource.instance.showRewardedVideo(YOUR_PLACEMENT_NAME);
```

要获取与每个广告放置/位置关联的详细信息（例如奖励信息），可以调用以下函数：

```java
function getRewardedVideoPlacementInfo(placementName:String):String {}
```

### 封顶和起搏##capping-&-pacing

除了 LevelPlay 的广告位之外，现在还可以为所选广告位配置上限和节奏设置。限制和调整进度可通过限制定义时间范围内的广告服务量来改善 app 中的用户体验。

如果您选择使用奖励视频的上限和节奏工具，我们建议调用以下方法以验证某个放置/位置是否已达到其广告限制。这是为了确保在放置/位置已设置上限或节奏时不会显示奖励视频按钮，因此不会投放视频广告。

```java
var isPlacementCapped:Boolean = IronSource.instance.isRewardedVideoPlacementCapped(YOUR_放置/位置_名称);
```

### 动态 UserId##dynamic-userid

动态 UserID 是用于验证 AdRewarded 交易的参数，并可在整个会话中更改。此参数将通过[服务器到服务器](/grow/levelplay/platform/settings/server-to-server-callback.md)的广告奖励回调接收，必须在调用 showRewardedVideo 之前设置。

* 字字符串必须包含 1-64 个字母数角色符
* 您将在回调网址中收到一个 `dynamicUserId` 参数以及奖励详细信息。

```java
IronSource.instance.setDynamicUserId(id);
```

## 步骤 3.奖励用户##step-3.-reward-the-user

ironSource SDK 将在用户每次成功完成视频时触发 **levelPlayRewardedOnAdRewarded** 事件。**levelPlayRewardedVideoListener** 将接收此事件，以便您可以成功奖励用户。

按如下方式从 DataEvent 对象中提取奖励数据：

```java
var placementId:String;
var placementName:String;
var rewardName:String;
var rewardAmount:int;
                
if(event.data){
   var placement:Object = JSON.parse(event.data);
   placementId = placement.placement_id;
   placementName = placement.placement_name;
   rewardName = placement.placement_reward_name;
   rewardAmount = parseInt(placement.placement_reward_amount);
}
```

**levelPlayRewardedOnAdRewarded** 和 ****levelPlayRewardedAdClosed**** 事件是异步的。确保设置监听器以授予奖励，即使 **levelPlayRewardedOnAdRewarded** 在 **levelPlayRewardedAdClosed** 事件之后被触发也是如此。

```java
private function levelPlayRewardedOnAdRewarded(event:Event):void {
}
```

* LevelPlay 帐户中的默认设置是使用 app 客户端中的 **levelPlayRewardedOnAdRewarded** 回调来通知您用户完成/奖励。此外，如果还想接收后端服务器的通知，可以启用服务器到服务器的回调。
* 如果启用服务器到服务器回调，请记住不要针对同一完成情况多次奖励用户。我们将触客户端户端回调和服务器到服务器回调，因此每次完成时都会收到两个通知。

您现在可以在应用程序中提供奖励视频。

> **Note:**
>
> 如果这是应用程序的新集成，则应用程序默认情况下将处于 IronSource Dashboard 上的“**Test Mode**”。当 app 处于测试模式时，LevelPlay SDK 将向主机打印更多日志，以便提供 SDK 进程的更大可见性。要测试广告库存，请设置[测试设备](/grow/levelplay/sdk/adobe/integration-testing.md)。在启用实时广告库存之前，您将收到不会产生收入的测试广告系列。当 app 准备好进行实时广告库存时，请确保在 **广告单位** 页面上选择 **上线！**。

## 后续步骤##next-steps

按照我们的集成指南在我们的聚合平台上实现其他奖励视频广告网络或配置其他广告单位：

* [聚合](/grow/levelplay/sdk/adobe/mediation-networks.md)
* [插页式视频](/grow/levelplay/sdk/adobe/interstitial-integration.md)
