横幅广告

横幅广告是在屏幕上占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。案例研究

本指南介绍了如何将 AdMob 横幅广告植入到 Unity 应用中。除了代码段和说明之外,本指南还介绍了如何将横幅广告调整至合适的尺寸,且还提供了其他资源的链接。

前提条件

完成入门指南。您的 Unity 应用应该已经导入了 Google 移动广告 Unity 插件。

创建 BannerView

要展示横幅广告,首先要在附加到 GameObject 的 C# 脚本中创建 BannerView 对象。

using System;
using UnityEngine;
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private BannerView bannerView;
    ...
    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        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 坐标参数的 构造函数。

// 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();

这会通知插件已不再使用该对象,且可回收它占用的内存。如果不调用此方法,将导致内存泄漏。

其他资源

示例

成功案例