简介

插屏广告是一种在应用开启、暂停或退出时以全屏的形式弹出的广告形式,展示时机巧妙避开用户对应用的正常体验,尺寸大,曝光效果好。

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

您将建立什么

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

您将会学到什么

硬件要求

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

软件要求

需要的知识点

Android基础开发能力。

在Android Studio中创建项目

  1. 打开Android Studio。
  2. 创建新项目,选择"Empty Activity",命名为"InterstitialExample"。
  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 AppCompatActivity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化HUAWEI Ads SDK HwAds.init(this); ... } ... }

对于插屏广告HUAWEI Ads SDK提供了InterstitialAd类,用于创建插屏广告对象,并通过InterstitialAd类的setAdId()方法设置测试广告位ID。
示例代码如下:

private void loadInterstitialAd() { interstitialAd = new InterstitialAd(this); // 设置广告位ID interstitialAd.setAdId(getAdId()); ... } private String getAdId() { if (displayRadioGroup.getCheckedRadioButtonId() == R.id.display_image) { // image_ad_id为teste9ih9j0rc3 return getString(R.string.image_ad_id); } else { // video_ad_id为testb4znbuh3n2 return getString(R.string.video_ad_id); } }

调用InterstitialAd类的loadAd()方法来获取广告。
示例代码如下:

private void loadInterstitialAd() { interstitialAd = new InterstitialAd(this); // 设置广告位ID interstitialAd.setAdId(getAdId()); interstitialAd.setAdListener(adListener); // 获取插屏广告 AdParam adParam = new AdParam.Builder().build(); interstitialAd.loadAd(adParam); }

调用InterstitialAd类的setAdListener方法可以为InterstitialAd对象添加广告事件监听器AdListener。
示例代码如下:

private AdListener adListener = new AdListener() { @Override public void onAdLoaded() { super.onAdLoaded(); Toast.makeText(MainActivity.this, "Ad loaded", Toast.LENGTH_SHORT).show(); // 展示插屏广告 showInterstitial(); } @Override public void onAdFailed(int errorCode) { Toast.makeText(MainActivity.this, "Ad load failed with error code: " + errorCode,Toast.LENGTH_SHORT).show(); Log.d(TAG, "Ad load failed with error code: " + errorCode); } @Override public void onAdClosed() { super.onAdClosed(); Log.d(TAG, "onAdClosed"); } @Override public void onAdClicked() { Log.d(TAG, "onAdClicked"); super.onAdClicked(); } @Override public void onAdOpened() { Log.d(TAG, "onAdOpened"); super.onAdOpened(); } };

调用InterstitialAd的show(Activity activity)方法来显示广告,在此之前需要调用isLoaded()方法来确认广告已经加载完成。
示例代码如下:

private void showInterstitial() { // 展示插屏广告 if (interstitialAd != null && interstitialAd.isLoaded()) { interstitialAd.show(this); } else { Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show(); } }

运行项目后,您将会在应用中看到插屏广告:

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

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

Code copied