激励广告是一种全屏幕的视频广告,用户可以选择点击观看,以换取相应奖励。
此codelab将引导您在应用中增加激励广告的展示。在整个过程中,将介绍如何添加代码的详细过程以正确展示激励广告。
您将在您的应用中通过HUAWEI Ads SDK获取激励广告和展示激励广告。
支持EMUI 3.0及以上的华为手机、华为平板。
Android基础开发能力。
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 {
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/' }
}
}
dependencies {
...
implementation 'com.huawei.hms:ads-lite:{version}'
...
}
您编译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");
}
<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" />
<resources>
...
<string name="watch_video_button_text">Watch Video</string>
...
</resources>
private void loadWatchVideoButton(){
watchAdButton = findViewById(R.id.show_video_button);
watchAdButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rewardAdShow();
}
});
}
<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" />
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并学到了: