激励广告

激励广告是一种全屏广告格式,用户观看广告可获得奖金或其他奖励(例如游戏币、重试次数、高级功能使用权等)。

备注

用户可决定是否观看广告或跳过广告,只有观看完广告才能获得奖励。

备注

演示项目 中提供了展示所有格式类型运作原理的示例。

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

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()
    }
}
<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>

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

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?) {}
}
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) {}
}

检查集成

创建并运行您的项目。您可以通过在 Logcat 中搜索 YandexAds 关键字来检查集成是否成功:

[Integration] Ad type rewarded was integrated successfully
上一篇
下一篇