本指南介绍了如何使用原生广告插件植入 AdMob 原生广告 以及在此过程中需要考虑的一些重要事项。
原生广告无论是在形式上还是功能上都与用户体验相匹配 位置。原生广告在视觉设计上与投放到的应用也如出一辙。 借助 AdMob 的原生广告格式,发布商能够呈现 与内容关联。您可以使用此技术实现高度自定义的广告呈现 充分利用 Unity 应用中的原生代码。
展示原生广告时所使用的GameObjects
类型
已经构建应用,并且可以设置格式,
影响用户的体验加载原生广告时
会收到一个包含其资源和 Unity 应用的原生对象(而不是
显示它们。
前提条件
加载原生广告格式
原生广告通过 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()
“广告选择”素材资源
根据要求,广告选择素材资源必须作为原生广告的一部分展示。 此外,广告选择素材资源一定要显眼易见,因此请选择 背景颜色和图片。
为广告素材资源注册 GameObject
您必须注册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;
}