菜单

开屏广告

1. 开屏广告介绍

1.1 集成建议

为了提高开屏广告的加载效率可以参考冷启动策略SDK预置策略 ,详情请参考开屏广告接入最佳实践

 

2. API说明

2.1广告加载

ATSplashAd: Splash广告的加载类

方法 说明
ATSplashAd(Context context, String placementId, ATSplashAdListener listener, int fetchAdTimeout) Splash的初始化方法,以下是参数说明:
context:加载广告使用的Context(建议传入Activity)
placementId:Taku的开屏广告位id
listener:广告事件监听器
fetchAdTimeout:广告加载超时时间,单位ms注意:广告加载超时时间默认为5000ms
ATSplashAd(Context context, String placementId, ATSplashAdListener listener) Splash的初始化方法
参数意义同上
void loadAd() 发起广告加载

 

广告加载:

// 注:xxx需要替换为您的开屏广告超时时间,单位:毫秒
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);
splashAd.loadAd();

 

2.2广告展示

ATSplashAd:

方法 说明
boolean isAdReady() 判断当前ATSplashAd是否存在可展示的广告
void show(Activity activity, ViewGroup container) 展示Splash广告,以下是参数说明:
activity:展示广告的activity
container:展示广告的容器
void show(Activity activity, final ViewGroup container, ATSplashSkipInfo atSplashSkipInfo) 使用自定义SkipView,展示Splash广告
参数意义同上
atSplashSkipInfo:自定义SkipView功能类
自定义SkipView只对以下广告有效
MyOffer、Adx、OnlineAPI、穿山甲
请参考Demo
void show(Activity activity, ViewGroup container, ATShowConfig showConfig) (v6.3.10新增)指定场景展示Splash广告,以下是参数说明:
activity:展示广告的activity
container:展示广告的容器
showConfig:可传入展示时的额外参数,如下1.ATShowConfig#showCustomExt(String showCustomExt):可传入展示时自定义参数,传入的该参数将通过ATAdInfo#getShowCustomExt()返回

2.ATShowConfig#scenarioId(String scenarioId):可传入广告场景,同show(Activity activity, ViewGroup container,String scenario)
void show(Activity activity, final ViewGroup container, ATSplashSkipInfo atSplashSkipInfo, ATShowConfig showConfig) (v6.3.10新增)指定场景使用自定义SkipView,展示Splash广告
参数意义同上
atSplashSkipInfo:自定义SkipView功能类
自定义SkipView只对以下广告有效
MyOffer、Adx、OnlineAPI、穿山甲 请参考Demo
void entryAdScenario(String placementId, String scenarioId) 进入业务场景当前广告位缓存状态统计。其中scenario是指广告展示场景(非必传,可以直接传null),可从后台创建场景参数和使用请参考 业务场景缓存状态统计

 

广告展示:

  /*
     为了统计场景到达率,相关信息可查阅 "https://help.takuad.com/docs/1RWLAv"
     在满足广告触发条件时调用“进入广告场景”方法,比如:
     ** 广告场景是在清理结束后弹出广告,则在清理结束时调用;
     * 1、先调用 "entryAdScenario"
     * 2、在调用 "isAdReady" 是否可展示
     * 3、最后调用 "show" 展示
     * 4、scenario 传入场景id后台场景管理才会有数据显示(非必须)
     */
 ATSplashAd.entryAdScenario("your splash placementID", "your scenarioID");
//展示前需判断广告有缓存且当前Activity处于前台
if (splashAd.isAdReady() && inForeBackground) {
    //container大小至少占屏幕75%
    splashAd.show(activity, container,"your scenarioID");
}

 

展示时传入自定义参数:

Taku SDK v6.3.10及以上开始支持开发者在展示时传入自定义参数,展示时传入的自定义参数跟Load时传入的自定义参数相互独立。展示时传入自定义参数可以在Taku SDK回调信息中返回。

 

2.3本地参数

ATSplashAd:

方法 说明
void setLocalExtra(Map 设置本地参数,key通过ATAdConst.KEY进行获取

 

ATAdConst.KEY:LocalExtra本地参数预定义Key取值

Key 说明
AD_WIDTH 广告宽度
AD_HEIGHT 广告高度

 

2.4广告对象

ATSplashAd:

方法 说明
checkAdStatus 获取当前广告位的状态对象 ATAdStatusInfo,ATAdStatusInfo
checkValidAdCaches 查询当前广告位的所有缓存信息的ATAdInfo对象
ATAdInfo:广告的信息对象,可区分广告平台,主要包含第三方聚合平台的id信息 见ATAdInfo信息说明

 

ATAdStatusInfo:广告位的状态对象

方法 说明
boolean isLoading() 判断当前广告位是否正在加载广告
boolean isReady() 判断当前广告位是否存在可展示的广告,与ATSplashAd.isAdReady()方法作用相同
getATTopAdInfo 获取当前广告位优先级最高的广告缓存信息 ATAdInfo对象
ATAdInfo:广告的信息对象,可区分广告平台,主要包含第三方聚合平台的id信息 见ATAdInfo信息说明

 

2.5广告监听

ATSplashAdListener: Splash广告的事件回调类

方法 说明
void onAdLoaded(boolean isTimeout) 广告加载成功回调
isTimeout:广告加载成功时,是否超过fetchAdTimeout指定时间
void onNoAdError(AdError error) 广告加载失败回调,可通过AdError.getFullErrorInfo()获取全部错误信息,请参考 AdError注意:禁止在此回调中执行广告的加载方法进行重试,否则会引起很多无用请求且可能会导致应用卡顿
void onAdShow(ATAdInfo atAdInfo) 广告展示回调
ATAdInfo:广告的信息对象,可区分广告平台,主要包含第三方聚合平台的id信息 见ATAdInfo信息说明
void onAdClick(ATAdInfo atAdInfo) 广告点击回调
参数意义同上
void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) 广告关闭回调
参数意义同上

ATSplashAdExtraInfo:开屏广告关闭额外信息包括 屏点睛广告控制接口类,开发者可通过此接口控制展示点睛广告
注意:
(1)当穿山甲、优量汇的开屏广告素材支持点睛时,splashEyeAd不为null
(2)当展示的是快手开屏广告时,splashEyeAd为非null值,但不一定表示此次快手开屏广告的素材支持点睛,不支持时调用IATSplashEyeAd#show()方法会直接回调ATSplashEyeAdListener#onAdDismiss()方法
(3)当splashEyeAd不为null,但是开发者不想支持点睛功能时,必须调用splashEyeAd.destroy()释放资源,然后跳转主页面或者移除开屏View
void onAdLoadTimeout 广告加载超时回调,可在此处进行开屏广告加载超时处理
注意:
(1)广告加载超时回调后,开屏广告仍在加载,如果加载成功会触发onAdLoaded(true)
(2)如果本次加载的开屏广告没有被展示,会放到缓存中供下次展示

 

ATSplashExListener: 继承自ATSplashAdListener,方法同ATSplashAdListener,额外回调说明如下:

方法 说明
void onDeeplinkCallback(ATAdInfo atAdInfo, boolean isSuccess) deeplink回调,针对Adx、OnlineApi广告
isSuccess:是否成功
void onDownloadConfirm(Context context, ATAdInfo atAdInfo, View clickView, ATNetworkConfirmInfo networkConfirmInfo) 应用类广告点击下载时回调方法。
ATNetworkConfirmInfo: 第三方广告平台提供的回调信息(目前仅有优量汇的GDTDownloadFirmInfo)
ATAdInfo:广告的信息对象,可区分广告平台,主要包含第三方聚合平台的id信息 见ATAdInfo信息说明

 

IATSplashEyeAd :开屏点睛广告的控制类

方法 说明
show(Context context, Rect rect, ATSplashEyeAdListener atSplashEyeAdListener) 展示开屏点睛(V+、小窗)广告
context:上下文
rect:开屏点睛广告缩放动画结束时广告的显示大小,以屏幕左上角为起点(注意:快手必须传入此参数
atSplashEyeAdListener:开屏点睛广告事件监听器
getSuggestedSize(Context context) 获取缩放动画结束时推荐显示的广告大小
(目前只有穿山甲会返回,建议优先使用此大小)
onFinished 当执行完缩放动画时,开发者必须调用此方法通知SDK,显示广告的关闭按钮

 

ATSplashEyeAdListener:开屏点睛广告的事件回调类

方法 说明
onAnimationStart(View splashView) 开发者需在此回调中执行开屏点睛广告的动画缩放
splashView:开屏广告的View
注意:
(1)缩放动画的示例代码可参考Demo
(2)缩放动画结束时,必须调用IATSplashEyeAd#onFinished()
(3)快手不会触发此回调,不能控制快手的缩放动画
onAdDismiss(boolean isSupportEyeSplash, String errorMsg) 开屏点睛广告关闭回调,建议在回调中调用IATSplashEyeAd#destroy()
isSupportEyeSplash:是否支持开屏点睛
errorMsg:当出现错误时,此处会显示错误信息
注意:各平台触发此回调的时机不一样,可能是在点击关闭按钮时,也可能是在广告播放结束时

 

ATSplashSkipInfo: 自定义SkipView功能类

方法 说明
ATSplashSkipInfo(View skipView, long countDownDuration, long callbackInterval, ATSplashSkipAdListener atSplashSkipAdListener) 自定义SkipView功能类构造方法
skipView:开发者自定义的跳过按钮View
countDownDuration:倒计时总时长(单位:ms),默认5s,最小可设置为2s
callbackInterval:倒计时回调的触发间隔(单位:ms),默认每隔1s触发一次ATSplashSkipAdListener#onAdTick()回调,最小可设置为20ms
atSplashSkipAdListener:自定义SkipView事件监听类
注意:
(1)skipView传入null时,自定义SkipView功能将不生效
(2)开发者如果希望自定义倒计时动画,可通过callbackInterval参数,改变倒计时回调的触发间隔
ATSplashSkipInfo(View skipView, ATSplashSkipAdListener atSplashSkipAdListener) 自定义SkipView功能类构造方法
参数意义同上

 

ATSplashSkipAdListener:自定义SkipView事件监听类

方法 说明
onAdTick(long duration, long remainder) 倒计时回调,开发者可在此回调中更新倒计时动画
duration:倒计时总时长(单位:ms)
remainder:当前剩余倒计时进度(单位:ms)
isSupportCustomSkipView(boolean isSupport) 回调通知开发者,当前展示的广告是否支持自定义SkipView
isSupport:true为当前展示的广告平台支持,false为不支持

注意:
(1)开发者可在此回调中判断isSupport为true时,将skipView设置为可见

 

3. 示例代码

// 注:xxx需要替换为您的开屏广告超时时间,单位:毫秒
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);
splashAd.loadAd();

 /*
     为了统计场景到达率,相关信息可查阅 "https://docs.takuad.com/#/zh-cn/android/NetworkAccess/scenario/scenario"
     在满足广告触发条件时调用“进入广告场景”方法,比如:
     ** 广告场景是在清理结束后弹出广告,则在清理结束时调用;
     * 1、先调用 "entryAdScenario"
     * 2、在调用 "isAdReady" 是否可展示
     * 3、最后调用 "show" 展示
     * 4、scenario 传入场景id后台场景管理才会有数据显示(非必须)
     */
 ATSplashAd.entryAdScenario("your splash placementID", "your scenarioID");
//展示前需判断广告有缓存且当前Activity处于前台
if (splashAd.isAdReady() && inForeBackground) {
    //container大小至少占屏幕75%
    splashAd.show(activity, container,"your scenarioID");
}

详细开屏广告示例代码请参考:Demo的SplashAdActivity类

 

冷启动示例:

ATSplashExListener listener = new ATSplashExListener() {
    ......
    @Override
    public void onAdLoaded(boolean isTimeout) {
        //加载未超时时
        if(!isTimeout){
            //当前Activity处于前台时进行广告展示
            if(inForeBackground){
                //container大小至少占屏幕75%
                splashAd.show(activity, container);
            }else{
                //等待应用回到前台后再进行展示
                needShowSplashAd = true;
            }
        }
    }

    @Override
    public void onAdLoadTimeout() {
        //加载超时后,直接进入主界面
        jumpToMainActivity();
    }

    @Override
    public void onNoAdError(AdError adError) {
        //加载失败直接进入主界面
        jumpToMainActivity();
    }

    @Override
    public void onAdShow(ATAdInfo entity) {

    }

    @Override
    public void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) {
        //=1无区分 =2跳过结束 =3倒计时结束 =4点击广告结束 =99开屏展示失败
        if(splashAdExtraInfo.getDismissType()==ATAdConst.DISMISS_TYPE.SHOWFAILED){
    }
        //开屏广告展示关闭后进入主界面
        //注意:部分平台跳转落地页后倒计时不暂停,即使在看落地页,倒计时结束后仍然会回调onAdDismiss
        //因此在页面跳转时需要特殊处理,详情参考下方示例代码
        jumpToMainActivity();
    }
    ......
};

// 注:xxx需要替换为您的开屏广告超时时间,单位:毫秒
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);

if (splashAd.isAdReady()) {
    //container大小至少占屏幕75%
    splashAd.show(activity, container);
}else{
    splashAd.loadAd();
}
 

 

onAdDismiss() 开屏广告页面跳转示例:

//是否需要进行页面跳转标记
boolean needJump;

@Override
protected void onResume() {
    super.onResume();
    if (needJump) {
        jumpToMainActivity();
    }
    needJump = true;
}

@Override
protected void onPause() {
    super.onPause();
    needJump = false;
}

public void jumpToMainActivity() {
    if (!needJump) {
        needJump = true;
        return;
    }
    Intent intent = new Intent(this, YourMainActivity.class);
    startActivity(intent);
    finish();
}
 

 

4. 广告平台特殊配置说明

4.1 Admob

Admob的开屏广告不需要依赖container进行展示,只能全屏进行展示,广告展示后不会进行倒计时且不会自动跳过

 

4.2 百度

如果有接入百度SDK的Splash广告,需要在百度后台选择SkipView的展示样式(百度后台默认选择不展示SkipView)。

 

4.3 穿山甲

加载广告前需设置广告的宽高,示例如下:

// 注:xxx需要替换为您的开屏广告超时时间,单位:毫秒
splashAd = new ATSplashAd(this, placementId, atMediationRequestInfo, this, xxx); 
Map localMap = new HashMap<>(); 
localMap.put(ATAdConst.KEY.AD_WIDTH, width);//单位:px 
localMap.put(ATAdConst.KEY.AD_HEIGHT, height);//单位:px 
splashAd.setLocalExtra(localMap); 
splashAd.loadAd();

注意:如果设置的宽高与展示时的container宽高不一致,或者Taku后台的模板渲染选项与穿山甲后台不对应,将会导致广告显示不全或者模糊、失真

 

 

5. 开屏点睛示例

注意:

① 因为不一定能加载到支持点睛的开屏广告,所以开屏广告点睛素材的填充率问题,请联系广告平台进行处理

② 以下示例代码,请参考Demo

 

5.1 开屏Activity与显示点睛广告的Activity不是同一个

(1) 新建SplashEyeAdHolder类用于缓存IATSplashEyeAd实例

public class SplashEyeAdHolder {
    public static IATSplashEyeAd splashEyeAd;
}
public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    @Override
    public void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) {
        Log.i(TAG, "onAdDismiss:\n" + entity.toString());

        //(1)当穿山甲、优量汇的开屏广告素材支持点睛时,splashEyeAd不为null
        //(2)当展示的是快手开屏广告时,splashEyeAd为非null值,但不一定表示此次快手开屏广告的素材支持点睛,不支持时调用IATSplashEyeAd#show()方法会直接回调ATSplashEyeAdListener#onAdDismiss()方法
        //(3)当splashEyeAd不为null,但是开发者不想支持点睛功能时,必须调用splashEyeAd.destroy()释放资源,然后跳转主页面或者移除开屏View

        SplashEyeAdHolder.splashEyeAd = splashAdExtraInfo.getAtSplashEyeAd();

        jumpToMainActivity();
    }
}
 
 

 

(2) 设置开屏相关信息(SplashZoomOutManager请参考Demo),同时跳转首页Activity并取消页面跳转动画,关闭当前页面

public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    public void jumpToMainActivity() {
        if (!hasHandleJump) {
            hasHandleJump = true;

            if (SplashEyeAdHolder.splashEyeAd != null) {
                try {
                    SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                    zoomOutManager.setSplashInfo(container.getChildAt(0),
                            getWindow().getDecorView());
                } catch (Throwable e) {
                    Log.e(TAG, "jumpToMainActivity: ------------------------------------------ error");
                    e.printStackTrace();
                }

                Intent intent = new Intent(this, TestMainActivity.class);
                startActivity(intent);

                overridePendingTransition(0, 0);
            }

            finish();
            Toast.makeText(this, "start your MainActivity.", Toast.LENGTH_SHORT).show();
        }
    }
}
 

 

(3) 在首页Activity中,创建showSplashEyeAd()方法

public class TestMainActivity extends Activity {
    ...
    private void showSplashEyeAd() {

        if (SplashEyeAdHolder.splashEyeAd == null) {
            return;
        }

        SplashEyeAdHolder.splashEyeAd.show(TestMainActivity.this, null, new ATSplashEyeAdListener() {
            @Override
            public void onAnimationStart(View splashView) {
                //执行缩放动画
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());

                //建议优先使用IATSplashEyeAd#getSuggestedSize()返回的大小作为缩放动画的目标大小
                int[] suggestedSize = SplashEyeAdHolder.splashEyeAd.getSuggestedSize(getApplicationContext());
                if (suggestedSize != null) {
                    zoomOutManager.setSplashEyeAdViewSize(suggestedSize[0], suggestedSize[1]);
                }
                zoomOutManager.startZoomOut((ViewGroup) getWindow().getDecorView(),
                        findViewById(android.R.id.content), new SplashZoomOutManager.AnimationCallBack() {

                            @Override
                            public void animationStart(int animationTime) {

                            }

                            @Override
                            public void animationEnd() {
                                Log.i(TAG, "animationEnd---------: eye ad");

                                //当缩放动画完成时必须调用IATSplashEyeAd#onFinished()通知SDK
                                SplashEyeAdHolder.splashEyeAd.onFinished();
                            }
                        });

            }

            @Override
            public void onAdDismiss(boolean isSupportEyeSplash, String errorMsg) {
                Log.i(TAG, "onAdDismiss---------: close eye ad");

                //建议在此回调中调用IATSplashEyeAd#destroy()释放资源以及释放其他资源,以免造成内存泄漏
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                zoomOutManager.clearStaticData();

                SplashEyeAdHolder.splashEyeAd.destroy();
                SplashEyeAdHolder.splashEyeAd = null;
            }
        });
    }

}
 

 

(4) 在首页Activity中,调用showSplashEyeAd()展示点睛广告(建议在onAttachedToWindow()回调中调用showSplashEyeAd()

 public class TestMainActivity extends Activity {
     ...
     @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();

        showSplashEyeAd();
    }
}
 

 

5.2 开屏Activity与显示点睛广告的Activity是同一个

public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    @Override
    public void onAdDismiss(ATAdInfo entity, IATSplashEyeAd splashEyeAd) {
        Log.i(TAG, "onAdDismiss:\n" + entity.toString());

        //(1)当穿山甲、优量汇的开屏广告素材支持点睛时,splashEyeAd不为null
        //(2)当展示的是快手开屏广告时,splashEyeAd为非null值,但不一定表示此次快手开屏广告的素材支持点睛,不支持时调用IATSplashEyeAd#show()方法会直接回调ATSplashEyeAdListener#onAdDismiss()方法
        //(3)当splashEyeAd不为null,但是开发者不想支持点睛功能时,必须调用splashEyeAd.destroy()释放资源,然后跳转主页面或者移除开屏View


        if (container != null) {
            container.removeAllViews();
            container.setVisibility(View.GONE);
        }  

        //展示点睛广告
        showSplashEyeAd(splashEyeAd);
    }

     private void showSplashEyeAd(IATSplashEyeAd splashEyeAd) {
        if (splashEyeAd == null) {
            return;
        }

        splashEyeAd.show(SplashAdShowInCurrentActivity.this, null, new ATSplashEyeAdListener() {
            @Override
            public void onAnimationStart(View splashView) {
                //执行缩放动画
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());

                ////建议优先使用IATSplashEyeAd#getSuggestedSize()返回的大小作为缩放动画的目标大小
                int[] suggestedSize = splashEyeAd.getSuggestedSize(getApplicationContext());
                if (suggestedSize != null) {
                    zoomOutManager.setSplashEyeAdViewSize(suggestedSize[0], suggestedSize[1]);
                }

                zoomOutManager.setSplashInfo(splashView, getWindow().getDecorView());
                ViewGroup content = findViewById(android.R.id.content);
                zoomOutManager.startZoomOut(splashView, content, content, new SplashZoomOutManager.AnimationCallBack() {

                    @Override
                    public void animationStart(int animationTime) {

                    }

                    @Override
                    public void animationEnd() {
                        Log.i(TAG, "animationEnd---------: eye ad");

                        //当缩放动画完成时必须调用IATSplashEyeAd#onFinished()通知SDK
                        splashEyeAd.onFinished();
                    }
                });


            }

            @Override
            public void onAdDismiss(boolean isSupportEyeSplash, String errorMsg) {
                Log.i(TAG, "onAdDismiss---------: eye ad");

                //建议在此回调中调用IATSplashEyeAd#destroy()释放资源以及释放其他资源,以免造成内存泄漏
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                zoomOutManager.clearStaticData();
                splashEyeAd.destroy();
            }
        });
    }
}
 

 

6. 首次安装开屏加载效率提升方案

背景:应用安装时首次加载开屏广告,Taku需先从后台拉取配置的广告位信息缓存在本地,然后才会去请求广告平台的广告,这期间涉及了两次网络请求(串行)影响了开屏广告加载效率,下面提供了两种方式去提高应用安装后首次开屏加载效率。

 

6.1(v6.1.78及以后版本)预置策略设置(建议使用)

为提高首次冷启动的广告加载效果,在开屏广告位上创建SDK预置策略的流量分组,然后在这个流量分组配置瀑布流,同时建议您增加一个兜底广告源,最后导出SDK预置策略并预置到应用中。具体接入文档见SDK预置策略使用说明

配置效果: 可以实现SDK预置开屏策略,同时实现开屏兜底广告源的兜底功能。即:此兜底广告源会和广告位下的整体瀑布流并行发起请求。并且用户不会在首次请求时必定使用兜底广告,而是正常走瀑布流和兜底广告源的并行请求。可以实现变现价值最大化。

注意: 预置策略的使用时机是只有在本地没有缓存策略的情况下才会调用。

上一个
自定义插屏广告
下一个
开屏广告接入最佳实践
最近修改: 2025-07-15Powered by