---
metadata:
  - name: generator
    content: Diplodoc Platform v5.55.2
alternate:
  - https://ads.yandex.com/helpcenter/en/easy/integration/android/formats/rewarded.md
  - https://ads.yandex.com/helpcenter/ru/easy/integration/android/formats/rewarded.md
  - https://ads.yandex.com/helpcenter/zh/easy/integration/android/formats/rewarded.md
  - href: zh/easy/integration/android/formats/rewarded.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/zh/llms.txt

# 激励广告

<!-- source: zh/easy/_includes/sdk-guide.md -->
激励广告是一种全屏广告格式，用户观看广告可获得奖金或其他奖励（例如游戏币、重试次数、高级功能使用权等）。

{% note info %}

用户 **决定** 是跳过广告还是观看并获得奖励。

{% endnote %}
<!-- endsource: zh/easy/_includes/sdk-guide.md -->

<!-- source: zh/easy/_includes/notes-android-easy-guide.md -->
{% note info %}

[演示项目](https://ads.yandex.com/helpcenter/zh/easy/integration/android/testing.md#demo) 中提供了展示所有格式类型运作原理的示例。

{% endnote %}
<!-- endsource: zh/easy/_includes/notes-android-easy-guide.md -->

## 使用即用型 XML 文件创建激励广告的示例

{% list tabs %}

- Kotlin

  ```kotlin
  class RewardedAdActivity : AppCompatActivity(), RewardedAdEventListener {

      private var rewardedAdLoader: RewardedAdLoader? = null
      private var rewardedAd: RewardedAd? = null
      private val adUnitId = "demo-rewarded-yandex"
      private lateinit var binding: ActivityRewardedAdBinding

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          binding = ActivityRewardedAdBinding.inflate(layoutInflater)
          setContentView(binding.root)

          binding.btnLoadBanner.setOnClickListener {
              loadRewardedAd()
          }
          binding.btnShowBanner.setOnClickListener {
              showRewardedAd()
          }

          rewardedAdLoader = RewardedAdLoader(this).apply {
              setAdLoadListener(object : RewardedAdLoadListener {
                  override fun onAdLoaded(ad: RewardedAd) {
                      rewardedAd = ad;
                      enableShowAdButton()
                  }

                  override fun onAdFailedToLoad(adRequestError: AdRequestError) {
                      disabeShowAdButton()
                  }
              })
          }
      }

      private fun loadRewardedAd() {
          disabeShowAdButton()
          rewardedAdLoader?.loadAd(createAdRequestConfiguration())
      }

      private fun createAdRequestConfiguration(): AdRequestConfiguration =
          AdRequestConfiguration.Builder(adUnitId).build()

      private fun showRewardedAd() {
          disabeShowAdButton()
          rewardedAd?.apply {
              setAdEventListener(this@RewardedAdActivity)
              show(this@RewardedAdActivity)
          }
      }

      private fun destroyRewardedAd() {
          // 不要忘记将事件监听器设置为 null。
          rewardedAd?.setAdEventListener(null)
          rewardedAd = null
      }

      override fun onDestroy() {
          // 将监听器设为 null 可避免内存泄漏
          rewardedAdLoader?.setAdLoadListener(null)
          rewardedAdLoader = null
          destroyRewardedAd()
          super.onDestroy()
      }

      private fun enableShowAdButton() {
          binding.btnShowBanner.isEnabled = true
      }

      private fun disabeShowAdButton() {
          binding.btnShowBanner.isEnabled = false
      }

      override fun onAdClicked() {}
      override fun onAdFailedToShow(adError: AdError) {}
      override fun onAdImpression(impressionData: ImpressionData?) {}
      override fun onAdShown() {}
      override fun onRewarded(reward: Reward) {}
      override fun onAdDismissed() {
          destroyRewardedAd()
          // 现在您可以预加载下一个激励广告。
          loadRewardedAd()
      }
  }
  ```

- activity_rewarded_ad.xml

  ```xml
  <androidx.constraintlayout.widget.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/coordinatorLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".RewardedAdActivity">

      <Button
          android:id="@+id/btnLoadBanner"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Load Banner"
          app:layout_constraintLeft_toLeftOf="parent"
          app:layout_constraintRight_toRightOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintBottom_toBottomOf="parent" />

      <Button
          android:id="@+id/btnShowBanner"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Show Banner"
          app:layout_constraintTop_toBottomOf="@id/btnLoadBanner"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          android:layout_marginTop="16dp" />

  </androidx.constraintlayout.widget.ConstraintLayout>
  ```

{% endlist %}


## 使用以编程方式生成的活动创建激励广告的示例

{% list tabs %}

- Kotlin

  ```kotlin
  class RewardedAdActivity : AppCompatActivity(), RewardedAdEventListener,
      RewardedAdLoadListener {

      private val adUnitId = "demo-rewarded-yandex" // 使用 R-M-XXXXXX-Y 或演示广告单元（请参阅下方说明）
      private var rewardedAdLoader: RewardedAdLoader? = null
      private var rewardedAd: RewardedAd? = null

      private lateinit var loadButton: Button
      private lateinit var showButton: Button
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)

          val rootLayout = ConstraintLayout(this).apply {
              layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
          }

          loadButton = Button(this).apply {
              text = "Load Rewarded Ad"
              id = View.generateViewId()
          }

          showButton = Button(this).apply {
              text = "Show Rewarded Ad"
              id = View.generateViewId()
              isEnabled = false
          }

          rootLayout.addView(loadButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
              topToTop = PARENT_ID
              bottomToBottom = PARENT_ID
              startToStart = PARENT_ID
              endToEnd = PARENT_ID
          })

          rootLayout.addView(showButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
              topToBottom = loadButton.id
              startToStart = PARENT_ID
              endToEnd = PARENT_ID
              topMargin = 24
          })

          setContentView(rootLayout)

          rewardedAdLoader = RewardedAdLoader(this).apply {
              setAdLoadListener(this@RewardedAdActivity)
          }
          loadButton.setOnClickListener { loadRewardedAd() }
          showButton.setOnClickListener { showRewardedAd() }
      }

      override fun onAdFailedToLoad(error: AdRequestError) {}
      override fun onAdLoaded(ad: RewardedAd) {
          rewardedAd = ad
          enableShowButton()
          println("Rewarded ad loaded!")
      }

      private fun loadRewardedAd() {
          disableShowButton()
          val config = AdRequestConfiguration.Builder(adUnitId).build()
          rewardedAdLoader?.loadAd(config)
      }

      private fun showRewardedAd() {
          disableShowButton()
          rewardedAd?.apply {
              setAdEventListener(this@RewardedAdActivity)
              show(this@RewardedAdActivity)
          }
      }

      private fun destroyRewardedAd() {
          rewardedAd?.setAdEventListener(null)
          rewardedAd = null
      }

      private fun enableShowButton() {
          showButton.isEnabled = true
      }

      private fun disableShowButton() {
          showButton.isEnabled = false
      }

      override fun onDestroy() {
          rewardedAdLoader?.setAdLoadListener(null)
          rewardedAdLoader = null
          destroyRewardedAd()
          super.onDestroy()
      }

      override fun onAdShown() {}
      override fun onAdFailedToShow(adError: AdError) {}
      override fun onAdDismissed() {
          println("🚪 Ad dismissed")
          destroyRewardedAd()
          loadRewardedAd() // 预加载新广告
      }
      override fun onRewarded(reward: Reward) {
          println("🏆 Reward granted: ${reward.amount} ${reward.type}")
      }
      override fun onAdClicked() {}
      override fun onAdImpression(data: ImpressionData?) {}
  }
  ```

- Java

  ```java
  public class RewardedAdActivity extends AppCompatActivity
          implements RewardedAdEventListener, RewardedAdLoadListener {

      private final String adUnitId = "demo-rewarded-yandex"; // 使用 R-M-XXXXXX-Y 或演示广告单元（请参阅下方说明）
      private RewardedAdLoader rewardedAdLoader;
      private RewardedAd rewardedAd;

      private Button loadButton;
      private Button showButton;

      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          ConstraintLayout rootLayout = new ConstraintLayout(this);
          rootLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

          loadButton = new Button(this);
          loadButton.setText("Load Rewarded Ad");
          loadButton.setId(View.generateViewId());

          showButton = new Button(this);
          showButton.setText("Show Rewarded Ad");
          showButton.setId(View.generateViewId());
          showButton.setEnabled(false);

          LayoutParams loadBtnParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
          loadBtnParams.topToTop = LayoutParams.PARENT_ID;
          loadBtnParams.bottomToBottom = LayoutParams.PARENT_ID;
          loadBtnParams.startToStart = LayoutParams.PARENT_ID;
          loadBtnParams.endToEnd = LayoutParams.PARENT_ID;
          rootLayout.addView(loadButton, loadBtnParams);

          LayoutParams showBtnParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
          showBtnParams.topToBottom = loadButton.getId();
          showBtnParams.startToStart = LayoutParams.PARENT_ID;
          showBtnParams.endToEnd = LayoutParams.PARENT_ID;
          showBtnParams.topMargin = 24;
          rootLayout.addView(showButton, showBtnParams);

          setContentView(rootLayout);

          rewardedAdLoader = new RewardedAdLoader(this);
          rewardedAdLoader.setAdLoadListener(this);

          loadButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  loadRewardedAd();
              }
          });

          showButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  showRewardedAd();
              }
          });
      }

      @Override
      public void onAdLoaded(RewardedAd ad) {
          rewardedAd = ad;
          enableShowButton();
          System.out.println("Rewarded ad loaded!");
      }

      @Override
      public void onAdFailedToLoad(@Nullable AdRequestError error) {}

      private void loadRewardedAd() {
          disableShowButton();
          AdRequestConfiguration config = new AdRequestConfiguration.Builder(adUnitId).build();
          if (rewardedAdLoader != null) {
              rewardedAdLoader.loadAd(config);
          }
      }

      private void showRewardedAd() {
          disableShowButton();
          if (rewardedAd != null) {
              rewardedAd.setAdEventListener(this);
              rewardedAd.show(this);
          }
      }

      private void destroyRewardedAd() {
          if (rewardedAd != null) {
              rewardedAd.setAdEventListener(null);
              rewardedAd = null;
          }
      }

      private void enableShowButton() {
          if (showButton != null) showButton.setEnabled(true);
      }

      private void disableShowButton() {
          if (showButton != null) showButton.setEnabled(false);
      }

      @Override
      protected void onDestroy() {
          if (rewardedAdLoader != null) {
              rewardedAdLoader.setAdLoadListener(null);
              rewardedAdLoader = null;
          }
          destroyRewardedAd();
          super.onDestroy();
      }
      @Override
      public void onAdShown() {}
      @Override
      public void onAdFailedToShow(@Nullable AdError adError) {}
      @Override
      public void onAdDismissed() {
          System.out.println("🚪 Ad dismissed");
          destroyRewardedAd();
          loadRewardedAd(); // 预加载新广告
      }
      @Override
      public void onRewarded(Reward reward) {
          System.out.println("🏆 Reward granted: " + reward.getAmount() + " " + reward.getType());
      }
      @Override
      public void onAdClicked() {}
      @Override
      public void onAdImpression(@Nullable ImpressionData data) {}
  }
  ```

{% endlist %}

## 检查集成

<!-- source: zh/easy/_includes/notes-android-easy-guide.md -->
创建并运行您的项目。您可以通过在 **Logcat** 中搜索 `YandexAds` 关键字来检查集成是否成功：
<!-- endsource: zh/easy/_includes/notes-android-easy-guide.md -->

```
[Integration] Ad type rewarded was integrated successfully
```
