简介

激励广告是一种全屏幕的视频广告,用户可以选择点击观看,以换取相应奖励。

此codelab将引导您在应用中增加激励广告的展示。在整个过程中,将介绍如何添加代码的详细过程以正确展示激励广告。

您将建立什么

您将在您的应用中通过HUAWEI Ads SDK获取激励广告和展示激励广告。

您将会学到什么

硬件要求

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

软件要求

需要的知识点

Android基础开发能力。

在Android Studio中创建项目

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

配置HUAWEI VAST SDK仓库及依赖包

  1. 配置Maven仓地址。

    Android Studio的代码库配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle 插件版本,选择对应的配置过程。

    7.0以下版本

    7.0版本

    7.1及以上版本

    • 7.0以下版本
      i.  打开Android Studio项目级"build.gradle"文件。


      ii.  添加Maven代码库。

      • 在"buildscript > repositories"中配置Maven仓地址。
      • 在"allprojects > repositories"中配置Maven仓地址。
      buildscript { repositories { google() jcenter() // 配置HUAWEI Ads SDK的Maven仓地址 maven {url 'https://developer.huawei.com/repo/'} } } allprojects { repositories { google() jcenter() // 配置HUAWEI Ads SDK的Maven仓地址 maven {url 'https://developer.huawei.com/repo/'} } }
    • 7.0版本
      i.  打开Android Studio项目级"build.gradle"文件。


      ii.  添加Maven代码库。

        在"buildscript > repositories"中配置Maven仓地址。

      buildscript { repositories { google() jcenter() // 配置HUAWEI Ads SDK的Maven仓地址 maven {url 'https://developer.huawei.com/repo/'} } }

      iii.  打开项目级"settings.gradle"文件,配置Maven仓地址。

      dependencyResolutionManagement { ... repositories { google() jcenter() // 配置HUAWEI Ads SDK的Maven仓地址 maven {url 'https://developer.huawei.com/repo/'} } }
    • 7.1及以上版本
      打开项目级"settings.gradle"文件,配置Maven仓地址。

      pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() // 配置HUAWEI Ads SDK的Maven仓地址 maven { url 'https://developer.huawei.com/repo/' } } } dependencyResolutionManagement { ... repositories { google() mavenCentral() // 配置HUAWEI Ads SDK的Maven仓地址 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</string> ... </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