# 7. 原生广告

在继续之前,请确保已如上所述导入并初始化了SDK。

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

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

Android_export_project

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

Android_manifest_accelaerate

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

# (1) API说明

ATNativeAd:

API 参数 说明
setLocalExtra string placementid,Dictionary<string,string> extra 设置本地参数,针对模板渲染、自动渲染广告必须设置
loadNativeAd string placementid,Dictionary<string,string> extra 加载广告
hasAdReady string placementid 判断是否有广告缓存
renderAdToScene string placementid,ATNativeAdView anyThinkNativeAdView 显示广告
cleanAdView string placementid,ATNativeAdView anyThinkNativeAdView 清除广告

# (2) 加载原生广告

public void loadNative() 
{
        Debug.Log ("Developer load native, unit id = " + mPlacementId_native_all);

        if(callbackListener == null) {
            callbackListener = new ATNativeCallbackListener();
            ATNativeAd.Instance.setListener(callbackListener);
        }

        Dictionary<string,string> localExtra = new Dictionary<string,string>();
        //个性化模板
        localExtra.Add ("tt_image_width", width);
        localExtra.Add ("tt_image_height", height);
        //自动渲染
        localExtra.Add ("mintegral_auto_render_native_width", width);
        localExtra.Add ("mintegral_auto_render_native_height", height);
        ATNativeAd.Instance.setLocalExtra(mPlacementId_native_all, localExtra);

        Dictionary<string,string> jsonmap = new Dictionary<string,string>();
        ATNativeAd.Instance.loadNativeAd(mPlacementId_native_all, jsonmap);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

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

# (3) 展示原生广告

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

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

        ATNativeAdView anyThinkNativeAdView = new ATNativeAdView(conifg);
        AnyThinkAds.Demo.ATManager.anyThinkNativeAdView = anyThinkNativeAdView;
        Debug.Log("Developer renderAdToScene--->");
        ATNativeAd.Instance.renderAdToScene(mPlacementId_native_all, anyThinkNativeAdView);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

传递给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对象中的属性,并查看根据您的修改会发生什么。

# (4) 关于ATNativeConfig&ATNativeItemProperty详细说明

ATNativeConfig包含多个ATNativeItemProperty对象,用来控制Native广告的样式。ATNativeItemProperty控制单个Native广告元素的位置和样式;某些元素可能不支持ATNativeItemProperty中的一些属性,比如图片元素(icon, main image)只支持x, y, width, height, usesPixel,但不支持背景颜色、字体大小和字体颜色等,而文本元素(如title, cta, desc)则支持所有属性。

在iOS游戏中,如果你想指定“透明”,则用"clearColor",比如如果你想广告区域的背景是透明的,则把"clearColor"赋值给parentPropertybackgroundColor即可。

注意

1)只有iOS支持clearColor,安卓系统如果需要指定透明背景,只需要使rgba中的a部分为0即可;

2)iOS不支持alpha,所以颜色值应该传类似#5aef00(六位rbg值),而安卓可以支持alpha,其颜色包含8位16进制,比如5a2b3c00

parentProperty 控制的是Native的总体大小,如下图红圈区域。 parent_frame

Native 广告元素说明如下:

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

native_ad_des

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

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

# (5) 实现原生广告的Listener

要获得有关各种原生广告事件(加载成功/失败,展示和点击等)的通知,您可以定义一个 ** ATNativeAdListener** 的实现类,下面是一个示例:

class ATNativeCallbackListener : ATNativeAdListener
{
    public void onAdLoaded(string unitId)
    {
        Debug.Log("Developer onAdLoaded------:" + unitId);
    }
    public void onAdLoadFail(string unitId, string code, string message)
    {
        Debug.Log("Developer onAdLoadFail------:" + unitId + "--code:" + code + "--msg:" + message);
    }
    public void onAdImpressed(string unitId, ATCallbackInfo callbackInfo)
    {
        Debug.Log("Developer onAdImpressed------:" + unitId);
    }
    public void onAdClicked(string unitId, ATCallbackInfo callbackInfo)
    {
        Debug.Log("Developer onAdClicked------:" + unitId);
    }
    public void onAdVideoStart(string unitId)
    {
        Debug.Log("Developer onAdVideoStart------:" + unitId);
    }
    public void onAdVideoEnd(string unitId)
    {
        Debug.Log("Developer onAdVideoEnd------:" + unitId);
    }
    public void onAdVideoProgress(string unitId, int progress)
    {
        Debug.Log("Developer onAdVideoProgress------:" + unitId);
    }
    public void onAdCloseButtonClicked(string unitId, ATCallbackInfo callbackInfo)
    {
        Debug.Log("Developer onAdCloseButtonClicked------:" + unitId);
   }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36