简介

激励视频广告是全屏视频广告,用户可以选择观看,以换取应用内奖励。
此Codelab将引导您在应用中增加激励广告的展示。在整个过程中,将介绍如何添加代码的详细过程以正确展示激励广告。

你将建立什么

您将构建一个展示激励广告的应用。
您的应用将:

您将会学到什么

硬件要求

软件要求

在Android Studio中打开工作项目

  1. 打开Android Studio。
  2. 创建新项目,选择"Empty Activity",命名为RewardAdExample。
  3. 点击完成按钮。

配置HUAWEI Ads SDK仓库及依赖包

在项目级build.gradle文件中配置Maven仓库路径,需添加下面内容:

buildscript { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } ... } allprojects { repositories { google() jcenter() maven {url 'https://developer.huawei.com/repo/'} } }

在应用级build.gradle文件中配置依赖包,需添加下面内容:

dependencies { ... implementation 'com.huawei.hms:ads-lite:13.4.32.300' ... }

点击"Sync Now"等待同步完成。

配置混淆脚本

开发者编译APK前需要配置不要混淆HUAWEI Ads SDK,避免功能异常。

  1. 打开Android工程的混淆配置文件。
  2. app/proguard-rules.pro文件中添加如下两行代码,配置排除HUAWEI Ads SDK的混淆。
    -keep class com.huawei.openalliance.ad.** { *; } -keep class com.huawei.hms.ads.** { *; }

要借助于HUAWEI Ads SDK获取广告,必须先在您的应用中调用HwAds.init()方法初始化SDK ,此过程需要在应用程序启动时完成,在应用后续运行过程中无需重复执行此过程。
MainActivity类的onCreate()方法中调用HwAds.init()以执行HUAWEI Ads SDK初始化。
MainActivity.java

import com.huawei.hms.ads.HwAds; ... public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化HUAWEI Ads SDK HwAds.init(this); ... } ... }

加载激励广告要创建一个RewardAd对象。
MainActivity.java

private void createRewardAd() { // testx9dtjwj8hp为激励视频广告测试广告位ID rewardAd = new RewardAd(MainActivity.this, "testx9dtjwj8hp"); }

创建一个按钮,用来观看视频

activity_main.xml

<Button android:id="@+id/show_video_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="104dp" android:layout_centerHorizontal="true" android:text="@string/watch_video_button_text" />

strings.xml

<resources> ... <string name="watch_video_button_text">watchVideo</string> ... </resources>

MainActiviry.java

private void loadWatchVideoButton(){ watchAdButton = findViewById(R.id.show_video_button); watchAdButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rewardAdShow(); } }); }

创建用来展示分数的视图

activity_main.xml

<TextView android:id="@+id/coin_count_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="200dp" android:layout_centerHorizontal="true" android:textAppearance="?android:attr/textAppearanceLarge" />

MainActivity.java

private void loadScoreView() { scoreView = findViewById(R.id.coin_count_text); scoreView.setText("Score:" + score); }

调用loadAd()方法来获取广告。

可以创建RewardAdLoadListener,来监听广告的加载状态。

MainActivity.java

private void loadRewardAd() { if (rewardAd == null) { createRewardAd(); } RewardAdLoadListener rewardAdLoadListener = new RewardAdLoadListener() { @Override public void onRewardAdFailedToLoad(int errorCode) { Toast.makeText(MainActivity.this, "onRewardAdFailedToLoad errorCode is :" + errorCode, Toast.LENGTH_SHORT) .show(); } @Override public void onRewardedLoaded() { Toast.makeText(MainActivity.this, "onRewardedLoaded", Toast.LENGTH_SHORT).show(); } }; rewardAd.loadAd(new AdParam.Builder().build(), rewardAdLoadListener); }

调用RewardAdshow()方法来显示广告,在此之前需要调用isLoaded()方法来确认广告已经加载完成。

MainActivity.java

private void rewardAdShow() { if (rewardAd.isLoaded()) { rewardAd.show(MainActivity.this, new RewardAdStatusListener() { @Override public void onRewardAdClosed() { loadRewardAd(); } @Override public void onRewardAdFailedToShow(int errorCode) { Toast .makeText(MainActivity.this, "onRewardAdFailedToShow errorCode is :" + errorCode, Toast.LENGTH_SHORT) .show(); } @Override public void onRewardAdOpened() { Toast.makeText(MainActivity.this, "onRewardAdOpened", Toast.LENGTH_SHORT).show(); } @Override public void onRewarded(Reward reward) { Toast .makeText(MainActivity.this, "Watch video show finished, add " + reward.getAmount() + " scores", Toast.LENGTH_SHORT) .show(); // 推荐立即发放奖励,同时在服务端做校验,奖励是否生效;如果未配置奖励物品信息,则根据实际场景发放奖励。 addScore(reward.getAmount()); loadRewardAd(); } }); } }

示例代码如下:

private void addScore(int amount) { score += amount; scoreView.setText("Score:" + score); }

RewardAdStatusListener的详细方法说明请参考API文档。

运行项目后,您将会在应用中看到激励广告。

祝贺你,你已经成功完成了Codelab并学到了:

您可以阅读下面链接,了解更多相关的信息。

您可以点击下方按钮下载源码。

源码下载

已复制代码