本指南介绍了如何使用原生广告插件在 Unity 应用中植入 AdMob 原生广告,以及在此过程中需要注意的一些重要事项。
原生广告无论是在形式上还是功能上都与广告投放到的内容相契合,可为用户带来浑然一体的体验。原生广告在视觉设计上与投放到的应用也如出一辙。借助 AdMob 的原生广告格式,发布商能够呈现 内容。您可以使用此技术实现高度自定义的广告呈现 充分利用 Unity 应用中的原生代码。
展示原生广告时所使用的GameObjects
类型
已经构建应用,并且可以设置格式,
影响用户的体验加载原生广告时,您的应用会收到一个包含其素材资源的原生对象,然后就由此 Unity 应用(而不是 SDK)进行展示。
前提条件
加载原生广告格式
原生广告通过 AdLoader
类加载,该类有自己的 AdLoader.Builder
类,可在广告制作过程中对广告进行自定义。ForNativeAd()
方法会将 AdLoader 配置为处理原生广告。
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
注册 AdLoader 广告事件
要在原生广告加载成功或加载失败时收到通知,请将
委托给下列事件的 AdLoader
类。
OnNativeAdLoaded
在原生广告成功加载时调用。必须具有 该事件的代理来访问已加载的广告。
OnAdFailedToLoad
在原生广告加载失败时调用。
加载广告
构建完 AdLoader
后,请调用其 LoadAd()
方法以
请求广告:
adLoader.LoadAd(new AdRequest.Builder().Build());
汇总广告请求
以下代码段演示了如何构建一个 AdLoader
,
配置为请求原生广告,为成功和失败的广告设置代理
并发出广告请求
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
处理失败的广告加载
OnAdFailedToLoad
事件的类型为 EventHandle<AdFailedToLoadEventArgs>
。
下面显示了从此事件中解析广告加载失败的原因。
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
展示原生广告
加载原生广告时,系统会调用相应广告格式的广告事件。 然后,就由您的应用负责展示广告,但不一定要立即展示。
处理广告加载
OnNativeAdLoaded
事件的类型为 EventHandler<NativeAdEventArgs>
。通过
封装在 NativeAd
对象中的广告,可以从
NativeAdEventArgs
,如下所示:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
获取原生广告素材资源
广告加载后,您可以对其素材资源进行访问,如下所示。图形
素材资源会以 Texture2D
对象的形式返回,文字素材资源会以
string
对象。
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
请注意,只应在主线程上访问广告素材资源,例如,从 Unity 脚本的 Update()
方法访问。另请注意,以下素材资源
并不一定存在,
显示:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
“广告选择”素材资源
根据要求,广告选择素材资源必须作为原生广告的一部分展示。 此外,广告选择素材资源一定要显眼易见,因此请选择 背景颜色和图片。
为广告素材资源注册 GameObjects
您必须注册 GameObject
,才能在
Unity 应用。如果注册成功,将使用注册
GameObject
会返回 bool
。对于 List<GameObject>
,该方法会返回
int
表示已成功注册的 GameObject
数量。
如果广告素材资源注册失败, 则无法识别相应的原生广告。
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
为广告素材资源注册的 GameObject
必须具有凸形 Collider
代表 GameObject
的尺寸和形状的组件。如果
注册到广告素材资源的 GameObject
个对象缺少 Collider
个组件
或者原生广告配置不正确,则原生广告将无法正常运行。
在以下代码段中,BoxCollider
已添加到 GameObject
,该元素使用
TextMesh
,用于展示原生广告的标题广告素材资源。部署
BoxCollider
已挂接到 GameObject
,它会自动扩容为
以容纳 TextMesh
组件的文字。
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
演示
以下代码演示了如何成功检索
加载原生广告后,通过设置 Quad
的纹理来展示图标广告素材资源;
并注册用于显示该资源的 GameObject
。对于应用展示的每项素材资源,都应为其重复上述过程,即获取相应广告素材资源并向原生广告类注册它。
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}