简介

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

您将建立什么

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

您将会学到什么

硬件要求

支持EMUI 3.0及以上的华为手机、华为平板。

软件要求

需要的知识点

Android基础开发能力。

在Android Studio中创建项目

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

配置HUAWEI Ads SDK仓库及依赖包

  1. 在项目级"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/'} } }
  2. 在应用级"build.gradle"文件中配置依赖包,需添加下面内容,并将{version}替换为实际的HUAWEI Ads SDK版本号,请参见版本更新说明
    dependencies { ... implementation 'com.huawei.hms:ads-lite:{version}' ... }
  3. 点击"Sync Now"等待同步完成。

配置混淆脚本

您编译APK前需要配置不要混淆HUAWEI Ads SDK,避免功能异常。
打开Android工程应用级根目录下的"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初始化。

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对象。

private void createRewardAd() { // testx9dtjwj8hp为激励视频广告测试广告位ID rewardAd = new RewardAd(MainActivity.this, "testx9dtjwj8hp"); }
  1. 创建一个按钮,用来观看视频。您需要在"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" />
  2. 您需要在"strings.xml"文件中添加以下内容。
    <resources> … <string name="watch_video_button_text">Watch Video … </resources>
  3. 您需要在"MainActivity.java"文件中添加以下内容。
    private void loadWatchVideoButton(){ watchAdButton = findViewById(R.id.show_video_button); watchAdButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rewardAdShow(); } }); }
  1. 创建用来展示分数的视图,您需要在"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" />
  2. 您需要在"MainActivity.java"文件中添加以下内容。
    private void loadScoreView() { scoreView = findViewById(R.id.coin_count_text); scoreView.setText("Score:" + score); }

调用loadAd()方法来获取广告。可以创建RewardAdLoadListener,来监听广告的加载状态。

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

调用RewardAd的show(Activity activity,RewardAdStatusListener rewardAdStatusListener)方法来显示广告,在此之前需要调用isLoaded()方法来确认广告已经加载完成。

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) { int addScore = reward.getAmount() == 0 ? defaultScore : reward.getAmount(); Toast .makeText(MainActivity.this, "Watch video show finished, add " + reward.getAmount() + " scores", Toast.LENGTH_SHORT) .show(); // 推荐立即发放奖励,同时在服务端做校验,奖励是否生效。如果未配置奖励物品信息,则根据实际场景发放奖励 addScore(addScore); loadRewardAd(); } }); } }

示例代码如下:

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

详细方法说明请参见RewardAdStatusListener
运行项目后,您将会在应用中看到激励广告。

祝贺您,您已经成功完成了codelab并学到了:

您可以阅读相关链接,了解更多的信息:开发指南API文档FAQ
您还可以点击源码下载

Code copied