Android上需要注意的:
目前使用Unity直接打出Android的APK是不能使用原生视频广告,因为Unity打包APK默认会把游戏的Activity硬件加速关闭,所以无法展示视频。如果需要展示原生广告视频的话,必须使用export project的方式处理,处理方式如下:
(1)选择Export Project的模式导出Android工程
(2)修改AndroidManifest里的属性,将图中的hardwareAccelerated的属性设置成true
完成以上步骤之后,使用当前的Android工程进行打包即可。
ATNativeAd:
API | 参数 | 说明 |
---|---|---|
loadNativeAd | string placementid,Dictionary<string,string> extra | 加载广告(从v5.6.8开始,针对穿山甲模板渲染、Mintegral自动渲染广告等必须通过extra参数传递宽高,否则广告大小可能显示异常) |
setListener | ATNativeAdListener listener | 设置监听回调接口 (5.9.51版本之后废弃)设置监听器的方式具体参考: 原生广告事件设置说明 |
hasAdReady | string placementid | 判断是否有广告缓存 |
checkAdStatus | string placementid | (v5.7.22新增)获取当前广告位的状态(Json字符串): 1、isLoading:是否正在加载 2、isReady:是否有广告缓存(与hasAdReady作用相同) 3、AdInfo:当前优先级最高的广告缓存信息(参考ATCallbackInfo说明) |
getValidAdCaches | string placementid | (v5.7.54新增)获取加载成功的全部广告缓存信息(JSON字符串) (参考ATCallbackInfo说明) |
renderAdToScene | string placementid,ATNativeAdView anyThinkNativeAdView | 显示广告 |
entryScenarioWithPlacementID | string placementId, string scenarioID | 设置进入可展示广告场景 |
您可以使用以下代码加载原生广告:
public void loadNative()
{
Debug.Log ("Developer load native, unit id = " + mPlacementId_native_all);
ATNativeAd.Instance.client.onAdLoadEvent += onAdLoad;
ATNativeAd.Instance.client.onAdLoadFailureEvent += onAdLoadFail;
ATNativeAd.Instance.client.onAdImpressEvent += onAdImpressed;
ATNativeAd.Instance.client.onAdClickEvent += onAdClick;
ATNativeAd.Instance.client.onAdCloseEvent += onAdClose;
ATNativeAd.Instance.client.onAdVideoStartEvent += onAdVideoStart;
ATNativeAd.Instance.client.onAdVideoEndEvent += onAdVideoEnd;
ATNativeAd.Instance.client.onAdVideoProgressEvent += onAdVideoProgress;
//----- v5.6.8以上 -----
Dictionary<string, object> jsonmap = new Dictionary<string, object>();
#if UNITY_ANDROID
ATSize nativeSize = new ATSize(width, height);
jsonmap.Add(ATNativeAdLoadingExtra.kATNativeAdLoadingExtraNativeAdSizeStruct, nativeSize);
#elif UNITY_IOS || UNITY_IPHONE
ATSize nativeSize = new ATSize(width, height, false);
jsonmap.Add(ATNativeAdLoadingExtra.kATNativeAdLoadingExtraNativeAdSizeStruct, nativeSize);
ATNativeAd.Instance.loadNativeAd(mPlacementId_native_all, jsonmap);
}
注: 请继续阅读以了解如何在加载成功/失败事件时得到通知。
ATNativeAd.Instance.hasAdReady(mPlacementId_native_all);
您可以使用以下代码显示原生广告:
public void showNative()
{
Debug.Log ("Developer show native....");
ATNativeConfig conifg = new ATNativeConfig ();
string bgcolor = "#ffffff";
string textcolor = "#000000";
int rootbasex = 100, rootbasey = 100;
int x = rootbasex,y = rootbasey,width = 300*3,height = 200*3,textsize = 17;
conifg.parentProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,textcolor,textsize, true);
//adlogo
x = 0*3;y = 0*3;width = 30*3;height = 20*3;textsize = 17;
conifg.adLogoProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,textcolor,textsize, true);
//adicon
x = 0*3;y = 50*3-50;width = 60*3;height = 50*3;textsize = 17;
conifg.appIconProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,textcolor,textsize, true);
//ad cta
x = 0*3;y = 150*3;width = 300*3;height = 50*3;textsize = 17;
conifg.ctaButtonProperty = new ATNativeItemProperty(x,y,width,height,"#ff21bcab","#ffffff",textsize, true);
//ad desc
x = 60*3;y = 100*3;width = 240*3-20;height = 50*3-10;textsize = 10;
conifg.descProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,"#777777",textsize, true);
//ad image
x = 60*3;y = 0*3+20;width = 240*3-20;height = 100*3-10;textsize = 17;
conifg.mainImageProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,textcolor,textsize, true);
//ad title
x = 0*3;y = 100*3;width = 60*3;height = 50*3;textsize = 12;
conifg.titleProperty = new ATNativeItemProperty(x,y,width,height,bgcolor,textcolor,textsize, true);
//(v5.7.21新增)ad dislike button (close button)
x = 300*3 - 75;y = 0;width = 75;height = 75;
conifg.dislikeButtonProperty = new ATNativeItemProperty(x,y,width,height,"#00000000",textcolor,textsize, true);
ATNativeAdView anyThinkNativeAdView = new ATNativeAdView(conifg);
AnyThinkAds.Demo.ATManager.anyThinkNativeAdView = anyThinkNativeAdView;
Debug.Log("Developer renderAdToScene--->");
ATNativeAd.Instance.renderAdToScene(mPlacementId_native_all, anyThinkNativeAdView);
}
当用到 场景 功能时:
public void showNative()
{
...
Dictionary<string, string> jsonmap = new Dictionary<string, string>();
jsonmap.Add(AnyThinkAds.Api.ATConst.SCENARIO, showingScenarioID);
ATNativeAd.Instance.renderAdToScene(mPlacementId_native_all, anyThinkNativeAdView, jsonmap);
}
传递给ATNativeItemProperty类的构造函数的尾部参数表示是否使用像素(只针对iOS有效)。 例如,在iPhone 6上,如果分别为x,y,宽度和高度分别传递30、120、300、450,则在iPhone 7上传递给Objective-C代码的实际值将为15、60、150、225 这些值将是10、40、100、150; 也就是说,最终值决定于目标设备的屏幕比例。
正如您在上面看到的,我们为您定义了一个ATNativeConfig类,用于配置本机资产的各种属性(bgColor,textColor,textSize,position等),例如CTA按钮,应用程序图标,标题文本,说明文本,封面图片 等等。 请随时修改config对象中的属性,并查看根据您的修改会发生什么。
ATNativeConfig包含多个ATNativeItemProperty对象,用来控制Native广告的样式。ATNativeItemProperty控制单个Native广告元素的位置和样式;某些元素可能不支持ATNativeItemProperty中的一些属性,比如图片元素(icon, main image)只支持x, y, width, height, usesPixel,但不支持背景颜色、字体大小和字体颜色等,而文本元素(如title, cta, desc)则支持所有属性。在iOS游戏中,如果你想指定“透明”,则用"clearColor",比如如果你想广告区域的背景是透明的,则把"clearColor"赋值给parentProperty的backgroundColor即可。 注意: 1)只有iOS支持clearColor,安卓系统如果需要指定透明背景,只需要使rgba中的a部分为0即可;
2)iOS不支持alpha,所以颜色值应该传类似#5aef00(六位rbg值),而安卓可以支持alpha,其颜色包含8位16进制,比如5a2b3c00
parentProperty
parentProperty 控制的是Native的总体大小,如下图红圈区域。
Native 广告元素说明如下:
注:上述Native广告元素有返回时均需要渲染
如果要从屏幕上删除原生广告,请使用以下代码:
public void cleanView()
{
Debug.Log ("Developer cleanView native....");
ATNativeAd.Instance.cleanAdView(mPlacementId_native_all,AnyThinkAds.Demo.ATManager.anyThinkNativeAdView);
}
Dictionary<string, object> jsonmap = new Dictionary<string, object>();
#if UNITY_ANDROID
ATSize nativeSize = new ATSize(width, height);
jsonmap.Add(ATNativeAdLoadingExtra.kATNativeAdLoadingExtraNativeAdSizeStruct, nativeSize);
jsonmap.Add(AnyThinkAds.Api.ATConst.ADAPTIVE_HEIGHT, AnyThinkAds.Api.ATConst.ADAPTIVE_HEIGHT_YES);
...
ATNativeAd.Instance.loadNativeAd(mPlacementId_native_all, jsonmap);
...
Dictionary<string, string> jsonmap = new Dictionary<string, string>();
jsonmap.Add(AnyThinkAds.Api.ATConst.ADAPTIVE_HEIGHT, AnyThinkAds.Api.ATConst.ADAPTIVE_HEIGHT_YES);
ATNativeAd.Instance.renderAdToScene(mPlacementId_native_all, anyThinkNativeAdView, jsonmap);
...
Dictionary<string, string> jsonmap = new Dictionary<string, string>();
jsonmap.Add(AnyThinkAds.Api.ATConst.POSITION, AnyThinkAds.Api.ATConst.POSITION_BOTTOM);//屏幕底部居中
//jsonmap.Add(AnyThinkAds.Api.ATConst.POSITION, AnyThinkAds.Api.ATConst.POSITION_TOP);//屏幕顶部居中
ATNativeAd.Instance.renderAdToScene(mPlacementId_native_all, anyThinkNativeAdView, jsonmap);
回调信息详情请查看:回调信息说明
使用以下代码实现多个监听器
//广告加载成功
ATNativeAd.Instance.client.onAdLoadEvent += onAdLoad;
//广告加载失败
ATNativeAd.Instance.client.onAdLoadFailureEvent += onAdLoadFail;
//广告展示成功
ATNativeAd.Instance.client.onAdImpressEvent += onAdImpressed;
//广告被点击
ATNativeAd.Instance.client.onAdClickEvent += onAdClick;
//广告关闭按钮被点击,部分广告平台有此回调
ATNativeAd.Instance.client.onAdCloseEvent += onAdClose;
//广告视频开始播放,部分广告平台有此回调
ATNativeAd.Instance.client.onAdVideoStartEvent += onAdVideoStart;
//广告视频结束播放,部分广告平台有此回调
ATNativeAd.Instance.client.onAdVideoEndEvent += onAdVideoEnd;
//广告视频播放进度,部分广告平台有此回调
ATNativeAd.Instance.client.onAdVideoProgressEvent += onAdVideoProgress;
进阶监听设置:
// 广告源开始加载
ATNativeAd.Instance.client.onAdSourceAttemptEvent += startLoadingADSource;
// 广告源加载完成
ATNativeAd.Instance.client.onAdSourceFilledEvent += finishLoadingADSource;
// 广告源失败
ATNativeAd.Instance.client.onAdSourceLoadFailureEvent += failToLoadADSource;
// 广告源开始bidding
ATNativeAd.Instance.client.onAdSourceBiddingAttemptEvent += startBiddingADSource;
// 广告源bidding成功
ATNativeAd.Instance.client.onAdSourceBiddingFilledEvent += finishBiddingADSource;
// 广告源bidding失败
ATNativeAd.Instance.client.onAdSourceBiddingFailureEvent += failBiddingADSource;
方法定义参数如下代码(注意 : 方法名可参考以下代码或者自定义方法名,但参数必须一致)
//sender 为广告类型对象,erg为返回信息
//广告加载成功
public void onAdLoad(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdLoaded------:" + erg.placementId);
}
//广告加载失败
public void onAdLoadFail(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdLoadFail------:" + erg.placementId + "--code:" + erg.code + "--msg:" + erg.message);
}
//广告展示成功
public void onAdImpressed(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdImpressed------:" + erg.placementId);
}
//广告被点击
public void onAdClicked(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdClicked------:" + erg.placementId);
}
//广告视频开始播放,部分广告平台有此回调
public void onAdVideoStart(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdVideoStart------:" + erg.placementId);
}
//广告视频结束播放,部分广告平台有此回调
public void onAdVideoEnd(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdVideoEnd------:" + erg.placementId);
}
//广告视频播放进度,部分广告平台有此回调
public void onAdVideoProgress(object sender, ATAdProgressEventArgs erg)
{
Debug.Log("Developer onAdVideoProgress------:" + erg.placementId);
}
//广告关闭按钮被点击,部分广告平台有此回调
public void onAdCloseButtonClicked(object sender, ATAdEventArgs erg)
{
Debug.Log("Developer onAdCloseButtonClicked------:" + erg.placementId);
}
// v5.8.10 新增广告源层级回调
// 广告源开始加载
public void startLoadingADSource(object sender, ATAdEventArgs erg){
Debug.Log("Developer startLoadingADSource------");
}
// 广告源加载完成
public void finishLoadingADSource(string placementId, ATCallbackInfo callbackInfo){
Debug.Log("Developer finishLoadingADSource------");
}
// 广告源失败
public void failToLoadADSource(object sender, ATAdEventArgs erg){
Debug.Log("Developer failToLoadADSource------");
}
// 广告源开始bidding
public void startBiddingADSource(object sender, ATAdEventArgs erg){
Debug.Log("Developer startBiddingADSource------");
}
// 广告源bidding成功
public void finishBiddingADSource(object sender, ATAdEventArgs erg){
Debug.Log("Developer finishBiddingADSource------");
}
// 广告源bidding失败
public void failBiddingADSource(object sender, ATAdEventArgs erg){
Debug.Log("Developer failBiddingADSource------");
}
要获得有关各种原生广告事件(加载成功/失败,展示和点击等)的通知,您可以定义一个 ATNativeAdListener 的实现类,下面是一个示例:(注意:对于Android来说,所有回调方法均不在Unity的主线程)
class ATNativeCallbackListener : ATNativeAdListener
{
//广告加载成功
public void onAdLoaded(string placementId)
{
Debug.Log("Developer onAdLoaded------:" + placementId);
}
//广告加载失败
public void onAdLoadFail(string placementId, string code, string message)
{
Debug.Log("Developer onAdLoadFail------:" + placementId + "--code:" + code + "--msg:" + message);
}
//广告展示成功
public void onAdImpressed(string placementId, ATCallbackInfo callbackInfo)
{
Debug.Log("Developer onAdImpressed------:" + placementId);
}
//广告被点击
public void onAdClicked(string placementId, ATCallbackInfo callbackInfo)
{
Debug.Log("Developer onAdClicked------:" + placementId);
}
//广告视频开始播放,部分广告平台有此回调
public void onAdVideoStart(string placementId)
{
Debug.Log("Developer onAdVideoStart------:" + placementId);
}
//广告视频结束播放,部分广告平台有此回调
public void onAdVideoEnd(string placementId)
{
Debug.Log("Developer onAdVideoEnd------:" + placementId);
}
//广告视频播放进度,部分广告平台有此回调
public void onAdVideoProgress(string placementId, int progress)
{
Debug.Log("Developer onAdVideoProgress------:" + placementId);
}
//广告关闭按钮被点击,部分广告平台有此回调
public void onAdCloseButtonClicked(string placementId, ATCallbackInfo callbackInfo)
{
Debug.Log("Developer onAdCloseButtonClicked------:" + placementId);
}
// v5.8.10 新增广告源层级回调
// 广告源开始加载
public void startLoadingADSource(string placementId, ATCallbackInfo callbackInfo){
Debug.Log("Developer startLoadingADSource------");
}
// 广告源加载完成
public void finishLoadingADSource(string placementId, ATCallbackInfo callbackInfo){
Debug.Log("Developer finishLoadingADSource------");
}
// 广告源失败
public void failToLoadADSource(string placementId,ATCallbackInfo callbackInfo,string code, string message){
Debug.Log("Developer failToLoadADSource------");
}
// 广告源开始bidding
public void startBiddingADSource(string placementId, ATCallbackInfo callbackInfo){
Debug.Log("Developer startBiddingADSource------");
}
// 广告源bidding成功
public void finishBiddingADSource(string placementId, ATCallbackInfo callbackInfo){
Debug.Log("Developer finishBiddingADSource------");
}
// 广告源bidding失败
public void failBiddingADSource(string placementId,ATCallbackInfo callbackInfo,string code, string message){
Debug.Log("Developer failBiddingADSource------");
}
}
注:您在本节中看到的代码段来源于我们Demo的nativeScene.cs demo project.