横幅广告是在屏幕上占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。案例研究。
本指南介绍了如何将 AdMob 横幅广告植入到 Unity 应用中。除了代码段和说明之外,本指南还介绍了如何将横幅广告调整至合适的尺寸,且还提供了其他资源的链接。
前提条件
完成入门指南的学习。您的 Unity 应用应该已经导入了 Google 移动广告 Unity 插件。
创建 BannerView
要展示横幅广告,首先要在附加到 GameObject
的 C# 脚本中创建 BannerView
对象。
要使用 Unity 编辑器更轻松地植入广告,请试用全新广告展示位置(Beta 版)。
using System;
using UnityEngine;
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private BannerView bannerView;
...
public void Start()
{
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize(initStatus => { });
this.RequestBanner();
}
private void RequestBanner()
{
#if UNITY_ANDROID
string adUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
string adUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
string adUnitId = "unexpected_platform";
#endif
// Create a 320x50 banner at the top of the screen.
this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
}
}
BannerView
的构造函数包含以下参数:
adUnitId
- AdMob 广告单元 ID,BannerView
应通过该 ID 加载广告。AdSize
- 要使用的 AdMob 广告尺寸(有关详情,请参阅横幅广告尺寸)。AdPosition
- 应放置横幅广告的位置。AdPosition
枚举列出了有效的广告位置值。
请务必注意,您需要根据平台选择使用不同的广告单元。在 iOS 设备上发出广告请求时,您需要使用 iOS 广告单元,而在 Android 设备上发出请求时,您需要使用 Android 广告单元。
(可选)自定义广告位置
为了更好地控制 BannerView
在屏幕上的位置(而不是 AdPosition
值提供的位置),请使用带有 x 坐标和 y 坐标参数的 BannerView
构造函数。
// Create a 320x50 banner ad at coordinate (0,50) on screen.
BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, 0, 50);
BannerView
的左上角将放置在传给构造函数的 x 值和 y 值所确定的位置,原点则是屏幕的左上角。
(可选)自定义广告尺寸
除了使用 AdSize 常量之外,您还可以为广告指定自定义尺寸:
AdSize adSize = new AdSize(250, 250);
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);
务必用测试广告进行测试
上述示例代码包含一个广告单元 ID,您可以随意使用该 ID 请求广告。该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告(而不是实际投放的广告),从而能够安全地使用。
但是,如果您在 AdMob 界面中注册了应用,并创建了您自己的广告单元 ID 以便在该应用中使用,那么您需要在开发期间明确地将您的设备配置为测试设备。这极其重要。使用真正的广告进行测试(即使您从未点按它们)会违反 AdMob 政策,可能会导致您的帐号被暂停。如需了解如何确保在开发期间始终获得测试广告,请参阅测试广告。
加载广告
实例化 BannerView
之后,下一步是加载广告。此步骤可使用 BannerView
类中的 loadAd()
方法完成。这需要 AdRequest
参数,该参数包含有关单个广告请求的运行时信息(如定位信息)。
以下示例展示了如何加载广告:
... private void RequestBanner() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/6300978111"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/2934735716"; #else string adUnitId = "unexpected_platform"; #endif // Create a 320x50 banner at the top of the screen. this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top); // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the banner with the request. this.bannerView.LoadAd(request); } ...
就这么简单!您的应用现已准备好展示 AdMob 横幅广告了。
广告事件
要进一步自定义您广告的行为,您可以在广告生命周期内加入许多事件,如加载、打开、关闭等等。您可以为相应的 EventHandler
注册代理来监听这些事件,如下所示。
... using System; using UnityEngine; using GoogleMobileAds.Api; ... public class GoogleMobileAdsDemoScript : MonoBehaviour { private BannerView bannerView; public void Start() { this.RequestBanner(); } private void RequestBanner() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/6300978111"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/2934735716"; #else string adUnitId = "unexpected_platform"; #endif this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top); // Called when an ad request has successfully loaded. this.bannerView.OnAdLoaded += this.HandleOnAdLoaded; // Called when an ad request failed to load. this.bannerView.OnAdFailedToLoad += this.HandleOnAdFailedToLoad; // Called when an ad is clicked. this.bannerView.OnAdOpening += this.HandleOnAdOpened; // Called when the user returned from the app after an ad click. this.bannerView.OnAdClosed += this.HandleOnAdClosed; // Called when the ad click caused the user to leave the application. this.bannerView.OnAdLeavingApplication += this.HandleOnAdLeavingApplication; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the banner with the request. this.bannerView.LoadAd(request); } public void HandleOnAdLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleAdLoaded event received"); } public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { MonoBehaviour.print("HandleFailedToReceiveAd event received with message: " + args.Message); } public void HandleOnAdOpened(object sender, EventArgs args) { MonoBehaviour.print("HandleAdOpened event received"); } public void HandleOnAdClosed(object sender, EventArgs args) { MonoBehaviour.print("HandleAdClosed event received"); } public void HandleOnAdLeavingApplication(object sender, EventArgs args) { MonoBehaviour.print("HandleAdLeavingApplication event received"); } }
OnAdFailedToLoad
事件包含特殊的事件参数。该事件会传递一个 HandleAdFailedToLoadEventArgs
实例,其中包含了用于描述错误的 Message
:
public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
MonoBehaviour.print("Banner failed to load: " + args.Message);
// Handle the ad failed to load event.
};
广告事件 | 说明 |
---|---|
OnAdLoaded |
广告加载完成时,系统会执行 OnAdLoaded 事件。 |
OnAdFailedToLoad |
广告加载失败时,系统会调用 OnAdFailedToLoad 事件。Message 参数描述发生的故障类型。 |
OnAdOpening |
用户点按广告时,系统会调用此方法。如果您使用分析产品包跟踪点击,则此方法很适合记录点击。 |
OnAdClosed |
用户查看了广告的目标网址并返回应用时,系统会调用此方法。应用可以使用此方法恢复暂停的活动,或执行任何其他必要的操作,以做好互动准备。 |
OnAdLeavingApplication |
用户点击打开其他应用(例如,Google Play 商店)时,系统会先调用 onAdOpened ,再调用此方法,从而在后台运行当前应用。 |
横幅广告尺寸
下表列出了标准横幅广告尺寸。
尺寸(宽 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 |
详细了解自适应横幅广告(旨在取代智能横幅广告)。 |
清理横幅广告
创建完 BannerView
后,请确保在放弃对它的引用前调用 Destroy()
方法。
bannerView.Destroy();
这会通知插件已不再使用该对象,且可回收它占用的内存。如果不调用此方法,将导致内存泄露。