横幅广告会占据应用布局中的一处位置,要么是设备屏幕的顶部,要么是底部。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您是刚开始接触移动广告的新手,横幅广告是您的绝佳选择。 案例研究。
本指南介绍了如何将AdMob 横幅广告植入到 Android 应用中。除了代码段和说明之外,本指南还介绍了如何正确地设置横幅广告的尺寸,并提供了其他资源的链接。
前提条件
- 通读入门指南。
将 AdView 添加到布局中
要展示横幅广告,首先要将 AdView
放置到您希望用于展示广告的 Activity
或 Fragment
的布局中。最简单的方法是向相应的 XML 布局文件添加一个代码。以下示例展示了 activity 的 AdView
:
# main_activity.xml
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
请注意以下必需属性:
ads:adSize
:将此项设置为要使用的广告尺寸。如果您不想使用该常量定义的标准尺寸,可改为设置自定义尺寸。如需了解详情,请参阅“横幅广告尺寸”部分。ads:adUnitId
:将此属性设置为您应用中用于展示广告的广告单元的唯一标识符。如果您要在不同的 activity 中展示横幅广告,则其中每个都需要一个广告单元。
您也可以通过编程方式创建 AdView
:
Java
AdView adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: Add adView to your view hierarchy.
Kotlin
val adView = AdView(this)
adView.adSize = AdSize.BANNER
adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
// TODO: Add adView to your view hierarchy.
务必用测试广告进行测试
在构建和测试应用时,请确保使用的是测试广告,而不是实际投放的广告。否则,可能会导致您的帐号被暂停。
对于 Android 横幅广告,加载测试广告最简便的方法就是使用下面的测试专用广告单元 ID:
ca-app-pub-3940256099942544/6300978111
该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告,您可以在自己应用的编码、测试和调试过程中使用该测试广告单元 ID。只需确保您会在发布应用前用自己的广告单元 ID 替换该测试广告单元 ID 即可。
如需详细了解移动广告 SDK 的测试广告如何运作,请参阅测试广告。
加载广告
AdView 设置好后,下一步是加载广告。此步骤可使用 AdView
类中的 loadAd()
方法完成。这需要 AdRequest
参数,其中包含关于单个广告请求的运行时信息,例如定位信息。
以下示例展示了如何通过 Activity
的 onCreate()
方法加载广告:
MainActivity(节选)
Java
package ...
import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public class MainActivity extends AppCompatActivity {
private AdView mAdView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
Kotlin
package ...
import ...
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView
class MainActivity : AppCompatActivity() {
lateinit var mAdView : AdView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
MobileAds.initialize(this) {}
mAdView = findViewById(R.id.adView)
val adRequest = AdRequest.Builder().build()
mAdView.loadAd(adRequest)
}
}
如果您的广告加载失败,只要已将广告单元配置为刷新,就无需明确请求再次加载;Google 移动广告 SDK 会按照您在AdMob 网页界面中指定的任何刷新频率进行加载。如果您尚未启用刷新功能,则需要发出新的请求。
大功告成!您的应用现在就可以展示横幅广告了。
广告事件
若要进一步自定义您广告的行为,您可以在广告生命周期内加入许多事件,如加载、打开、关闭等等。您可以通过 AdListener
类监听这些事件。
如需将 AdListener
与 AdView
搭配使用,请调用 setAdListener()
方法:
Java
mAdView.setAdListener(new AdListener() {
@Override
public void onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
@Override
public void onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
@Override
public void onAdFailedToLoad(LoadAdError adError) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
});
Kotlin
mAdView.adListener = object: AdListener() {
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
override fun onAdFailedToLoad(adError : LoadAdError) {
// Code to be executed when an ad request fails.
}
override fun onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
override fun onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
override fun onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
}
AdListener
中每种可替换的方法均对应广告生命周期内的一个事件。
可替换的方法 | |
---|---|
onAdClicked() |
记录了对广告的点击时,系统会调用 onAdClicked() 方法。
|
onAdClosed() |
用户在查看广告的目标网址后,返回应用时,系统会调用 onAdClosed() 方法。应用可以使用此方法恢复暂停的活动,或执行任何其他必要的操作,以做好互动准备。
有关 Android API Demo 应用中广告监听器方法的实现方式,请参阅 AdMob AdListener 示例。
|
onAdFailedToLoad() |
onAdFailedToLoad() 是唯一包含参数的方法。LoadAdError 类型的错误参数描述了发生的错误。如需了解详情,请参阅调试广告加载错误文档。
|
onAdImpression() |
记录广告获得的展示时,系统会调用 onAdImpression() 方法。
|
onAdLoaded() |
广告加载完成后,系统会执行 onAdLoaded() 方法。如果您想推迟向 activity 或 fragment 添加 AdView 的操作(例如,推迟到您确定广告会加载时),可以在此处进行。
|
onAdOpened() |
广告打开覆盖屏幕的叠加层时,系统会调用 onAdOpened() 方法。 |
横幅尺寸
展示广告的容器尺寸必须至少与横幅一样大。如果容器留有内边距,实际上会缩小容器的大小。如果容器无法容纳横幅广告,则横幅广告不会展示,并且您的日志中会显示以下警告:
W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.
下表列出了标准的横幅广告尺寸。
尺寸(宽 x 高,以 dp 为单位) | 说明 | 可用性 | AdSize 常量 |
---|---|---|---|
320x50 | 横幅 | 手机和平板电脑 | BANNER |
320x100 | 大型横幅广告 | 手机和平板电脑 | LARGE_BANNER |
300x250 | IAB 中矩形 | 手机和平板电脑 | MEDIUM_RECTANGLE |
468x60 | IAB 全尺寸横幅 | 平板电脑 | FULL_BANNER |
728x90 | IAB 页首横幅广告 | 平板电脑 | LEADERBOARD |
提供的宽度 x 自适应高度 | 自适应横幅广告 | 手机和平板电脑 | 不适用 |
屏幕宽度 x 32|50|90 | 智能横幅广告 | 手机和平板电脑 | SMART_BANNER |
要自定义横幅广告尺寸,请设置所需的 AdSize
,如下所示:
Java
AdSize adSize = new AdSize(300, 50);
Kotlin
val adSize = AdSize(300, 50)
适用于视频广告的硬件加速功能
若要在横幅广告视图中成功展示视频广告,必须启用硬件加速。
硬件加速默认处于启用状态,但有些应用可能会选择停用硬件加速。如果您的应用也是这种情况,我们建议您为使用广告的 Activity
类启用硬件加速。
启用硬件加速
如果您的应用在全局级别启用硬件加速时无法正常运行,您也可以针对各个 activity 控制硬件加速。如需启用或停用硬件加速,您可以为 AndroidManifest.xml
中的 <application>
和 <activity>
元素使用 android:hardwareAccelerated
属性。以下示例展示了如何为整个应用启用硬件加速,但为一个 activity 停用硬件加速:
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
如需详细了解用于控制硬件加速的选项,请参阅硬件加速指南。请注意,如果 activity 已停用,则无法为单个广告视图启用硬件加速,因此必须针对 activity 本身启用硬件加速。
其他资源
GitHub 上的示例
“Mobile Ads Garage”视频教程
成功案例
后续步骤
请查看以下主题: