菜单

原生广告集成说明

Android上需要注意的:
目前使用Unity直接打出Android的APK是不能使用原生视频广告,因为Unity打包APK默认会把游戏的Activity硬件加速关闭,所以无法展示视频。如果需要展示原生广告视频的话,必须使用export project的方式处理,处理方式如下:

(1)选择Export Project的模式导出Android工程

(2)修改AndroidManifest里的属性,将图中的hardwareAccelerated的属性设置成true

完成以上步骤之后,使用当前的Android工程进行打包即可。

1. 接入流程建议

  1. 启动应用时通过调用ATNativeAd#loadNativeAd来加载广告
  2. 在需要展示广告的位置通过ATNativeAd#hasAdReady判断是否能展示
  3. 如需使用广告场景区分不同业务场景的数据,具体参考示例代码

2. API说明

ATNativeAd:

API参数说明
loadNativeAdstring placementid,Dictionary<string,string> extra加载广告(从v5.6.8开始,针对穿山甲模板渲染、Mintegral自动渲染广告等必须通过extra参数传递宽高,否则广告大小可能显示异常)
setListenerATNativeAdListener listener设置监听回调接口 (5.9.51版本之后废弃)设置监听器的方式具体参考: 原生广告事件设置说明
hasAdReadystring placementid判断是否有广告缓存
checkAdStatusstring placementid(v5.7.22新增)获取当前广告位的状态(Json字符串):
1、isLoading:是否正在加载
2、isReady:是否有广告缓存(与hasAdReady作用相同)
3、AdInfo:当前优先级最高的广告缓存信息(参考ATCallbackInfo说明
getValidAdCachesstring placementid(v5.7.54新增)获取加载成功的全部广告缓存信息(JSON字符串)
(参考ATCallbackInfo说明
renderAdToScenestring placementid,ATNativeAdView anyThinkNativeAdView显示广告
entryScenarioWithPlacementIDstring placementId, string scenarioID设置进入可展示广告场景

3. 加载原生广告

您可以使用以下代码加载原生广告:

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);
}

注: 请继续阅读以了解如何在加载成功/失败事件时得到通知。

4. 判断是否有广告缓存

ATNativeAd.Instance.hasAdReady(mPlacementId_native_all);

5. 展示原生广告

您可以使用以下代码显示原生广告:

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详细说明

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 广告元素说明如下:

  • appIconProperty : appIconProperty属性控制广告的图标属性,如下图1所示:
  • mainImageProperty: mainImageProperty控制广告的封面图,如下图2所示:
  • titleProperty: titleProperty控制广告标题,如下图3所示:
  • descProperty : descProperty控制广告描述文字,如下图4所示
  • adLogoProperty :adLogoProperty控制广告标识属性,如下图5所示. 注意: 有的平台的广告标识位置是内部固定,不支持开发者指定,比如Admob。
  • ctaButtonProperty: ctaButtonProperty控制点击按钮,如下图6所示
  • dislikeButtonProperty(v5.7.21新增)dislikeButtonProperty控制关闭按钮(可不设置,则不显示关闭按钮)

注:上述Native广告元素有返回时均需要渲染

如果要从屏幕上删除原生广告,请使用以下代码:

public void cleanView()
{
    Debug.Log ("Developer cleanView native....");
   ATNativeAd.Instance.cleanAdView(mPlacementId_native_all,AnyThinkAds.Demo.ATManager.anyThinkNativeAdView);
}

关于模板渲染广告说明

  • 只能通过parentProperty来控制模板渲染广告。调整其他属性(appIcon、title、desc、adLogo、ctaButton、mainImage等)无效,其中parentProperty、mainImageProperty必须设置,mainImageProperty的参数可与parentProperty一致
  • parentProperty的宽高需与加载时传入的宽高一致,否则可能出现展示不全或者展示过大的问题
  • 模板广告有自己的宽高比例,可在广告平台后台进行查看。尽量在广告平台后选择宽高比例一样或者接近的模板,在代码中以那个宽高比例传入宽高来加载、展示广告,以获得最佳展示效果
  • 模板渲染广告自适应高度:开发者可通过以下步骤实现自适应高度(加载时自适应高度仅针对Android的穿山甲、优量汇平台)注意:
  • 使用自适应高度时,可能会出现比较高的模板广告,开发者可根据实际需求在广告平台后台勾选需要的宽高比例模板,去除不符合预期的模板
  • 自适应高度不受parentProperty的高度控制
  • 1)(此点仅针对Android)加载时开启自适应高度(需传入Key:ADAPTIVE_HEIGHT)
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);
  • 2)展示时开启自适应高度(需传入Key:Key:ADAPTIVE_HEIGHT)
...
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);
  • 3)展示时,可控制广告居中显示在屏幕顶部或者底部
...
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);

6. 实现原生广告监听器 (注意:仅在V5.9.51版本以上支持)

回调信息详情请查看回调信息说明

使用以下代码实现多个监听器

        //广告加载成功
           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------");
    }

7. 旧版本实现原生广告的监听 (注意:仅在V5.9.51版本以下使用,新版本已废弃)

要获得有关各种原生广告事件(加载成功/失败,展示和点击等)的通知,您可以定义一个 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.


上一个
Banner广告集成说明
下一个
开屏广告接入
最近修改: 2025-05-30Powered by