跳到主要内容

开屏

开屏广告是一种特殊的广告格式,它在应用软启动或冷启动时显示。

简介

出现在自然端点和过渡段的广告样式,支持的广告尺寸9:20,效果如图:

9:20

提醒:开屏支持View和Activity两种形式展示广告,请按需选择接入;以下将按照View和Activity区分配置。

构建组件

View:请在xml中新增TSplashView。

<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.cloud.hisavana.sdk.api.adx.TSplashView
android:id="@id/splash_ad"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity:无需构建xml文件。

加载广告

强烈建议: 避免特殊原因导致应用卡在开屏页;请在应用开屏页添加超时机制,例如3s左右未成功展示开屏广告,请自行跳转页面。

View:请设置相应参数和监听回调。

// 绑定xml布局中的view
TSplashView tSplashView = findViewById(R.id.splash_ad);
// 设置广告位ID,其中"splash_id"是splash广告位ID
tSplashView.setPlacementId("splash_id");
// 设置广告监听器
tSplashView.setListener(new TAdListener());
// 监听跳过动作
tSplashView.setSkipListener(new TAdOnSkipListener());
// 加载广告
tSplashView.loadAd();

// 示例:'超时机制'
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
// 执行跳转逻辑
}
}, 3000);

// splash跳过动作监听器
private class TAdOnSkipListener implements OnSkipListener {
@Override
public void onClick() {
Log.i(TAG, "skip button click");
}

@Override
public void onTimeEnd() {
Log.i(TAG, "time end");
}
}

// 广告监听器,监听广告的请求超时、加载完成(填充)、展示、点击、异常、关闭动作的回调
private static class TAdListener extends AdListener {

// 异常回调(适用的广告位:所有广告位)
@Override
public void onError(TaErrorCode adError) {
Log.d(TAG,"Ad failed callback");
}

// 加载完成回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdLoaded() {
Log.d(TAG,"Ad loaded callback");
}

// 点击回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdClicked() {
Log.d(TAG,"Ad click callback");
}

// 展示回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdShow() {
Log.d(TAG,"Ad show callback");
}

// 请求超时回调(适用的广告位:所有广告位)
@Override
public void onTimeOut() {
Log.d(TAG,"Ad request timeout callback");
}

// 关闭回调(适用的广告位:Splash、Interstitial、Reward)
@Override
public void onAdClosed() {
Log.d(TAG,"Ad close callback");
}
}

假如想要添加子布局,例如在底部显示logo和名称等

/**
* 可选项
* 允许应用通过添加子布局的方式传入logo和名称
* sdk内部加载子布局渲染底部媒体logo信息,底部区域为手机屏幕高度的14%
*/
View logoLayout = LayoutInflater.from(this).inflate(R.layout.splash_logo_layout, null, false);
tSplashAd.setLogoLayout(logoLayout);

Activity:请设置相应参数和监听回调。

// 初始化开屏广告对象,其中"splash_id"是开屏广告位ID
TSplash tSplash = new TSplash(context, "splash_id");
// 设置广告监听器
tSplash.setListener(new TAdListener());
// 监听跳过动作
tSplash.setSkipListener(new TAdOnSkipListener());
// 加载广告
tSplash.loadAd();

// 示例:'超时机制'
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
// 执行跳转逻辑
}
}, 3000);


// splash跳过动作监听器
private class TAdOnSkipListener implements OnSkipListener {
@Override
public void onClick() {
Log.i(TAG, "skip button click");
}

@Override
public void onTimeEnd() {
Log.i(TAG, "time end");
}
}

// 广告监听器,监听广告的请求超时、加载完成(填充)、展示、点击、异常、关闭动作的回调
private static class TAdListener extends AdListener {

// 异常回调
@Override
public void onError(TaErrorCode adError) {
Log.d(TAG,"Ad failed callback");
}

// 加载完成回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdLoaded() {
Log.d(TAG,"Ad loaded callback");
}

// 点击回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdClicked() {
Log.d(TAG,"Ad click callback");
}

// 展示回调(适用的广告位:Splash、Interstitial、Banner、Reward)
@Override
public void onAdShow() {
Log.d(TAG,"Ad show callback");
}

// 请求超时回调
@Override
public void onTimeOut() {
Log.d(TAG,"Ad request timeout callback");
}

// 关闭回调(适用的广告位:Splash、Interstitial、Reward)
@Override
public void onAdClosed() {
Log.d(TAG,"Ad close callback");
}
}

假如想要添加子布局,例如在底部显示logo和名称等

/**
* 可选项
* 允许应用通过添加子布局的方式传入logo和名称
* sdk内部加载子布局渲染底部媒体logo信息,底部区域为手机屏幕高度的14%
*/
View logoLayout = LayoutInflater.from(this).inflate(R.layout.splash_logo_layout, null, false);
tSplashAd.setLogoLayout(logoLayout);

重要提醒

场景:开屏广告点击打开后,返回主流程时对于需要跳转首页的处理方式如下

  1. 在广告监听器"onAdClicked()"中记录全局变量的点击状态"isClicked = true",
  2. 在生命周期"onResume()"方法中做跳转主页面、移除开屏view的逻辑处理。

View:实现如下。

// 广告监听器"onAdClicked()"
@Override
public void onAdClicked() {
super.onAdClicked();
isClicked = true;
Log.d(TAG,"SplashAdActivity --> onAdClicked --> 点击了广告");
}
// 生命周期"onResume()"
@Override
protected void onResume() {
super.onResume();
if (isClicked){
// TODO 跳转首页
...
// 移除开屏view
if (splashView!= null && tSplashView.getParent() != null){
((ViewGroup) tSplashView.getParent()).removeView(splashView);
}
}
}

Activity:无需操作。

展示广告

View:请把开屏广告展示出来。

if (tSplashView != null) {
tSplashView.show();
}

Activity:请把开屏广告展示出来。

if (tSplash != null) {
tSplash.show();
}

销毁广告

请及时回收广告,否则App会发生内存泄漏。

View:请销毁广告视图。

@Override
protected void onDestroy() {
super.onDestroy();
if (tSplashView != null) {
tSplashView.destroy();
tSplashView = null;
}
}

Activity:请销毁广告对象。

@Override
protected void onDestroy() {
super.onDestroy();
if (tSplash != null) {
tSplash.destroy();
tSplash = null;
}
}

其它API

View:具体如下。

API调用介绍
tSplashView.isAdValid()当前广告是否在有效期内
tSplashView.isReady()当前广告是否加载成功且是否在投放期内,假如是展示,否则不展示
tSplashView.isOfflineAd()当前广告是否离线
tSplashView.getFillAdType()当前填充广告属于离线还是在线广告;1:离线广告、0:在线广告、-1:无填充

Activity:具体如下。

API调用介绍
tSplash.isAdValid()当前广告是否在有效期内
tSplash.isReady()当前广告是否加载成功且是否在投放期内,假如是展示,否则不展示
tSplash.isOfflineAd()当前广告是否离线
tSplash.getFillAdType()当前填充广告属于离线还是在线广告;1:离线广告、0:在线广告、-1:无填充