开屏
开屏广告是一种特殊的广告格式,它在应用软启动或冷启动时显示。
简介
出现在自然端点和过渡段的广告样式,支持的广告尺寸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);
重要提醒
场景:开屏广告点击打开后,返回主流程时对于需要跳转首页的处理方式如下
- 在广告监听器"onAdClicked()"中记录全局变量的点击状态"isClicked = true",
- 在生命周期"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:无填充 |