Commit 6bdad092 authored by jyx's avatar jyx

更新穿山甲、广点通及快手SDK版本号

parent bf8b2fc9
......@@ -228,7 +228,7 @@ dependencies {
// TalkingDada(已集成)
// 一览视频
implementation("com.yilan.sdk:ui:3.3.3.0") {
exclude group: 'com.yilan.sdk', module: 'yb_extra'
// exclude group: 'com.yilan.sdk', module: 'yb_extra'
exclude group: 'com.yilan.sdk', module: 'gdt'
exclude group: 'com.yilan.sdk', module: 'ks'
}
......@@ -361,18 +361,10 @@ dependencies {
// androidTestImplementation 'androidx.test.ext:junit:1.1.2'
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
// 穿山甲 GroMore
// mediation_ad_sdk
implementation(name: 'mediation_ad_sdk_2.7.1.2', ext: 'aar')
implementation(name: 'gdt_adapter_4.351.1221.1', ext: 'aar')
implementation(name: 'ks_adapter_3.3.9.0', ext: 'aar')
// 穿山甲广告
implementation(name: 'open_ad_sdk_3.6.1.3', ext: 'aar')
implementation(name: 'open_ad_sdk_4.0.1.1', ext: 'aar')
// 广点通广告 腾讯
implementation(name: 'GDTSDK.unionNormal.4.351.1221', ext: 'aar')
implementation(name: 'GDTSDK.unionNormal.4.420.1290', ext: 'aar')
// 快手
implementation(name: 'kssdk-ad-3.3.9', ext: 'aar')
// implementation(name: 'kssdk-all--3.3.16-publishRelease-9ffe2b94e', ext: 'aar')
// applog
implementation 'com.bytedance.applog:RangersAppLog-All-cn:5.2.6'
implementation(name: 'kssdk-ad-3.3.16', ext: 'aar')
}
......@@ -131,23 +131,21 @@
<!-- </intent-filter>-->
<!-- </activity>-->
<activity
android:name=".ui.activitys.SplashGroMoreActivity"
android:screenOrientation="portrait"
android:theme="@style/NormalSplash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- <activity-->
<!-- android:name=".ui.activitys.SplashGroMoreActivity"-->
<!-- android:screenOrientation="portrait"-->
<!-- android:theme="@style/NormalSplash">-->
<!-- -->
<!-- </activity>-->
<activity
android:name=".ui.activitys.MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoneTranslucent" />
android:theme="@style/AppTheme.NoneTranslucent">
</activity>
<activity android:name=".ui.activitys.WebActivity" />
<activity
android:name="com.mints.library.base.BaseWebActivity"
......@@ -171,7 +169,13 @@
android:theme="@style/AppTheme.NoActionBarTranslucent" />
<activity
android:name=".ui.activitys.SettingsActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.activitys.AboutusActivity"
android:screenOrientation="portrait" />
......@@ -210,7 +214,10 @@
android:screenOrientation="portrait" />
<activity
android:name=".ui.activitys.SplashCsjADActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:theme="@style/NormalSplash">
</activity>
<activity
android:name=".ui.activitys.MorningClockActivity"
android:screenOrientation="portrait" />
......
......@@ -12,8 +12,6 @@ import androidx.multidex.MultiDexApplication;
import com.hjq.toast.ToastUtils;
import com.mints.goodmoney.common.Constant;
import com.mints.goodmoney.manager.CsjAppLogManager;
import com.mints.goodmoney.manager.CsjGroMoreManager;
import com.mints.goodmoney.manager.KsManager;
import com.mints.goodmoney.manager.LiebaoManager;
import com.mints.goodmoney.manager.MhManager;
......@@ -127,43 +125,37 @@ public class MintsApplication extends MultiDexApplication {
YlhAdManager.INSTANCE.initYlhAd(this);
// 穿山甲
TtCsjAdManager.init(this);
// GroMore
CsjGroMoreManager.INSTANCE.init(this);
// AppLog
CsjAppLogManager.INSTANCE.init(this);
// TtCsjAdManager.init(this);
// 快手
KsManager.INSTANCE.initKs(this);
// KsManager.INSTANCE.initKs(this);
// 闪电盒子
WnManager.INSTANCE.initWn(this);
// WnManager.INSTANCE.initWn(this);
// 枫岚广告
MhManager.INSTANCE.initMn(this);
// MhManager.INSTANCE.initMn(this);
// OneWay
OwManager.INSTANCE.init(this);
// OwManager.INSTANCE.init(this);
// 天卓珊瑚[INSTANCE是设置单例模式]
TzManager.INSTANCE.initTz(this);
// TzManager.INSTANCE.initTz(this);
//小满
XmManager.INSTANCE.initXm(this);
// XmManager.INSTANCE.initXm(this);
// 一览视频
YlVideoManager.INSTANCE.init(this);
// 猎豹游戏初始化
LiebaoManager.getInstance().initCmGameSdk();
// LiebaoManager.getInstance().initCmGameSdk();
// 瑞狮新闻
RsNewsManager.INSTANCE.init(this);
// RsNewsManager.INSTANCE.init(this);
// 喜马拉雅
initXmly();
// initXmly();
// 自定义logger
bindLogger();
......
package com.mints.goodmoney.ad.express
import android.os.Handler
import android.os.HandlerThread
import android.view.Gravity
import android.widget.FrameLayout
import com.bytedance.msdk.api.*
import com.bytedance.msdk.api.nativeAd.*
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.manager.CsjGroMoreManager
import com.mints.goodmoney.ui.widgets.seekbar.BubbleUtils
import com.mints.goodmoney.utils.LogUtil
import com.mints.goodmoney.utils.UIUtils
import com.mints.goodmoney.utils.VideoOptionUtil
private val TAG = GroMoreCarrierExpressManager::class.java.simpleName
class GroMoreCarrierExpressManager : TTSettingConfigCallback {
companion object {
val instance: GroMoreCarrierExpressManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
GroMoreCarrierExpressManager()
}
}
private var mAdStyle = 0
private var mExpressType = 0
private val frameLayout: FrameLayout? = null
private var mHandlerThread: HandlerThread? = null
private var mWorkHandler: Handler? = null
private var mTTAdNative: TTUnifiedNativeAd? = null
init {
mAdStyle = AdSlot.TYPE_EXPRESS_AD
}
fun loadADFrameLayout() {
// 销毁及移除事件
destroy()
frameLayout?.removeAllViews()
if (TTMediationAdSdk.configLoadSuccess()) {
loadAd()
} else {
TTMediationAdSdk.registerConfigCallback(this)
}
}
/**
* config成功,加载信息流
*/
override fun configLoad() {
loadAd()
}
private fun loadAd() {
mTTAdNative = TTUnifiedNativeAd(MintsApplication.getContext(), CsjGroMoreManager.AD_UNIT_ID)
//视频声音控制设置
var videoOption: TTVideoOption = VideoOptionUtil.getTTVideoOption()
//判断是否需要使用GDT Feed 模板渲染2.0;注意!!!!需要向广点通商务申请模渲染2.0权限
// 注意不设置默认使用 GDT Feed 模板渲染1.0,默认情况下无需执行下方代码
if (mAdStyle == AdSlot.TYPE_EXPRESS_AD && mExpressType == GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2) {
videoOption = VideoOptionUtil.getTTVideoOption2()
}
//针对Admob Native的特殊配置项
val admobNativeAdOptions = AdmobNativeAdOptions()
admobNativeAdOptions.setAdChoicesPlacement(AdmobNativeAdOptions.ADCHOICES_TOP_RIGHT) //设置广告小标默认情况下,广告选择叠加层会显示在右上角。
.setRequestMultipleImages(true).isReturnUrlsForImageAssets = true //设置为true,SDK会仅提供Uri字段的值,允许自行决定是否下载实际图片,同时不会提供Drawable字段的值
// 针对Gdt Native自渲染广告,可以自定义gdt logo的布局参数。该参数可选,非必须。
val gdtNativeAdLogUtiloParams = FrameLayout.LayoutParams(
BubbleUtils.dp2px(40),
BubbleUtils.dp2px(14),
Gravity.END or Gravity.TOP) // 例如,放在右上角
/**
* 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
* 备注
* 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
* 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
*/
/**
* 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
* 备注
* 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
* 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
*/
val adSlot = AdSlot.Builder()
.setTTVideoOption(videoOption) //视频声音相关的配置
.setAdmobNativeAdOptions(admobNativeAdOptions)
.setAdStyleType(mAdStyle) //必传,表示请求的模板广告还是原生广告,AdSlot.TYPE_EXPRESS_AD:模板广告 ; AdSlot.TYPE_NATIVE_AD:原生广告
.setImageAdSize(UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt(), 320) // 必选参数 单位dp ,详情见上面备注解释
.setAdCount(1) //请求广告数量为1到3条
.setGdtNativeAdLogoParams(gdtNativeAdLogUtiloParams) // 设置gdt logo布局参数。
.build()
//请求广告,调用feed广告异步请求接口,加载到广告后,拿到广告素材自定义渲染
/**
* 注:每次加载信息流广告的时候需要新建一个TTUnifiedNativeAd,否则可能会出现广告填充问题
* (例如:mTTAdNative = new TTUnifiedNativeAd(this, mAdUnitId);)
*/
mTTAdNative?.loadAd(adSlot, object : TTNativeAdLoadCallback {
override fun onAdLoadedFial(adError: AdError?) {
LogUtil.e(TAG, "load feed ad error : " + adError?.code + ", " + adError?.message)
}
override fun onAdLoaded(ads: MutableList<TTNativeAd>?) {
if (ads == null || ads.isEmpty()) {
LogUtil.e(TAG, "on FeedAdLoaded: ad is null!")
return
}
for (ttNativeAd in ads) {
LogUtil.e(TAG, " ")
LogUtil.e(TAG, "adNetworkPlatformId: " + ttNativeAd.adNetworkPlatformId + " adNetworkRitId:" + ttNativeAd.adNetworkRitId + " preEcpm: " + ttNativeAd.preEcpm)
}
if (ads.size > 0) {
frameLayout?.addView(ads[0].expressView)
}
}
})
}
fun getADFrameLayout(): FrameLayout? {
return frameLayout
}
/**
* 销毁
*/
private fun destroy() {
mHandlerThread?.quit()
mHandlerThread = null
mWorkHandler?.removeCallbacksAndMessages(null)
mWorkHandler = null
}
//渲染模板广告
// private fun getExpressAdView(ad: TTNativeAd): View? {
// val adViewHolder: GroMoreExpressManager.ExpressAdViewHolder
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_native_express, null, false)
// try {
// adViewHolder = GroMoreExpressManager.ExpressAdViewHolder()
// adViewHolder.mAdContainerView = convertView.findViewById(R.id.iv_listitem_express) as FrameLayout
// convertView.tag = adViewHolder
//package com.mints.goodmoney.ad.express
//
// //判断是否存在dislike按钮
//// if (ad.hasDislike()) {
//// ad.setDislikeCallback(MintsApplication.getContext() as Activity?, object : TTDislikeCallback {
//// override fun onSelected(position: Int, value: String) {
//// ToastUtil.show(MintsApplication.getContext(), "点击 $value")
//// //用户选择不喜欢原因后,移除广告展示
//// }
////
//// override fun onCancel() {
//// ToastUtil.show(MintsApplication.getContext(), "dislike 点击了取消")
//// LogUtil.d(TAG, "dislike 点击了取消")
//// }
////
//// /**
//// * 拒绝再次提交
//// */
//// override fun onRefuse() {}
//// override fun onShow() {}
//// })
//// }
//import android.os.Handler
//import android.os.HandlerThread
//import android.view.Gravity
//import android.widget.FrameLayout
//import com.bytedance.msdk.api.*
//import com.bytedance.msdk.api.nativeAd.*
//import com.mints.goodmoney.MintsApplication
//import com.mints.goodmoney.manager.CsjGroMoreManager
//import com.mints.goodmoney.ui.widgets.seekbar.BubbleUtils
//import com.mints.goodmoney.utils.LogUtil
//import com.mints.goodmoney.utils.UIUtils
//import com.mints.goodmoney.utils.VideoOptionUtil
//
// //设置点击展示回调监听
// ad.setTTNativeAdListener(object : TTNativeExpressAdListener {
// override fun onAdClick() {
// LogUtil.d(TAG, "onAdClick")
// ToastUtil.show(MintsApplication.getContext(), "模板广告被点击")
// }
//private val TAG = GroMoreCarrierExpressManager::class.java.simpleName
//
//class GroMoreCarrierExpressManager : TTSettingConfigCallback {
//
// override fun onAdShow() {
// LogUtil.d(TAG, "onAdShow")
// ToastUtil.show(MintsApplication.getContext(), "模板广告show")
// companion object {
// val instance: GroMoreCarrierExpressManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
// GroMoreCarrierExpressManager()
// }
// }
//
// private var mAdStyle = 0
// private var mExpressType = 0
//
// private val frameLayout: FrameLayout? = null
//
// private var mHandlerThread: HandlerThread? = null
// private var mWorkHandler: Handler? = null
//
// override fun onRenderFail(view: View, msg: String, code: Int) {
// ToastUtil.show(MintsApplication.getContext(), "模板广告渲染失败code=$code,msg=$msg")
// LogUtil.d(TAG, "onRenderFail code=$code,msg=$msg")
// private var mTTAdNative: TTUnifiedNativeAd? = null
//
// init {
// mAdStyle = AdSlot.TYPE_EXPRESS_AD
// }
//
// // ** 注意点 ** 不要在广告加载成功回调里进行广告view展示,要在onRenderSucces进行广告view展示,否则会导致广告无法展示。
// // 另外,不要直接使用参数view,而是通过ad.getExpressView()来获取广告view。
// override fun onRenderSuccess(view: View, width: Float, height: Float) {
// LogUtil.d(TAG, "onRenderSuccess")
// ToastUtil.show(MintsApplication.getContext(), "模板广告渲染成功:width=$width,height=$height")
// //回调渲染成功后将模板布局添加的父View中
// if (adViewHolder.mAdContainerView != null) {
// //获取视频播放view,该view SDK内部渲染,在媒体平台可配置视频是否自动播放等设置。
// val sWidth: Int
// val sHeight: Int
// val video = ad.expressView // 使用该方式获取广告view,而不是直接使用onRenderSuccess的参数view。
// if (width == TTAdSize.FULL_WIDTH.toFloat() && height == TTAdSize.AUTO_HEIGHT.toFloat()) {
// sWidth = FrameLayout.LayoutParams.MATCH_PARENT
// sHeight = FrameLayout.LayoutParams.WRAP_CONTENT
// fun loadADFrameLayout() {
// // 销毁及移除事件
// destroy()
// frameLayout?.removeAllViews()
//
// if (TTMediationAdSdk.configLoadSuccess()) {
// loadAd()
// } else {
// sWidth = UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt()
// sHeight = (sWidth * height / width).toInt()
// }
// if (video != null) {
// if (video.parent == null) {
// val layoutParams = FrameLayout.LayoutParams(sWidth, sHeight)
// adViewHolder.mAdContainerView!!.removeAllViews()
// adViewHolder.mAdContainerView!!.addView(video, layoutParams)
// }
// TTMediationAdSdk.registerConfigCallback(this)
// }
// }
//
// /**
// * config成功,加载信息流
// */
// override fun configLoad() {
// loadAd()
// }
// })
//
// private fun loadAd() {
// mTTAdNative = TTUnifiedNativeAd(MintsApplication.getContext(), CsjGroMoreManager.AD_UNIT_ID)
//
// //视频声音控制设置
// var videoOption: TTVideoOption = VideoOptionUtil.getTTVideoOption()
//
// //视频广告设置播放状态回调(可选)
// ad.setTTVideoListener(object : TTVideoListener {
// override fun onVideoStart() {
// ToastUtil.show(MintsApplication.getContext(), "模板广告视频开始播放")
// LogUtil.d(TAG, "onVideoStart")
// //判断是否需要使用GDT Feed 模板渲染2.0;注意!!!!需要向广点通商务申请模渲染2.0权限
// // 注意不设置默认使用 GDT Feed 模板渲染1.0,默认情况下无需执行下方代码
// if (mAdStyle == AdSlot.TYPE_EXPRESS_AD && mExpressType == GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2) {
// videoOption = VideoOptionUtil.getTTVideoOption2()
// }
//
// override fun onVideoPause() {
// ToastUtil.show(MintsApplication.getContext(), "模板广告视频暂停")
// LogUtil.d(TAG, "onVideoPause")
// //针对Admob Native的特殊配置项
// val admobNativeAdOptions = AdmobNativeAdOptions()
// admobNativeAdOptions.setAdChoicesPlacement(AdmobNativeAdOptions.ADCHOICES_TOP_RIGHT) //设置广告小标默认情况下,广告选择叠加层会显示在右上角。
// .setRequestMultipleImages(true).isReturnUrlsForImageAssets = true //设置为true,SDK会仅提供Uri字段的值,允许自行决定是否下载实际图片,同时不会提供Drawable字段的值
//
//
// // 针对Gdt Native自渲染广告,可以自定义gdt logo的布局参数。该参数可选,非必须。
// val gdtNativeAdLogUtiloParams = FrameLayout.LayoutParams(
// BubbleUtils.dp2px(40),
// BubbleUtils.dp2px(14),
// Gravity.END or Gravity.TOP) // 例如,放在右上角
//
// /**
// * 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
// * 备注
// * 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
// * 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
// */
// /**
// * 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
// * 备注
// * 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
// * 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
// */
// val adSlot = AdSlot.Builder()
// .setTTVideoOption(videoOption) //视频声音相关的配置
// .setAdmobNativeAdOptions(admobNativeAdOptions)
// .setAdStyleType(mAdStyle) //必传,表示请求的模板广告还是原生广告,AdSlot.TYPE_EXPRESS_AD:模板广告 ; AdSlot.TYPE_NATIVE_AD:原生广告
// .setImageAdSize(UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt(), 320) // 必选参数 单位dp ,详情见上面备注解释
// .setAdCount(1) //请求广告数量为1到3条
// .setGdtNativeAdLogoParams(gdtNativeAdLogUtiloParams) // 设置gdt logo布局参数。
// .build()
//
// //请求广告,调用feed广告异步请求接口,加载到广告后,拿到广告素材自定义渲染
// /**
// * 注:每次加载信息流广告的时候需要新建一个TTUnifiedNativeAd,否则可能会出现广告填充问题
// * (例如:mTTAdNative = new TTUnifiedNativeAd(this, mAdUnitId);)
// */
// mTTAdNative?.loadAd(adSlot, object : TTNativeAdLoadCallback {
// override fun onAdLoadedFial(adError: AdError?) {
// LogUtil.e(TAG, "load feed ad error : " + adError?.code + ", " + adError?.message)
//
// }
//
// override fun onVideoResume() {
// ToastUtil.show(MintsApplication.getContext(), "模板广告视频继续播放")
// LogUtil.d(TAG, "onVideoResume")
// override fun onAdLoaded(ads: MutableList<TTNativeAd>?) {
// if (ads == null || ads.isEmpty()) {
// LogUtil.e(TAG, "on FeedAdLoaded: ad is null!")
// return
// }
//
// override fun onVideoCompleted() {
// ToastUtil.show(MintsApplication.getContext(), "模板播放完成")
// LogUtil.d(TAG, "onVideoCompleted")
// for (ttNativeAd in ads) {
// LogUtil.e(TAG, " ")
// LogUtil.e(TAG, "adNetworkPlatformId: " + ttNativeAd.adNetworkPlatformId + " adNetworkRitId:" + ttNativeAd.adNetworkRitId + " preEcpm: " + ttNativeAd.preEcpm)
// }
//
// override fun onVideoError(adError: AdError) {
// ToastUtil.show(MintsApplication.getContext(), "模板广告视频播放出错")
// LogUtil.d(TAG, "onVideoError")
// if (ads.size > 0) {
// frameLayout?.addView(ads[0].expressView)
// }
// }
//
// })
// ad.render()
// } catch (e: Exception) {
// e.printStackTrace()
// }
// return convertView
//
// fun getADFrameLayout(): FrameLayout? {
// return frameLayout
// }
}
\ No newline at end of file
//
// /**
// * 销毁
// */
// private fun destroy() {
// mHandlerThread?.quit()
// mHandlerThread = null
// mWorkHandler?.removeCallbacksAndMessages(null)
// mWorkHandler = null
// }
//
// //渲染模板广告
//// private fun getExpressAdView(ad: TTNativeAd): View? {
//// val adViewHolder: GroMoreExpressManager.ExpressAdViewHolder
//// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_native_express, null, false)
//// try {
//// adViewHolder = GroMoreExpressManager.ExpressAdViewHolder()
//// adViewHolder.mAdContainerView = convertView.findViewById(R.id.iv_listitem_express) as FrameLayout
//// convertView.tag = adViewHolder
////
//// //判断是否存在dislike按钮
////// if (ad.hasDislike()) {
////// ad.setDislikeCallback(MintsApplication.getContext() as Activity?, object : TTDislikeCallback {
////// override fun onSelected(position: Int, value: String) {
////// ToastUtil.show(MintsApplication.getContext(), "点击 $value")
////// //用户选择不喜欢原因后,移除广告展示
////// }
//////
////// override fun onCancel() {
////// ToastUtil.show(MintsApplication.getContext(), "dislike 点击了取消")
////// LogUtil.d(TAG, "dislike 点击了取消")
////// }
//////
////// /**
////// * 拒绝再次提交
////// */
////// override fun onRefuse() {}
////// override fun onShow() {}
////// })
////// }
////
//// //设置点击展示回调监听
//// ad.setTTNativeAdListener(object : TTNativeExpressAdListener {
//// override fun onAdClick() {
//// LogUtil.d(TAG, "onAdClick")
//// ToastUtil.show(MintsApplication.getContext(), "模板广告被点击")
//// }
////
//// override fun onAdShow() {
//// LogUtil.d(TAG, "onAdShow")
//// ToastUtil.show(MintsApplication.getContext(), "模板广告show")
//// }
////
//// override fun onRenderFail(view: View, msg: String, code: Int) {
//// ToastUtil.show(MintsApplication.getContext(), "模板广告渲染失败code=$code,msg=$msg")
//// LogUtil.d(TAG, "onRenderFail code=$code,msg=$msg")
//// }
////
//// // ** 注意点 ** 不要在广告加载成功回调里进行广告view展示,要在onRenderSucces进行广告view展示,否则会导致广告无法展示。
//// // 另外,不要直接使用参数view,而是通过ad.getExpressView()来获取广告view。
//// override fun onRenderSuccess(view: View, width: Float, height: Float) {
//// LogUtil.d(TAG, "onRenderSuccess")
//// ToastUtil.show(MintsApplication.getContext(), "模板广告渲染成功:width=$width,height=$height")
//// //回调渲染成功后将模板布局添加的父View中
//// if (adViewHolder.mAdContainerView != null) {
//// //获取视频播放view,该view SDK内部渲染,在媒体平台可配置视频是否自动播放等设置。
//// val sWidth: Int
//// val sHeight: Int
//// val video = ad.expressView // 使用该方式获取广告view,而不是直接使用onRenderSuccess的参数view。
//// if (width == TTAdSize.FULL_WIDTH.toFloat() && height == TTAdSize.AUTO_HEIGHT.toFloat()) {
//// sWidth = FrameLayout.LayoutParams.MATCH_PARENT
//// sHeight = FrameLayout.LayoutParams.WRAP_CONTENT
//// } else {
//// sWidth = UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt()
//// sHeight = (sWidth * height / width).toInt()
//// }
//// if (video != null) {
//// if (video.parent == null) {
//// val layoutParams = FrameLayout.LayoutParams(sWidth, sHeight)
//// adViewHolder.mAdContainerView!!.removeAllViews()
//// adViewHolder.mAdContainerView!!.addView(video, layoutParams)
//// }
//// }
//// }
//// }
//// })
////
////
//// //视频广告设置播放状态回调(可选)
//// ad.setTTVideoListener(object : TTVideoListener {
//// override fun onVideoStart() {
//// ToastUtil.show(MintsApplication.getContext(), "模板广告视频开始播放")
//// LogUtil.d(TAG, "onVideoStart")
//// }
////
//// override fun onVideoPause() {
//// ToastUtil.show(MintsApplication.getContext(), "模板广告视频暂停")
//// LogUtil.d(TAG, "onVideoPause")
//// }
////
//// override fun onVideoResume() {
//// ToastUtil.show(MintsApplication.getContext(), "模板广告视频继续播放")
//// LogUtil.d(TAG, "onVideoResume")
//// }
////
//// override fun onVideoCompleted() {
//// ToastUtil.show(MintsApplication.getContext(), "模板播放完成")
//// LogUtil.d(TAG, "onVideoCompleted")
//// }
////
//// override fun onVideoError(adError: AdError) {
//// ToastUtil.show(MintsApplication.getContext(), "模板广告视频播放出错")
//// LogUtil.d(TAG, "onVideoError")
//// }
//// })
//// ad.render()
//// } catch (e: Exception) {
//// e.printStackTrace()
//// }
//// return convertView
//// }
//
//}
\ No newline at end of file
package com.mints.goodmoney.ad.express
import android.text.TextUtils
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import com.bumptech.glide.Glide
import com.bytedance.msdk.api.*
import com.bytedance.msdk.api.nativeAd.*
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.CsjGroMoreManager
import com.mints.goodmoney.manager.TrackManager
import com.mints.goodmoney.ui.widgets.seekbar.BubbleUtils
import com.mints.goodmoney.utils.LogUtil
import com.mints.goodmoney.utils.UIUtils
import com.mints.goodmoney.utils.VideoOptionUtil
import java.util.*
private val TAG = GroMoreExpressManager::class.java.simpleName
class GroMoreExpressManager : TTSettingConfigCallback {
companion object {
val instance: GroMoreExpressManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
GroMoreExpressManager()
}
}
private var mADLoadSuccessListener: GMADLoadSuccessListener? = null
fun setListener(adLoadSuccessListener: GMADLoadSuccessListener?) {
mADLoadSuccessListener = adLoadSuccessListener
}
@Volatile
private var sAdFrameLayout: FrameLayout = FrameLayout(MintsApplication.getContext())
private var mTTAdNative: TTUnifiedNativeAd? = null
private var mAdStyle = 0
private var mExpressType = 0
init {
mAdStyle = AdSlot.TYPE_EXPRESS_AD
}
fun loadADFrameLayout() {
// 销毁及移除事件
destroy()
sAdFrameLayout.removeAllViews()
if (TTMediationAdSdk.configLoadSuccess()) {
loadAd()
} else {
TTMediationAdSdk.registerConfigCallback(this)
}
}
private fun loadAd() {
mTTAdNative = TTUnifiedNativeAd(MintsApplication.getContext(), CsjGroMoreManager.AD_UNIT_ID)
//视频声音控制设置
var videoOption: TTVideoOption = VideoOptionUtil.getTTVideoOption()
//判断是否需要使用GDT Feed 模板渲染2.0;注意!!!!需要向广点通商务申请模渲染2.0权限
// 注意不设置默认使用 GDT Feed 模板渲染1.0,默认情况下无需执行下方代码
if (mAdStyle == AdSlot.TYPE_EXPRESS_AD && mExpressType == GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2) {
videoOption = VideoOptionUtil.getTTVideoOption2()
}
//针对Admob Native的特殊配置项
val admobNativeAdOptions = AdmobNativeAdOptions()
admobNativeAdOptions.setAdChoicesPlacement(AdmobNativeAdOptions.ADCHOICES_TOP_RIGHT) //设置广告小标默认情况下,广告选择叠加层会显示在右上角。
.setRequestMultipleImages(true).isReturnUrlsForImageAssets = true //设置为true,SDK会仅提供Uri字段的值,允许自行决定是否下载实际图片,同时不会提供Drawable字段的值
// 针对Gdt Native自渲染广告,可以自定义gdt logo的布局参数。该参数可选,非必须。
val gdtNativeAdLogUtiloParams = FrameLayout.LayoutParams(
BubbleUtils.dp2px(40),
BubbleUtils.dp2px(14),
Gravity.END or Gravity.TOP) // 例如,放在右上角
/**
* 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
* 备注
* 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
* 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
*/
/**
* 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
* 备注
* 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
* 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
*/
val adSlot = AdSlot.Builder()
.setTTVideoOption(videoOption) //视频声音相关的配置
.setAdmobNativeAdOptions(admobNativeAdOptions)
.setAdStyleType(mAdStyle) //必传,表示请求的模板广告还是原生广告,AdSlot.TYPE_EXPRESS_AD:模板广告 ; AdSlot.TYPE_NATIVE_AD:原生广告
.setImageAdSize(UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt(), 320) // 必选参数 单位dp ,详情见上面备注解释
.setAdCount(1) //请求广告数量为1到3条
.setGdtNativeAdLogoParams(gdtNativeAdLogUtiloParams) // 设置gdt logo布局参数。
.build()
//请求广告,调用feed广告异步请求接口,加载到广告后,拿到广告素材自定义渲染
/**
* 注:每次加载信息流广告的时候需要新建一个TTUnifiedNativeAd,否则可能会出现广告填充问题
* (例如:mTTAdNative = new TTUnifiedNativeAd(this, mAdUnitId);)
*/
mTTAdNative?.loadAd(adSlot, object : TTNativeAdLoadCallback {
override fun onAdLoadedFial(adError: AdError?) {
LogUtil.e(TAG, "load feed ad error : " + adError?.code + ", " + adError?.message)
}
override fun onAdLoaded(ads: MutableList<TTNativeAd>?) {
if (ads == null || ads.isEmpty()) {
LogUtil.e(TAG, "on FeedAdLoaded: ad is null!")
return
}
for (ttNativeAd in ads) {
LogUtil.e(TAG, " ")
LogUtil.e(TAG, "adNetworkPlatformId: " + ttNativeAd.adNetworkPlatformId + " adNetworkRitId:" + ttNativeAd.adNetworkRitId + " preEcpm: " + ttNativeAd.preEcpm)
}
if (ads.size > 0) {
mADLoadSuccessListener?.onGMAdLoadSuc(ads[0])
val ttNativeAd = ads[0]
val vo = HashMap<String, Any>()
vo["adcode"] = ttNativeAd.getAdNetworkRitId()
vo["ecpm"] = ttNativeAd.getPreEcpm()
vo["adSource"] = ttNativeAd.getAdNetworkPlatformId()
vo["adType"] = Constant.GRO_MORE_ADTYPE1
TrackManager.getInstance().cmtGroMoreInfo(vo)
// sAdFrameLayout.addView(createAdView(ads[0]))
}
}
})
}
fun getADFrameLayout(): FrameLayout? {
return sAdFrameLayout
}
/**
* config成功,加载信息流
*/
override fun configLoad() {
loadAd()
}
private fun createAdView(ad: TTNativeAd?): View? {
if (ad != null && ad.isExpressAd) {
return getExpressAdView(ad)
}
return when {
ad == null -> {
return null
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_SMALL_IMG -> {
return getSmallAdView(ad)
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_LARGE_IMG -> {
return getLargeAdView(ad)
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_GROUP_IMG -> {
return getGroupAdView(ad)
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_VIDEO -> {
return getVideoView(ad)
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_VERTICAL_IMG -> {
return getVerticalAdView(ad)
}
ad.adImageMode == TTAdConstant.IMAGE_MODE_VIDEO_VERTICAL -> {
return getVideoView(ad)
}
else -> {
return null
}
}
}
/**
* 销毁
*/
private fun destroy() {
TTMediationAdSdk.unregisterConfigCallback(this)
}
//渲染模板广告
private fun getExpressAdView(ad: TTNativeAd): View? {
val adViewHolder: ExpressAdViewHolder
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_native_express, null, false)
try {
adViewHolder = ExpressAdViewHolder()
adViewHolder.mAdContainerView = convertView.findViewById(R.id.iv_listitem_express) as FrameLayout
convertView.tag = adViewHolder
//判断是否存在dislike按钮
// if (ad.hasDislike()) {
// ad.setDislikeCallback(MintsApplication.getContext() as Activity?, object : TTDislikeCallback {
// override fun onSelected(position: Int, value: String) {
// //用户选择不喜欢原因后,移除广告展示
// }
//
// override fun onCancel() {
// LogUtil.d(TAG, "dislike 点击了取消")
//package com.mints.goodmoney.ad.express
//
//import android.text.TextUtils
//import android.view.Gravity
//import android.view.LayoutInflater
//import android.view.View
//import android.view.ViewGroup
//import android.widget.*
//import com.bumptech.glide.Glide
//import com.bytedance.msdk.api.*
//import com.bytedance.msdk.api.nativeAd.*
//import com.mints.goodmoney.MintsApplication
//import com.mints.goodmoney.R
//import com.mints.goodmoney.common.Constant
//import com.mints.goodmoney.manager.CsjGroMoreManager
//import com.mints.goodmoney.manager.TrackManager
//import com.mints.goodmoney.ui.widgets.seekbar.BubbleUtils
//import com.mints.goodmoney.utils.LogUtil
//import com.mints.goodmoney.utils.UIUtils
//import com.mints.goodmoney.utils.VideoOptionUtil
//import java.util.*
//
//private val TAG = GroMoreExpressManager::class.java.simpleName
//
//class GroMoreExpressManager : TTSettingConfigCallback {
//
// companion object {
// val instance: GroMoreExpressManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
// GroMoreExpressManager()
// }
// }
//
// private var mADLoadSuccessListener: GMADLoadSuccessListener? = null
//
// fun setListener(adLoadSuccessListener: GMADLoadSuccessListener?) {
// mADLoadSuccessListener = adLoadSuccessListener
// }
//
// @Volatile
// private var sAdFrameLayout: FrameLayout = FrameLayout(MintsApplication.getContext())
//
// private var mTTAdNative: TTUnifiedNativeAd? = null
//
// private var mAdStyle = 0
// private var mExpressType = 0
//
// init {
// mAdStyle = AdSlot.TYPE_EXPRESS_AD
// }
//
// fun loadADFrameLayout() {
// // 销毁及移除事件
// destroy()
// sAdFrameLayout.removeAllViews()
//
// if (TTMediationAdSdk.configLoadSuccess()) {
// loadAd()
// } else {
// TTMediationAdSdk.registerConfigCallback(this)
// }
//
// }
//
// private fun loadAd() {
// mTTAdNative = TTUnifiedNativeAd(MintsApplication.getContext(), CsjGroMoreManager.AD_UNIT_ID)
//
// //视频声音控制设置
// var videoOption: TTVideoOption = VideoOptionUtil.getTTVideoOption()
//
// //判断是否需要使用GDT Feed 模板渲染2.0;注意!!!!需要向广点通商务申请模渲染2.0权限
// // 注意不设置默认使用 GDT Feed 模板渲染1.0,默认情况下无需执行下方代码
// if (mAdStyle == AdSlot.TYPE_EXPRESS_AD && mExpressType == GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2) {
// videoOption = VideoOptionUtil.getTTVideoOption2()
// }
//
// //针对Admob Native的特殊配置项
// val admobNativeAdOptions = AdmobNativeAdOptions()
// admobNativeAdOptions.setAdChoicesPlacement(AdmobNativeAdOptions.ADCHOICES_TOP_RIGHT) //设置广告小标默认情况下,广告选择叠加层会显示在右上角。
// .setRequestMultipleImages(true).isReturnUrlsForImageAssets = true //设置为true,SDK会仅提供Uri字段的值,允许自行决定是否下载实际图片,同时不会提供Drawable字段的值
//
//
// // 针对Gdt Native自渲染广告,可以自定义gdt logo的布局参数。该参数可选,非必须。
// val gdtNativeAdLogUtiloParams = FrameLayout.LayoutParams(
// BubbleUtils.dp2px(40),
// BubbleUtils.dp2px(14),
// Gravity.END or Gravity.TOP) // 例如,放在右上角
//
// /**
// * 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
// * 备注
// * 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
// * 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
// */
// /**
// * 拒绝再次提交
// * 创建feed广告请求类型参数AdSlot,具体参数含义参考文档
// * 备注
// * 1: 如果是信息流自渲染广告,设置广告图片期望的图片宽高 ,不能为0
// * 2:如果是信息流模板广告,宽度设置为希望的宽度,高度设置为0(0为高度选择自适应参数)
// */
// override fun onRefuse() {}
// override fun onShow() {}
// val adSlot = AdSlot.Builder()
// .setTTVideoOption(videoOption) //视频声音相关的配置
// .setAdmobNativeAdOptions(admobNativeAdOptions)
// .setAdStyleType(mAdStyle) //必传,表示请求的模板广告还是原生广告,AdSlot.TYPE_EXPRESS_AD:模板广告 ; AdSlot.TYPE_NATIVE_AD:原生广告
// .setImageAdSize(UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt(), 320) // 必选参数 单位dp ,详情见上面备注解释
// .setAdCount(1) //请求广告数量为1到3条
// .setGdtNativeAdLogoParams(gdtNativeAdLogUtiloParams) // 设置gdt logo布局参数。
// .build()
//
// //请求广告,调用feed广告异步请求接口,加载到广告后,拿到广告素材自定义渲染
// /**
// * 注:每次加载信息流广告的时候需要新建一个TTUnifiedNativeAd,否则可能会出现广告填充问题
// * (例如:mTTAdNative = new TTUnifiedNativeAd(this, mAdUnitId);)
// */
// mTTAdNative?.loadAd(adSlot, object : TTNativeAdLoadCallback {
// override fun onAdLoadedFial(adError: AdError?) {
// LogUtil.e(TAG, "load feed ad error : " + adError?.code + ", " + adError?.message)
//
// }
//
// override fun onAdLoaded(ads: MutableList<TTNativeAd>?) {
// if (ads == null || ads.isEmpty()) {
// LogUtil.e(TAG, "on FeedAdLoaded: ad is null!")
// return
// }
//
// for (ttNativeAd in ads) {
// LogUtil.e(TAG, " ")
// LogUtil.e(TAG, "adNetworkPlatformId: " + ttNativeAd.adNetworkPlatformId + " adNetworkRitId:" + ttNativeAd.adNetworkRitId + " preEcpm: " + ttNativeAd.preEcpm)
// }
//
// if (ads.size > 0) {
// mADLoadSuccessListener?.onGMAdLoadSuc(ads[0])
// val ttNativeAd = ads[0]
// val vo = HashMap<String, Any>()
// vo["adcode"] = ttNativeAd.getAdNetworkRitId()
// vo["ecpm"] = ttNativeAd.getPreEcpm()
// vo["adSource"] = ttNativeAd.getAdNetworkPlatformId()
// vo["adType"] = Constant.GRO_MORE_ADTYPE1
// TrackManager.getInstance().cmtGroMoreInfo(vo)
//// sAdFrameLayout.addView(createAdView(ads[0]))
// }
// }
//
// })
// }
//设置点击展示回调监听
ad.setTTNativeAdListener(object : TTNativeExpressAdListener {
override fun onAdClick() {
LogUtil.d(TAG, "onAdClick")
}
override fun onAdShow() {
LogUtil.d(TAG, "onAdShow")
}
override fun onRenderFail(view: View, msg: String, code: Int) {
LogUtil.d(TAG, "onRenderFail code=$code,msg=$msg")
}
// ** 注意点 ** 不要在广告加载成功回调里进行广告view展示,要在onRenderSucces进行广告view展示,否则会导致广告无法展示。
// 另外,不要直接使用参数view,而是通过ad.getExpressView()来获取广告view。
override fun onRenderSuccess(view: View, width: Float, height: Float) {
LogUtil.d(TAG, "onRenderSuccess")
//回调渲染成功后将模板布局添加的父View中
if (adViewHolder.mAdContainerView != null) {
//获取视频播放view,该view SDK内部渲染,在媒体平台可配置视频是否自动播放等设置。
val sWidth: Int
val sHeight: Int
val video = ad.expressView // 使用该方式获取广告view,而不是直接使用onRenderSuccess的参数view。
if (width == TTAdSize.FULL_WIDTH.toFloat() && height == TTAdSize.AUTO_HEIGHT.toFloat()) {
sWidth = FrameLayout.LayoutParams.MATCH_PARENT
sHeight = FrameLayout.LayoutParams.WRAP_CONTENT
} else {
sWidth = UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt()
sHeight = (sWidth * height / width).toInt()
}
if (video != null) {
if (video.parent == null) {
val layoutParams = FrameLayout.LayoutParams(sWidth, sHeight)
adViewHolder.mAdContainerView!!.removeAllViews()
adViewHolder.mAdContainerView!!.addView(video, layoutParams)
}
}
}
}
})
//视频广告设置播放状态回调(可选)
ad.setTTVideoListener(object : TTVideoListener {
override fun onVideoStart() {
LogUtil.d(TAG, "onVideoStart")
}
override fun onVideoPause() {
LogUtil.d(TAG, "onVideoPause")
}
override fun onVideoResume() {
LogUtil.d(TAG, "onVideoResume")
}
override fun onVideoCompleted() {
LogUtil.d(TAG, "onVideoCompleted")
}
override fun onVideoError(adError: AdError) {
LogUtil.d(TAG, "onVideoError")
}
})
ad.render()
} catch (e: Exception) {
e.printStackTrace()
}
return convertView
}
/**
* @param ad
* @return
*/
private fun getVerticalAdView(ad: TTNativeAd): View? {
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_vertical_pic, null, false)
val adViewHolder = VerticalAdViewHolder()
adViewHolder.mTitle = convertView!!.findViewById(R.id.tv_listitem_ad_title) as TextView
adViewHolder.mSource = convertView.findViewById(R.id.tv_listitem_ad_source) as TextView
adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
adViewHolder.mVerticalImage = convertView.findViewById(R.id.iv_listitem_image)
adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_vertical_pic)
.titleId(R.id.tv_listitem_ad_title)
.decriptionTextId(R.id.tv_listitem_ad_desc)
.mainImageId(R.id.iv_listitem_image)
.iconImageId(R.id.iv_listitem_icon)
.callToActionId(R.id.btn_listitem_creative)
.sourceId(R.id.tv_listitem_ad_source)
.logoLayoutId(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
.build()
adViewHolder.viewBinder = viewBinder
convertView.tag = adViewHolder
bindData(convertView, adViewHolder, ad, viewBinder)
if (ad.imageUrl != null) {
adViewHolder.mVerticalImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
}
return convertView
}
//渲染视频广告,以视频广告为例,以下说明
private fun getVideoView(ad: TTNativeAd): View? {
val adViewHolder: VideoAdViewHolder
val viewBinder: TTViewBinder
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_large_video, null, false)
try {
adViewHolder = VideoAdViewHolder()
adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
adViewHolder.videoView = convertView.findViewById<View>(R.id.iv_listitem_video) as FrameLayout
adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
//TTViewBinder 是必须类,需要开发者在确定好View之后把Id设置给TTViewBinder类,并在注册事件时传递给SDK
viewBinder = TTViewBinder.Builder(R.layout.listitem_ad_large_video)
.titleId(R.id.tv_listitem_ad_title)
.sourceId(R.id.tv_listitem_ad_source)
.decriptionTextId(R.id.tv_listitem_ad_desc)
.mediaViewIdId(R.id.iv_listitem_video)
.callToActionId(R.id.btn_listitem_creative)
.logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
.iconImageId(R.id.iv_listitem_icon)
.build()
adViewHolder.viewBinder = viewBinder
convertView.tag = adViewHolder
//视频广告设置播放状态回调(可选)
ad.setTTVideoListener(object : TTVideoListener {
override fun onVideoStart() {
LogUtil.d(TAG, "onVideoStart")
}
override fun onVideoPause() {
LogUtil.d(TAG, "onVideoPause")
}
override fun onVideoResume() {
LogUtil.d(TAG, "onVideoResume")
}
override fun onVideoCompleted() {
LogUtil.d(TAG, "onVideoCompleted")
}
override fun onVideoError(adError: AdError) {
LogUtil.d(TAG, "onVideoError")
}
})
//绑定广告数据、设置交互回调
bindData(convertView, adViewHolder, ad, viewBinder)
} catch (e: Exception) {
e.printStackTrace()
}
return convertView
}
private fun getLargeAdView(ad: TTNativeAd): View? {
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_large_pic, null, false)
val adViewHolder = LargeAdViewHolder()
adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
adViewHolder.mLargeImage = convertView.findViewById<View>(R.id.iv_listitem_image) as ImageView
adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_large_pic)
.titleId(R.id.tv_listitem_ad_title)
.decriptionTextId(R.id.tv_listitem_ad_desc)
.sourceId(R.id.tv_listitem_ad_source)
.mainImageId(R.id.iv_listitem_image)
.callToActionId(R.id.btn_listitem_creative)
.logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
.iconImageId(R.id.iv_listitem_icon)
.build()
adViewHolder.viewBinder = viewBinder
convertView.tag = adViewHolder
bindData(convertView, adViewHolder, ad, viewBinder)
if (ad.imageUrl != null) {
adViewHolder.mLargeImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
}
return convertView
}
private fun getGroupAdView(ad: TTNativeAd): View? {
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_group_pic, null, false)
val adViewHolder = GroupAdViewHolder()
adViewHolder.mTitle = convertView!!.findViewById(R.id.tv_listitem_ad_title) as TextView
adViewHolder.mSource = convertView.findViewById(R.id.tv_listitem_ad_source) as TextView
adViewHolder.mDescription = convertView.findViewById(R.id.tv_listitem_ad_desc) as TextView
adViewHolder.mGroupImage1 = convertView.findViewById(R.id.iv_listitem_image1) as ImageView
adViewHolder.mGroupImage2 = convertView.findViewById(R.id.iv_listitem_image2) as ImageView
adViewHolder.mGroupImage3 = convertView.findViewById(R.id.iv_listitem_image3) as ImageView
adViewHolder.mIcon = convertView.findViewById(R.id.iv_listitem_icon) as ImageView
adViewHolder.mDislike = convertView.findViewById(R.id.iv_listitem_dislike) as ImageView
adViewHolder.mCreativeButton = convertView.findViewById(R.id.btn_listitem_creative) as Button
adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_group_pic)
.titleId(R.id.tv_listitem_ad_title)
.decriptionTextId(R.id.tv_listitem_ad_desc)
.sourceId(R.id.tv_listitem_ad_source)//传第一张即可
.mainImageId(R.id.iv_listitem_image1)
.logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
.callToActionId(R.id.btn_listitem_creative)
.iconImageId(R.id.iv_listitem_icon)
.build()
adViewHolder.viewBinder = viewBinder
convertView.tag = adViewHolder
bindData(convertView, adViewHolder, ad, viewBinder)
if (ad.imageList != null && ad.imageList.size >= 3) {
val image1 = ad.imageList[0]
val image2 = ad.imageList[1]
val image3 = ad.imageList[2]
if (image1 != null) {
adViewHolder.mGroupImage1?.let { Glide.with(MintsApplication.getContext()).load(image1).into(it) }
}
if (image2 != null) {
adViewHolder.mGroupImage2?.let { Glide.with(MintsApplication.getContext()).load(image2).into(it) }
}
if (image3 != null) {
adViewHolder.mGroupImage3?.let { Glide.with(MintsApplication.getContext()).load(image3).into(it) }
}
}
return convertView
}
private fun getSmallAdView(ad: TTNativeAd): View? {
val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_small_pic, null, false)
val adViewHolder = SmallAdViewHolder()
adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
adViewHolder.mSmallImage = convertView.findViewById<View>(R.id.iv_listitem_image) as ImageView
adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_small_pic)
.titleId(R.id.tv_listitem_ad_title)
.sourceId(R.id.tv_listitem_ad_source)
.decriptionTextId(R.id.tv_listitem_ad_desc)
.mainImageId(R.id.iv_listitem_image)
.logoLayoutId(R.id.tt_ad_logo)//logoView 建议为GroupView 类型
.callToActionId(R.id.btn_listitem_creative)
.iconImageId(R.id.iv_listitem_icon)
.build()
adViewHolder.viewBinder = viewBinder
convertView.tag = adViewHolder
bindData(convertView, adViewHolder, ad, viewBinder)
if (ad.imageUrl != null) {
adViewHolder.mSmallImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
}
return convertView
}
private fun bindData(convertView: View, adViewHolder: AdViewHolder, ad: TTNativeAd, viewBinder: TTViewBinder) {
//设置dislike弹窗,如果有
// if (ad.hasDislike()) {
// val ttAdDislike = ad.getDislikeDialog( MintsApplication.getContext() as Activity?)
// adViewHolder.mDislike.setVisibility(View.VISIBLE)
// adViewHolder.mDislike.setOnClickListener(View.OnClickListener {
// //使用接口来展示
// ttAdDislike.showDislikeDialog()
// ttAdDislike.setDislikeCallback(object : TTDislikeCallback {
// override fun onSelected(position: Int, value: String) {}
//
// override fun onCancel() {}
//
// fun getADFrameLayout(): FrameLayout? {
// return sAdFrameLayout
// }
//
// /**
// * 拒绝再次提交
// * config成功,加载信息流
// */
// override fun configLoad() {
// loadAd()
// }
//
// private fun createAdView(ad: TTNativeAd?): View? {
//
// if (ad != null && ad.isExpressAd) {
// return getExpressAdView(ad)
// }
//
// return when {
// ad == null -> {
// return null
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_SMALL_IMG -> {
// return getSmallAdView(ad)
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_LARGE_IMG -> {
// return getLargeAdView(ad)
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_GROUP_IMG -> {
// return getGroupAdView(ad)
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_VIDEO -> {
// return getVideoView(ad)
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_VERTICAL_IMG -> {
// return getVerticalAdView(ad)
// }
// ad.adImageMode == TTAdConstant.IMAGE_MODE_VIDEO_VERTICAL -> {
// return getVideoView(ad)
// }
// else -> {
// return null
// }
// }
// }
//
// /**
// * 拒绝再次提交
// * 销毁
// */
// override fun onRefuse() {}
// override fun onShow() {}
// private fun destroy() {
// TTMediationAdSdk.unregisterConfigCallback(this)
// }
//
// //渲染模板广告
// private fun getExpressAdView(ad: TTNativeAd): View? {
// val adViewHolder: ExpressAdViewHolder
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_native_express, null, false)
// try {
// adViewHolder = ExpressAdViewHolder()
// adViewHolder.mAdContainerView = convertView.findViewById(R.id.iv_listitem_express) as FrameLayout
// convertView.tag = adViewHolder
//
// //判断是否存在dislike按钮
//// if (ad.hasDislike()) {
//// ad.setDislikeCallback(MintsApplication.getContext() as Activity?, object : TTDislikeCallback {
//// override fun onSelected(position: Int, value: String) {
//// //用户选择不喜欢原因后,移除广告展示
//// }
////
//// override fun onCancel() {
//// LogUtil.d(TAG, "dislike 点击了取消")
//// }
////
//// /**
//// * 拒绝再次提交
//// */
//// override fun onRefuse() {}
//// override fun onShow() {}
//// })
//// }
//
// //设置点击展示回调监听
// ad.setTTNativeAdListener(object : TTNativeExpressAdListener {
// override fun onAdClick() {
// LogUtil.d(TAG, "onAdClick")
// }
//
// override fun onAdShow() {
// LogUtil.d(TAG, "onAdShow")
// }
//
// override fun onRenderFail(view: View, msg: String, code: Int) {
// LogUtil.d(TAG, "onRenderFail code=$code,msg=$msg")
// }
//
// // ** 注意点 ** 不要在广告加载成功回调里进行广告view展示,要在onRenderSucces进行广告view展示,否则会导致广告无法展示。
// // 另外,不要直接使用参数view,而是通过ad.getExpressView()来获取广告view。
// override fun onRenderSuccess(view: View, width: Float, height: Float) {
// LogUtil.d(TAG, "onRenderSuccess")
// //回调渲染成功后将模板布局添加的父View中
// if (adViewHolder.mAdContainerView != null) {
// //获取视频播放view,该view SDK内部渲染,在媒体平台可配置视频是否自动播放等设置。
// val sWidth: Int
// val sHeight: Int
// val video = ad.expressView // 使用该方式获取广告view,而不是直接使用onRenderSuccess的参数view。
// if (width == TTAdSize.FULL_WIDTH.toFloat() && height == TTAdSize.AUTO_HEIGHT.toFloat()) {
// sWidth = FrameLayout.LayoutParams.MATCH_PARENT
// sHeight = FrameLayout.LayoutParams.WRAP_CONTENT
// } else {
// sWidth = UIUtils.getScreenWidthDp(MintsApplication.getContext()).toInt()
// sHeight = (sWidth * height / width).toInt()
// }
// if (video != null) {
// if (video.parent == null) {
// val layoutParams = FrameLayout.LayoutParams(sWidth, sHeight)
// adViewHolder.mAdContainerView!!.removeAllViews()
// adViewHolder.mAdContainerView!!.addView(video, layoutParams)
// }
// }
// }
// }
// })
//
//
// //视频广告设置播放状态回调(可选)
// ad.setTTVideoListener(object : TTVideoListener {
// override fun onVideoStart() {
// LogUtil.d(TAG, "onVideoStart")
// }
//
// override fun onVideoPause() {
// LogUtil.d(TAG, "onVideoPause")
// }
//
// override fun onVideoResume() {
// LogUtil.d(TAG, "onVideoResume")
// }
//
// override fun onVideoCompleted() {
// LogUtil.d(TAG, "onVideoCompleted")
// }
//
// override fun onVideoError(adError: AdError) {
// LogUtil.d(TAG, "onVideoError")
// }
// })
// } else {
// if (adViewHolder.mDislike != null) adViewHolder.mDislike.setVisibility(View.GONE)
// }
//设置事件回调
ad.setTTNativeAdListener(mTTNativeAdListener)
//可以被点击的view, 也可以把convertView放进来意味item可被点击
val clickViewList: MutableList<View> = ArrayList()
clickViewList.add(convertView)
adViewHolder.mSource?.let { clickViewList.add(it) }
adViewHolder.mTitle?.let { clickViewList.add(it) }
adViewHolder.mDescription?.let { clickViewList.add(it) }
adViewHolder.mIcon?.let { clickViewList.add(it) }
//添加点击区域
if (adViewHolder is LargeAdViewHolder) {
adViewHolder.mLargeImage?.let { clickViewList.add(it) }
} else if (adViewHolder is SmallAdViewHolder) {
adViewHolder.mSmallImage?.let { clickViewList.add(it) }
} else if (adViewHolder is VerticalAdViewHolder) {
adViewHolder.mVerticalImage?.let { clickViewList.add(it) }
} else if (adViewHolder is VideoAdViewHolder) {
adViewHolder.videoView?.let { clickViewList.add(it) }
} else if (adViewHolder is GroupAdViewHolder) {
adViewHolder.mGroupImage1?.let { clickViewList.add(it) }
adViewHolder.mGroupImage2?.let { clickViewList.add(it) }
adViewHolder.mGroupImage3?.let { clickViewList.add(it) }
}
//触发创意广告的view(点击下载或拨打电话)
val creativeViewList: MutableList<View> = ArrayList()
adViewHolder.mCreativeButton?.let { creativeViewList.add(it) }
//重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。
ad.registerView((convertView as ViewGroup), clickViewList, creativeViewList, viewBinder)
adViewHolder.mTitle?.text = ad.title //title为广告的简单信息提示
adViewHolder.mDescription?.text = ad.description //description为广告的较长的说明
adViewHolder.mSource?.text = if (TextUtils.isEmpty(ad.source)) "广告来源" else ad.source
val icon = ad.iconUrl
if (icon != null) {
adViewHolder.mIcon?.let { Glide.with(MintsApplication.getContext()).load(icon).into(it) }
}
val adCreativeButton: Button? = adViewHolder.mCreativeButton
when (ad.interactionType) {
TTAdConstant.INTERACTION_TYPE_DOWNLOAD -> {
adCreativeButton?.visibility = View.VISIBLE
adCreativeButton?.text = if (TextUtils.isEmpty(ad.actionText)) "立即下载" else ad.actionText
}
TTAdConstant.INTERACTION_TYPE_DIAL -> {
adCreativeButton?.visibility = View.VISIBLE
adCreativeButton?.text = "立即拨打"
}
TTAdConstant.INTERACTION_TYPE_LANDING_PAGE, TTAdConstant.INTERACTION_TYPE_BROWSER -> {
adCreativeButton?.visibility = View.VISIBLE
adCreativeButton?.text = if (TextUtils.isEmpty(ad.actionText)) "查看详情" else ad.actionText
}
else -> {
adCreativeButton?.visibility = View.GONE
}
}
}
private class VideoAdViewHolder : AdViewHolder() {
var videoView: FrameLayout? = null
}
private class LargeAdViewHolder : AdViewHolder() {
var mLargeImage: ImageView? = null
}
private class SmallAdViewHolder : AdViewHolder() {
var mSmallImage: ImageView? = null
}
private class VerticalAdViewHolder : AdViewHolder() {
var mVerticalImage: ImageView? = null
}
private class GroupAdViewHolder : AdViewHolder() {
var mGroupImage1: ImageView? = null
var mGroupImage2: ImageView? = null
var mGroupImage3: ImageView? = null
}
private class ExpressAdViewHolder {
var mAdContainerView: FrameLayout? = null
}
private open class AdViewHolder {
var viewBinder: TTViewBinder? = null
var mIcon: ImageView? = null
var mDislike: ImageView? = null
var mCreativeButton: Button? = null
var mTitle: TextView? = null
var mDescription: TextView? = null
var mSource: TextView? = null
var mLogo: RelativeLayout? = null
}
private var mTTNativeAdListener: TTNativeAdListener = object : TTNativeAdListener {
override fun onAdClick() {
LogUtil.d(TAG, "onAdClick")
}
override fun onAdShow() {
LogUtil.d(TAG, "onAdShow")
}
}
}
\ No newline at end of file
// ad.render()
// } catch (e: Exception) {
// e.printStackTrace()
// }
// return convertView
// }
//
// /**
// * @param ad
// * @return
// */
// private fun getVerticalAdView(ad: TTNativeAd): View? {
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_vertical_pic, null, false)
// val adViewHolder = VerticalAdViewHolder()
// adViewHolder.mTitle = convertView!!.findViewById(R.id.tv_listitem_ad_title) as TextView
// adViewHolder.mSource = convertView.findViewById(R.id.tv_listitem_ad_source) as TextView
// adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
// adViewHolder.mVerticalImage = convertView.findViewById(R.id.iv_listitem_image)
// adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
// adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
// adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
// adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
// val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_vertical_pic)
// .titleId(R.id.tv_listitem_ad_title)
// .decriptionTextId(R.id.tv_listitem_ad_desc)
// .mainImageId(R.id.iv_listitem_image)
// .iconImageId(R.id.iv_listitem_icon)
// .callToActionId(R.id.btn_listitem_creative)
// .sourceId(R.id.tv_listitem_ad_source)
// .logoLayoutId(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
// .build()
// adViewHolder.viewBinder = viewBinder
// convertView.tag = adViewHolder
// bindData(convertView, adViewHolder, ad, viewBinder)
// if (ad.imageUrl != null) {
// adViewHolder.mVerticalImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
// }
// return convertView
// }
//
// //渲染视频广告,以视频广告为例,以下说明
// private fun getVideoView(ad: TTNativeAd): View? {
// val adViewHolder: VideoAdViewHolder
// val viewBinder: TTViewBinder
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_large_video, null, false)
// try {
// adViewHolder = VideoAdViewHolder()
// adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
// adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
// adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
// adViewHolder.videoView = convertView.findViewById<View>(R.id.iv_listitem_video) as FrameLayout
// adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
// adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
// adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
// adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
//
// //TTViewBinder 是必须类,需要开发者在确定好View之后把Id设置给TTViewBinder类,并在注册事件时传递给SDK
// viewBinder = TTViewBinder.Builder(R.layout.listitem_ad_large_video)
// .titleId(R.id.tv_listitem_ad_title)
// .sourceId(R.id.tv_listitem_ad_source)
// .decriptionTextId(R.id.tv_listitem_ad_desc)
// .mediaViewIdId(R.id.iv_listitem_video)
// .callToActionId(R.id.btn_listitem_creative)
// .logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
// .iconImageId(R.id.iv_listitem_icon)
// .build()
// adViewHolder.viewBinder = viewBinder
// convertView.tag = adViewHolder
//
// //视频广告设置播放状态回调(可选)
// ad.setTTVideoListener(object : TTVideoListener {
// override fun onVideoStart() {
// LogUtil.d(TAG, "onVideoStart")
// }
//
// override fun onVideoPause() {
// LogUtil.d(TAG, "onVideoPause")
// }
//
// override fun onVideoResume() {
// LogUtil.d(TAG, "onVideoResume")
// }
//
// override fun onVideoCompleted() {
// LogUtil.d(TAG, "onVideoCompleted")
// }
//
// override fun onVideoError(adError: AdError) {
// LogUtil.d(TAG, "onVideoError")
// }
// })
//
// //绑定广告数据、设置交互回调
// bindData(convertView, adViewHolder, ad, viewBinder)
// } catch (e: Exception) {
// e.printStackTrace()
// }
// return convertView
// }
//
// private fun getLargeAdView(ad: TTNativeAd): View? {
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_large_pic, null, false)
// val adViewHolder = LargeAdViewHolder()
// adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
// adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
// adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
// adViewHolder.mLargeImage = convertView.findViewById<View>(R.id.iv_listitem_image) as ImageView
// adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
// adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
// adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
// adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
// val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_large_pic)
// .titleId(R.id.tv_listitem_ad_title)
// .decriptionTextId(R.id.tv_listitem_ad_desc)
// .sourceId(R.id.tv_listitem_ad_source)
// .mainImageId(R.id.iv_listitem_image)
// .callToActionId(R.id.btn_listitem_creative)
// .logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
// .iconImageId(R.id.iv_listitem_icon)
// .build()
// adViewHolder.viewBinder = viewBinder
// convertView.tag = adViewHolder
// bindData(convertView, adViewHolder, ad, viewBinder)
// if (ad.imageUrl != null) {
// adViewHolder.mLargeImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
// }
// return convertView
// }
//
// private fun getGroupAdView(ad: TTNativeAd): View? {
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_group_pic, null, false)
// val adViewHolder = GroupAdViewHolder()
// adViewHolder.mTitle = convertView!!.findViewById(R.id.tv_listitem_ad_title) as TextView
// adViewHolder.mSource = convertView.findViewById(R.id.tv_listitem_ad_source) as TextView
// adViewHolder.mDescription = convertView.findViewById(R.id.tv_listitem_ad_desc) as TextView
// adViewHolder.mGroupImage1 = convertView.findViewById(R.id.iv_listitem_image1) as ImageView
// adViewHolder.mGroupImage2 = convertView.findViewById(R.id.iv_listitem_image2) as ImageView
// adViewHolder.mGroupImage3 = convertView.findViewById(R.id.iv_listitem_image3) as ImageView
// adViewHolder.mIcon = convertView.findViewById(R.id.iv_listitem_icon) as ImageView
// adViewHolder.mDislike = convertView.findViewById(R.id.iv_listitem_dislike) as ImageView
// adViewHolder.mCreativeButton = convertView.findViewById(R.id.btn_listitem_creative) as Button
// adViewHolder.mLogo = convertView.findViewById(R.id.tt_ad_logo) //logoView 建议传入GroupView类型
// val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_group_pic)
// .titleId(R.id.tv_listitem_ad_title)
// .decriptionTextId(R.id.tv_listitem_ad_desc)
// .sourceId(R.id.tv_listitem_ad_source)//传第一张即可
// .mainImageId(R.id.iv_listitem_image1)
// .logoLayoutId(R.id.tt_ad_logo)//logoView 建议传入GroupView类型
// .callToActionId(R.id.btn_listitem_creative)
// .iconImageId(R.id.iv_listitem_icon)
// .build()
// adViewHolder.viewBinder = viewBinder
// convertView.tag = adViewHolder
// bindData(convertView, adViewHolder, ad, viewBinder)
// if (ad.imageList != null && ad.imageList.size >= 3) {
// val image1 = ad.imageList[0]
// val image2 = ad.imageList[1]
// val image3 = ad.imageList[2]
// if (image1 != null) {
// adViewHolder.mGroupImage1?.let { Glide.with(MintsApplication.getContext()).load(image1).into(it) }
// }
// if (image2 != null) {
// adViewHolder.mGroupImage2?.let { Glide.with(MintsApplication.getContext()).load(image2).into(it) }
// }
// if (image3 != null) {
// adViewHolder.mGroupImage3?.let { Glide.with(MintsApplication.getContext()).load(image3).into(it) }
// }
// }
// return convertView
// }
//
// private fun getSmallAdView(ad: TTNativeAd): View? {
// val convertView = LayoutInflater.from(MintsApplication.getContext()).inflate(R.layout.listitem_ad_small_pic, null, false)
// val adViewHolder = SmallAdViewHolder()
// adViewHolder.mTitle = convertView!!.findViewById<View>(R.id.tv_listitem_ad_title) as TextView
// adViewHolder.mSource = convertView.findViewById<View>(R.id.tv_listitem_ad_source) as TextView
// adViewHolder.mDescription = convertView.findViewById<View>(R.id.tv_listitem_ad_desc) as TextView
// adViewHolder.mSmallImage = convertView.findViewById<View>(R.id.iv_listitem_image) as ImageView
// adViewHolder.mIcon = convertView.findViewById<View>(R.id.iv_listitem_icon) as ImageView
// adViewHolder.mDislike = convertView.findViewById<View>(R.id.iv_listitem_dislike) as ImageView
// adViewHolder.mCreativeButton = convertView.findViewById<View>(R.id.btn_listitem_creative) as Button
// val viewBinder: TTViewBinder = TTViewBinder.Builder(R.layout.listitem_ad_small_pic)
// .titleId(R.id.tv_listitem_ad_title)
// .sourceId(R.id.tv_listitem_ad_source)
// .decriptionTextId(R.id.tv_listitem_ad_desc)
// .mainImageId(R.id.iv_listitem_image)
// .logoLayoutId(R.id.tt_ad_logo)//logoView 建议为GroupView 类型
// .callToActionId(R.id.btn_listitem_creative)
// .iconImageId(R.id.iv_listitem_icon)
// .build()
// adViewHolder.viewBinder = viewBinder
// convertView.tag = adViewHolder
//
// bindData(convertView, adViewHolder, ad, viewBinder)
// if (ad.imageUrl != null) {
// adViewHolder.mSmallImage?.let { Glide.with(MintsApplication.getContext()).load(ad.imageUrl).into(it) }
// }
// return convertView
// }
//
// private fun bindData(convertView: View, adViewHolder: AdViewHolder, ad: TTNativeAd, viewBinder: TTViewBinder) {
// //设置dislike弹窗,如果有
//// if (ad.hasDislike()) {
//// val ttAdDislike = ad.getDislikeDialog( MintsApplication.getContext() as Activity?)
//// adViewHolder.mDislike.setVisibility(View.VISIBLE)
//// adViewHolder.mDislike.setOnClickListener(View.OnClickListener {
//// //使用接口来展示
//// ttAdDislike.showDislikeDialog()
//// ttAdDislike.setDislikeCallback(object : TTDislikeCallback {
//// override fun onSelected(position: Int, value: String) {}
////
//// override fun onCancel() {}
////
//// /**
//// * 拒绝再次提交
//// */
//// /**
//// * 拒绝再次提交
//// */
//// override fun onRefuse() {}
//// override fun onShow() {}
//// })
//// })
//// } else {
//// if (adViewHolder.mDislike != null) adViewHolder.mDislike.setVisibility(View.GONE)
//// }
//
// //设置事件回调
// ad.setTTNativeAdListener(mTTNativeAdListener)
// //可以被点击的view, 也可以把convertView放进来意味item可被点击
// val clickViewList: MutableList<View> = ArrayList()
// clickViewList.add(convertView)
// adViewHolder.mSource?.let { clickViewList.add(it) }
// adViewHolder.mTitle?.let { clickViewList.add(it) }
// adViewHolder.mDescription?.let { clickViewList.add(it) }
// adViewHolder.mIcon?.let { clickViewList.add(it) }
// //添加点击区域
// if (adViewHolder is LargeAdViewHolder) {
// adViewHolder.mLargeImage?.let { clickViewList.add(it) }
// } else if (adViewHolder is SmallAdViewHolder) {
// adViewHolder.mSmallImage?.let { clickViewList.add(it) }
// } else if (adViewHolder is VerticalAdViewHolder) {
// adViewHolder.mVerticalImage?.let { clickViewList.add(it) }
// } else if (adViewHolder is VideoAdViewHolder) {
// adViewHolder.videoView?.let { clickViewList.add(it) }
// } else if (adViewHolder is GroupAdViewHolder) {
// adViewHolder.mGroupImage1?.let { clickViewList.add(it) }
// adViewHolder.mGroupImage2?.let { clickViewList.add(it) }
// adViewHolder.mGroupImage3?.let { clickViewList.add(it) }
// }
// //触发创意广告的view(点击下载或拨打电话)
// val creativeViewList: MutableList<View> = ArrayList()
// adViewHolder.mCreativeButton?.let { creativeViewList.add(it) }
// //重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。
// ad.registerView((convertView as ViewGroup), clickViewList, creativeViewList, viewBinder)
// adViewHolder.mTitle?.text = ad.title //title为广告的简单信息提示
// adViewHolder.mDescription?.text = ad.description //description为广告的较长的说明
// adViewHolder.mSource?.text = if (TextUtils.isEmpty(ad.source)) "广告来源" else ad.source
// val icon = ad.iconUrl
// if (icon != null) {
// adViewHolder.mIcon?.let { Glide.with(MintsApplication.getContext()).load(icon).into(it) }
// }
// val adCreativeButton: Button? = adViewHolder.mCreativeButton
// when (ad.interactionType) {
// TTAdConstant.INTERACTION_TYPE_DOWNLOAD -> {
// adCreativeButton?.visibility = View.VISIBLE
// adCreativeButton?.text = if (TextUtils.isEmpty(ad.actionText)) "立即下载" else ad.actionText
// }
// TTAdConstant.INTERACTION_TYPE_DIAL -> {
// adCreativeButton?.visibility = View.VISIBLE
// adCreativeButton?.text = "立即拨打"
// }
// TTAdConstant.INTERACTION_TYPE_LANDING_PAGE, TTAdConstant.INTERACTION_TYPE_BROWSER -> {
// adCreativeButton?.visibility = View.VISIBLE
// adCreativeButton?.text = if (TextUtils.isEmpty(ad.actionText)) "查看详情" else ad.actionText
// }
// else -> {
// adCreativeButton?.visibility = View.GONE
// }
// }
// }
//
// private class VideoAdViewHolder : AdViewHolder() {
// var videoView: FrameLayout? = null
// }
//
// private class LargeAdViewHolder : AdViewHolder() {
// var mLargeImage: ImageView? = null
// }
//
// private class SmallAdViewHolder : AdViewHolder() {
// var mSmallImage: ImageView? = null
// }
//
// private class VerticalAdViewHolder : AdViewHolder() {
// var mVerticalImage: ImageView? = null
// }
//
// private class GroupAdViewHolder : AdViewHolder() {
// var mGroupImage1: ImageView? = null
// var mGroupImage2: ImageView? = null
// var mGroupImage3: ImageView? = null
// }
//
// private class ExpressAdViewHolder {
// var mAdContainerView: FrameLayout? = null
// }
//
// private open class AdViewHolder {
// var viewBinder: TTViewBinder? = null
// var mIcon: ImageView? = null
// var mDislike: ImageView? = null
// var mCreativeButton: Button? = null
// var mTitle: TextView? = null
// var mDescription: TextView? = null
// var mSource: TextView? = null
// var mLogo: RelativeLayout? = null
// }
//
// private var mTTNativeAdListener: TTNativeAdListener = object : TTNativeAdListener {
// override fun onAdClick() {
// LogUtil.d(TAG, "onAdClick")
// }
//
// override fun onAdShow() {
// LogUtil.d(TAG, "onAdShow")
// }
// }
//
//}
\ No newline at end of file
......@@ -13,6 +13,8 @@ import android.widget.TextView
import com.bumptech.glide.Glide
import com.kwad.sdk.api.*
import com.kwad.sdk.api.KsNativeAd.VideoPlayListener
import com.kwad.sdk.api.model.InteractionType
import com.kwad.sdk.api.model.MaterialType
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.manager.KsManager
......@@ -59,15 +61,15 @@ object KsPreLoadExpressManager {
val adView: View
// 判断广告素材类型
when (ksNativeAd.materialType) {
KsNativeAd.MaterialType.VIDEO -> {
MaterialType.VIDEO -> {
// 视频素材,渲染自定义的视频广告
adView = getVideoItemView(parent, ksNativeAd)!!
}
KsNativeAd.MaterialType.SINGLE_IMG -> {
MaterialType.SINGLE_IMG -> {
// 单图素材,渲染自定义的单图广告
adView = getSingleImageItemView(parent, ksNativeAd)!!
}
KsNativeAd.MaterialType.GROUP_IMG -> {
MaterialType.GROUP_IMG -> {
// 组图素材,渲染自定义的组图广告
adView = getGroupImageItemView(parent, ksNativeAd)!!
}
......@@ -196,6 +198,10 @@ object KsPreLoadExpressManager {
override fun handleDownloadDialog(p0: DialogInterface.OnClickListener?): Boolean {
return false
}
override fun onDownloadTipsDialogShow() {}
override fun onDownloadTipsDialogDismiss() {}
})
// 广告描述
......@@ -215,7 +221,7 @@ object KsPreLoadExpressManager {
// 获取app下载次数文案,例如:800W此下载,自行渲染。
Log.d("AppInfo", "app下载次数文案 = " + ad.appDownloadCountDes)
when (ad.interactionType) {
KsNativeAd.InteractionType.H5 -> {
InteractionType.H5 -> {
// 广告描述
adBaseViewHolder.mH5Desc.text = ad.adDescription
// 广告转化文案
......@@ -223,7 +229,7 @@ object KsPreLoadExpressManager {
adBaseViewHolder.mAppContainer.visibility = View.GONE
adBaseViewHolder.mH5Container.visibility = View.VISIBLE
}
KsNativeAd.InteractionType.DOWNLOAD -> {
InteractionType.DOWNLOAD -> {
// appIcon,非下载类型的没有
if (TextUtils.isEmpty(ad.appIconUrl)) {
adBaseViewHolder.mAppIcon.visibility = View.GONE
......
package com.mints.goodmoney.ad.express
import android.annotation.SuppressLint
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import com.bytedance.msdk.api.nativeAd.TTNativeAd
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.mvp.model.WeightBean
......@@ -11,11 +11,12 @@ import com.mints.goodmoney.utils.LogUtil
import com.qq.e.ads.nativ.NativeExpressADView
import java.util.*
/**
* 预加载信息流管理类
*/
object PreLoadExpressManager : TTADLoadSuccessListener, YLHADLoadSuccessListener, KSADLoadSuccessListener, GMADLoadSuccessListener {
@SuppressLint("StaticFieldLeak")
object PreLoadExpressManager : TTADLoadSuccessListener, YLHADLoadSuccessListener,
KSADLoadSuccessListener {
private val TAG = PreLoadExpressManager::class.java.simpleName
......@@ -36,7 +37,7 @@ object PreLoadExpressManager : TTADLoadSuccessListener, YLHADLoadSuccessListener
YlhPreLoadExpressManager.setListener(this)
TTPreLoadExpressManager.getInstance().setListener(this)
KsPreLoadExpressManager.setListener(this)
GroMoreExpressManager.instance.setListener(this)
// GroMoreExpressManager.instance.setListener(this)
}
fun init(csjWeight: Int, ylhWeight: Int, ksWeight: Int, gmWeight: Int) {
......@@ -62,10 +63,11 @@ object PreLoadExpressManager : TTADLoadSuccessListener, YLHADLoadSuccessListener
// }
when (getRandomWeight()) {
Constant.CSJ_EXPRESS_AD -> TTPreLoadExpressManager.getInstance().loadTtFrameLayout(mAdFrameLayout)
Constant.CSJ_EXPRESS_AD -> TTPreLoadExpressManager.getInstance()
.loadTtFrameLayout(mAdFrameLayout)
Constant.YLH_EXPRESS_AD -> YlhPreLoadExpressManager.loadYlhFrameLayout()
Constant.KS_EXPRESS_AD -> KsPreLoadExpressManager.loadKsFrameLayout(mAdFrameLayout as ViewGroup)
Constant.GM_EXPRESS_AD -> GroMoreExpressManager.instance.loadADFrameLayout()
// Constant.GM_EXPRESS_AD -> GroMoreExpressManager.instance.loadADFrameLayout()
else -> {
TTPreLoadExpressManager.getInstance().loadTtFrameLayout(mAdFrameLayout)
}
......@@ -152,12 +154,12 @@ object PreLoadExpressManager : TTADLoadSuccessListener, YLHADLoadSuccessListener
mAdFrameLayout?.addView(view)
}
override fun onGMAdLoadSuc(ttNativeAd: TTNativeAd?) {
// override fun onGMAdLoadSuc(ttNativeAd: TTNativeAd?) {
// if (currentIndex == 3) {
// mAdFrameLayout?.addView(view)
// }
mAdFrameLayout?.addView(ttNativeAd?.expressView)
}
// mAdFrameLayout?.addView(ttNativeAd?.expressView)
// }
}
......@@ -173,6 +175,6 @@ interface KSADLoadSuccessListener {
fun onKSAdLoadSuc(ksNativeAd: View?)
}
interface GMADLoadSuccessListener {
fun onGMAdLoadSuc(ttNativeAd: TTNativeAd?)
}
\ No newline at end of file
//interface GMADLoadSuccessListener {
// fun onGMAdLoadSuc(ttNativeAd: TTNativeAd?)
//}
\ No newline at end of file
......@@ -141,6 +141,10 @@ public class CsjFullVideoAdManager extends BaseVideoAd {
}
}
}
@Override
public void onFullScreenVideoCached(TTFullScreenVideoAd ttFullScreenVideoAd) {
}
});
}
......
package com.mints.goodmoney.ad.video;
import android.app.Activity;
import android.util.Log;
import com.bytedance.msdk.adapter.util.Logger;
import com.bytedance.msdk.api.AdError;
import com.bytedance.msdk.api.AdSlot;
import com.bytedance.msdk.api.TTAdConstant;
import com.bytedance.msdk.api.TTMediationAdSdk;
import com.bytedance.msdk.api.TTSettingConfigCallback;
import com.bytedance.msdk.api.TTVideoOption;
import com.bytedance.msdk.api.reward.RewardItem;
import com.bytedance.msdk.api.reward.TTRewardAd;
import com.bytedance.msdk.api.reward.TTRewardedAdListener;
import com.bytedance.msdk.api.reward.TTRewardedAdLoadCallback;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
import com.mints.goodmoney.BuildConfig;
import com.mints.goodmoney.ad.video.base.BaseVideoAd;
import com.mints.goodmoney.ad.video.base.VideoAdStatusListener;
import com.mints.goodmoney.common.AppConfig;
import com.mints.goodmoney.common.Constant;
import com.mints.goodmoney.manager.TTNativeExpressManager;
import com.mints.goodmoney.manager.TrackManager;
import com.mints.goodmoney.manager.TtCsjAdManager;
import com.mints.goodmoney.manager.UserManager;
import com.mints.goodmoney.utils.LogUtil;
import com.mints.goodmoney.utils.MD5;
import com.mints.library.utils.json.JsonUtil;
import net.grandcentrix.tray.AppPreferences;
import java.util.HashMap;
import java.util.Map;
/**
* GroMore激励视频广告
*/
public class CsjGroMoreVideoAdManager extends BaseVideoAd {
private static final String TAG = CsjGroMoreVideoAdManager.class.getSimpleName();
private static CsjGroMoreVideoAdManager _inst;
private int curCoin;
private String extraId;
private String carrierType;
private VideoAdStatusListener videoAdStatusListener;
private TTRewardAd mttRewardAd;
private Activity activity;
private String adUnitId = "946018378"; //代码位
private boolean isClickScreen = true; // 是否点击屏幕跳转广告
public static CsjGroMoreVideoAdManager getInstance(Activity activity) {
if (_inst == null) {
_inst = new CsjGroMoreVideoAdManager(activity);
}
return _inst;
}
private CsjGroMoreVideoAdManager(Activity activity) {
init(activity);
}
private void init(Activity activity) {
this.activity = activity;
}
@Override
public void onDestroy() {
TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
if (mttRewardAd != null) {
mttRewardAd.destroy();
}
activity = null;
}
/**
* 激励视频
*
* @param carrierType
*/
@Override
public void loadAd(Activity activity, int curCoin, String carrierType, String extraId) {
this.activity = activity;
isClickScreen = true;
this.curCoin = curCoin;
this.extraId = extraId;
this.carrierType = carrierType;
/**
* 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
*/
if (TTMediationAdSdk.configLoadSuccess()) {
loadAd(adUnitId, TTAdConstant.VERTICAL);
} else {
TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不用使用内部类,否则在ondestory中无法移除该回调
}
}
/**
* config回调
*/
private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
@Override
public void configLoad() {
loadAd(adUnitId, TTAdConstant.VERTICAL);
}
};
private void loadAd(final String adUnitId, int orientation) {
/**
* 注:每次加载激励视频广告的时候需要新建一个TTRewardAd,否则可能会出现广告填充问题
* ( 例如:mttRewardAd = new TTRewardAd(this, adUnitId);)
*/
mttRewardAd = new TTRewardAd(activity, adUnitId);
TTVideoOption videoOption = new TTVideoOption.Builder()
.setMuted(true)//对所有SDK的激励广告生效,除需要在平台配置的SDK,如穿山甲SDK
.setAdmobAppVolume(0f)//配合Admob的声音大小设置[0-1]
.build();
// Map<String, String> customData = new HashMap<>();
// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_PANGLE, "pangle media_extra");
// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_GDT, "gdt custom data");
// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_KS, "ks custom data");
// 其他需要透传给adn的数据。
//创建广告请求参数AdSlot,具体参数含义参考文档
com.bytedance.msdk.api.AdSlot.Builder adSlotBuilder = new com.bytedance.msdk.api.AdSlot.Builder()
.setTTVideoOption(videoOption)
.setUserID(UserManager.getInstance().getUserID())//用户id,必传参数
.setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // 确保该聚合广告位下所有gdt代码位都是同一种类型(模版或非模版)。
.setOrientation(orientation);//必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
//请求广告
mttRewardAd.loadRewardAd(adSlotBuilder.build(), new TTRewardedAdLoadCallback() {
@Override
public void onRewardVideoLoadFail(AdError adError) {
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, String.valueOf(adError.code), adError.message);
LogUtil.d(TAG, "onError " + String.valueOf(adError.code) + adError.message);
if (videoAdStatusListener != null) {
videoAdStatusListener.adFail();
}
}
@Override
public void onRewardVideoAdLoad() {
}
@Override
public void onRewardVideoCached() {
if (mttRewardAd != null) {
//在获取到广告后展示,强烈建议在onRewardVideoCached回调后,展示广告,提升播放体验
//该方法直接展示广告
//展示广告,并传入广告展示的场景
mttRewardAd.showRewardAd(activity, mTTRewardedAdListener);
LogUtil.d(TAG, "adNetworkPlatformId: " + mttRewardAd.getAdNetworkPlatformId()); //获取展示广告对应的adn的值 具体值见NetworkPlatformConst类 -3: 无权限 -2: 暂无数据
LogUtil.d(TAG, "adNetworkRitId:" + mttRewardAd.getAdNetworkRitId()); //获取展示广告对应的代码位 具体值见NetworkPlatformConst类 "-3": 无权限 "-2"
LogUtil.d(TAG, "preEcpm: " + mttRewardAd.getPreEcpm()); //获取展示广告预估ecpm价格,单位是分 具体值见NetworkPlatformConst类 "-3": 无权限 "-2": 暂无数据 "-1":平台未有填写的预估ecpm价格
} else {
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, "999999", "Cached Fail");
LogUtil.d(TAG, " onRewardVideoCached onError ");
if (videoAdStatusListener != null) {
videoAdStatusListener.adFail();
}
}
}
});
}
/**
* 激励视频交互回调
*/
private TTRewardedAdListener mTTRewardedAdListener = new TTRewardedAdListener() {
/**
* 广告的展示回调 每个广告仅回调一次
*/
public void onRewardedAdShow() {
LogUtil.d(TAG, "onRewardedAdShow");
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ZERO, "", "");
}
/**
* 注意Admob的激励视频不会回调该方法
*/
@Override
public void onRewardClick() {
LogUtil.d(TAG, "onRewardClick");
if (AppConfig.needReportClickAdEvent) {
TrackManager.getInstance().reportClickAdEvent();
}
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_TWO, "", "");
if (isClickScreen) {
// 防止重复
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_FOUR, "", "");
isClickScreen = false;
}
if (videoAdStatusListener != null) {
videoAdStatusListener.adDownload();
}
}
/**
* 广告关闭的回调
*/
public void onRewardedAdClosed() {
LogUtil.d(TAG, "onRewardedAdClosed");
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_THREE, "", "");
TrackManager.getInstance().reportAddCoinMsg(activity, getAdMapVO(carrierType, Constant.AD_SOURCE_GROMORE, extraId, curCoin));
if (mttRewardAd != null) {
//package com.mints.goodmoney.ad.video;
//
//import android.app.Activity;
//import android.util.Log;
//
//import com.bytedance.msdk.adapter.util.Logger;
//import com.bytedance.msdk.api.AdError;
//import com.bytedance.msdk.api.AdSlot;
//import com.bytedance.msdk.api.TTAdConstant;
//import com.bytedance.msdk.api.TTMediationAdSdk;
//import com.bytedance.msdk.api.TTSettingConfigCallback;
//import com.bytedance.msdk.api.TTVideoOption;
//import com.bytedance.msdk.api.reward.RewardItem;
//import com.bytedance.msdk.api.reward.TTRewardAd;
//import com.bytedance.msdk.api.reward.TTRewardedAdListener;
//import com.bytedance.msdk.api.reward.TTRewardedAdLoadCallback;
//import com.bytedance.sdk.openadsdk.TTAdNative;
//import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
//import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
//import com.mints.goodmoney.BuildConfig;
//import com.mints.goodmoney.ad.video.base.BaseVideoAd;
//import com.mints.goodmoney.ad.video.base.VideoAdStatusListener;
//import com.mints.goodmoney.common.AppConfig;
//import com.mints.goodmoney.common.Constant;
//import com.mints.goodmoney.manager.TTNativeExpressManager;
//import com.mints.goodmoney.manager.TrackManager;
//import com.mints.goodmoney.manager.TtCsjAdManager;
//import com.mints.goodmoney.manager.UserManager;
//import com.mints.goodmoney.utils.LogUtil;
//import com.mints.goodmoney.utils.MD5;
//import com.mints.library.utils.json.JsonUtil;
//
//import net.grandcentrix.tray.AppPreferences;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * GroMore激励视频广告
// */
//public class CsjGroMoreVideoAdManager extends BaseVideoAd {
//
// private static final String TAG = CsjGroMoreVideoAdManager.class.getSimpleName();
//
// private static CsjGroMoreVideoAdManager _inst;
// private int curCoin;
// private String extraId;
// private String carrierType;
// private VideoAdStatusListener videoAdStatusListener;
//
// private TTRewardAd mttRewardAd;
//
// private Activity activity;
//
// private String adUnitId = "946018378"; //代码位
//
// private boolean isClickScreen = true; // 是否点击屏幕跳转广告
//
// public static CsjGroMoreVideoAdManager getInstance(Activity activity) {
// if (_inst == null) {
// _inst = new CsjGroMoreVideoAdManager(activity);
// }
// return _inst;
// }
//
// private CsjGroMoreVideoAdManager(Activity activity) {
// init(activity);
// }
//
// private void init(Activity activity) {
// this.activity = activity;
//
// }
//
// @Override
// public void onDestroy() {
// TTMediationAdSdk.unregisterConfigCallback(mSettingConfigCallback);
// if (mttRewardAd != null) {
// mttRewardAd.destroy();
// }
//
// activity = null;
// }
//
// /**
// * 激励视频
// *
// * @param carrierType
// */
// @Override
// public void loadAd(Activity activity, int curCoin, String carrierType, String extraId) {
// this.activity = activity;
// isClickScreen = true;
// this.curCoin = curCoin;
// this.extraId = extraId;
// this.carrierType = carrierType;
// /**
// * 判断当前是否存在config 配置 ,如果存在直接加载广告 ,如果不存在则注册config加载回调
// */
// if (TTMediationAdSdk.configLoadSuccess()) {
// loadAd(adUnitId, TTAdConstant.VERTICAL);
// } else {
// TTMediationAdSdk.registerConfigCallback(mSettingConfigCallback); //不用使用内部类,否则在ondestory中无法移除该回调
// }
// }
//
// /**
// * config回调
// */
// private TTSettingConfigCallback mSettingConfigCallback = new TTSettingConfigCallback() {
// @Override
// public void configLoad() {
// loadAd(adUnitId, TTAdConstant.VERTICAL);
// }
// };
//
// private void loadAd(final String adUnitId, int orientation) {
// /**
// * 注:每次加载激励视频广告的时候需要新建一个TTRewardAd,否则可能会出现广告填充问题
// * ( 例如:mttRewardAd = new TTRewardAd(this, adUnitId);)
// */
// mttRewardAd = new TTRewardAd(activity, adUnitId);
//
// TTVideoOption videoOption = new TTVideoOption.Builder()
// .setMuted(true)//对所有SDK的激励广告生效,除需要在平台配置的SDK,如穿山甲SDK
// .setAdmobAppVolume(0f)//配合Admob的声音大小设置[0-1]
// .build();
//
//// Map<String, String> customData = new HashMap<>();
//// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_PANGLE, "pangle media_extra");
//// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_GDT, "gdt custom data");
//// customData.put(com.bytedance.msdk.api.AdSlot.CUSTOM_DATA_KEY_KS, "ks custom data");
// // 其他需要透传给adn的数据。
//
// //创建广告请求参数AdSlot,具体参数含义参考文档
// com.bytedance.msdk.api.AdSlot.Builder adSlotBuilder = new com.bytedance.msdk.api.AdSlot.Builder()
// .setTTVideoOption(videoOption)
// .setUserID(UserManager.getInstance().getUserID())//用户id,必传参数
// .setAdStyleType(AdSlot.TYPE_EXPRESS_AD) // 确保该聚合广告位下所有gdt代码位都是同一种类型(模版或非模版)。
// .setOrientation(orientation);//必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
//
// //请求广告
// mttRewardAd.loadRewardAd(adSlotBuilder.build(), new TTRewardedAdLoadCallback() {
//
// @Override
// public void onRewardVideoLoadFail(AdError adError) {
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, String.valueOf(adError.code), adError.message);
//
//
// LogUtil.d(TAG, "onError " + String.valueOf(adError.code) + adError.message);
// if (videoAdStatusListener != null) {
// videoAdStatusListener.adFail();
// }
// }
//
// @Override
// public void onRewardVideoAdLoad() {
// }
//
// @Override
// public void onRewardVideoCached() {
// if (mttRewardAd != null) {
// //在获取到广告后展示,强烈建议在onRewardVideoCached回调后,展示广告,提升播放体验
// //该方法直接展示广告
// //展示广告,并传入广告展示的场景
// mttRewardAd.showRewardAd(activity, mTTRewardedAdListener);
//
// LogUtil.d(TAG, "adNetworkPlatformId: " + mttRewardAd.getAdNetworkPlatformId()); //获取展示广告对应的adn的值 具体值见NetworkPlatformConst类 -3: 无权限 -2: 暂无数据
// LogUtil.d(TAG, "adNetworkRitId:" + mttRewardAd.getAdNetworkRitId()); //获取展示广告对应的代码位 具体值见NetworkPlatformConst类 "-3": 无权限 "-2"
// LogUtil.d(TAG, "preEcpm: " + mttRewardAd.getPreEcpm()); //获取展示广告预估ecpm价格,单位是分 具体值见NetworkPlatformConst类 "-3": 无权限 "-2": 暂无数据 "-1":平台未有填写的预估ecpm价格
HashMap<String, Object> vo = new HashMap<>();
vo.put("adcode",mttRewardAd.getAdNetworkRitId());
vo.put("ecpm",mttRewardAd.getPreEcpm());
vo.put("adSource",mttRewardAd.getAdNetworkPlatformId());
vo.put("adType",Constant.GRO_MORE_ADTYPE2);
TrackManager.getInstance().cmtGroMoreInfo(vo);
}
if (videoAdStatusListener != null) {
videoAdStatusListener.adSuccess();
}
}
/**
* 视频播放完毕的回调 Admob广告不存在该回调
*/
public void onVideoComplete() {
LogUtil.d(TAG, "onVideoComplete");
}
/**
* 视频播放失败的回调 - Mintegral GDT Admob广告不存在该回调
*/
public void onVideoError() {
LogUtil.d(TAG, "onVideoError");
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, "999999", "VideoError");
if (videoAdStatusListener != null) {
videoAdStatusListener.adFail();
}
}
/**
* 激励视频播放完毕,验证是否有效发放奖励的回调
*/
public void onRewardVerify(RewardItem rewardItem) {
Map<String, Object> customData = rewardItem.getCustomData();
if (customData != null) {
String adnName = (String) customData.get(RewardItem.KEY_ADN_NAME);
switch (adnName) {
case RewardItem.KEY_GDT:
LogUtil.d(TAG, "rewardItem gdt: " + customData.get(RewardItem.KEY_GDT_TRANS_ID));
break;
}
}
}
/**
* - Mintegral GDT Admob广告不存在该回调
*/
@Override
public void onSkippedVideo() {
}
};
public void setVideoAdStatusListener(VideoAdStatusListener videoAdStatusListener) {
this.videoAdStatusListener = videoAdStatusListener;
}
}
//
// } else {
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, "999999", "Cached Fail");
// LogUtil.d(TAG, " onRewardVideoCached onError ");
//
// if (videoAdStatusListener != null) {
// videoAdStatusListener.adFail();
// }
// }
// }
// });
// }
//
// /**
// * 激励视频交互回调
// */
// private TTRewardedAdListener mTTRewardedAdListener = new TTRewardedAdListener() {
//
// /**
// * 广告的展示回调 每个广告仅回调一次
// */
// public void onRewardedAdShow() {
// LogUtil.d(TAG, "onRewardedAdShow");
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ZERO, "", "");
//
//
// }
//
// /**
// * 注意Admob的激励视频不会回调该方法
// */
// @Override
// public void onRewardClick() {
// LogUtil.d(TAG, "onRewardClick");
//
// if (AppConfig.needReportClickAdEvent) {
// TrackManager.getInstance().reportClickAdEvent();
// }
//
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_TWO, "", "");
//
// if (isClickScreen) {
// // 防止重复
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_FOUR, "", "");
// isClickScreen = false;
// }
// if (videoAdStatusListener != null) {
// videoAdStatusListener.adDownload();
// }
// }
//
// /**
// * 广告关闭的回调
// */
// public void onRewardedAdClosed() {
// LogUtil.d(TAG, "onRewardedAdClosed");
//
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_THREE, "", "");
//
// TrackManager.getInstance().reportAddCoinMsg(activity, getAdMapVO(carrierType, Constant.AD_SOURCE_GROMORE, extraId, curCoin));
//
// if (mttRewardAd != null) {
//// LogUtil.d(TAG, "adNetworkPlatformId: " + mttRewardAd.getAdNetworkPlatformId()); //获取展示广告对应的adn的值 具体值见NetworkPlatformConst类 -3: 无权限 -2: 暂无数据
//// LogUtil.d(TAG, "adNetworkRitId:" + mttRewardAd.getAdNetworkRitId()); //获取展示广告对应的代码位 具体值见NetworkPlatformConst类 "-3": 无权限 "-2"
//// LogUtil.d(TAG, "preEcpm: " + mttRewardAd.getPreEcpm()); //获取展示广告预估ecpm价格,单位是分 具体值见NetworkPlatformConst类 "-3": 无权限 "-2": 暂无数据 "-1":平台未有填写的预估ecpm价格
// HashMap<String, Object> vo = new HashMap<>();
// vo.put("adcode",mttRewardAd.getAdNetworkRitId());
// vo.put("ecpm",mttRewardAd.getPreEcpm());
// vo.put("adSource",mttRewardAd.getAdNetworkPlatformId());
// vo.put("adType",Constant.GRO_MORE_ADTYPE2);
// TrackManager.getInstance().cmtGroMoreInfo(vo);
// }
//
// if (videoAdStatusListener != null) {
// videoAdStatusListener.adSuccess();
// }
// }
//
// /**
// * 视频播放完毕的回调 Admob广告不存在该回调
// */
// public void onVideoComplete() {
// LogUtil.d(TAG, "onVideoComplete");
//
// }
//
// /**
// * 视频播放失败的回调 - Mintegral GDT Admob广告不存在该回调
// */
// public void onVideoError() {
// LogUtil.d(TAG, "onVideoError");
// TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_GROMORE, Constant.EVENT_TYPE_ONE, "999999", "VideoError");
//
// if (videoAdStatusListener != null) {
// videoAdStatusListener.adFail();
// }
// }
//
// /**
// * 激励视频播放完毕,验证是否有效发放奖励的回调
// */
// public void onRewardVerify(RewardItem rewardItem) {
// Map<String, Object> customData = rewardItem.getCustomData();
// if (customData != null) {
// String adnName = (String) customData.get(RewardItem.KEY_ADN_NAME);
// switch (adnName) {
// case RewardItem.KEY_GDT:
// LogUtil.d(TAG, "rewardItem gdt: " + customData.get(RewardItem.KEY_GDT_TRANS_ID));
// break;
// }
// }
// }
//
// /**
// * - Mintegral GDT Admob广告不存在该回调
// */
// @Override
// public void onSkippedVideo() {
//
// }
//
// };
//
// public void setVideoAdStatusListener(VideoAdStatusListener videoAdStatusListener) {
// this.videoAdStatusListener = videoAdStatusListener;
// }
//
//}
......@@ -174,6 +174,10 @@ public class CsjVideoAdManager extends BaseVideoAd {
}
}
@Override
public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) {
}
//视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
@Override
public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
......
......@@ -105,6 +105,9 @@ class KsVideoAdManager private constructor(activity: Activity) :
// ToastUtil.show(activity, "快手激励视频⼴告播放完成")
}
override fun onVideoSkipToEnd(p0: Long) {
}
override fun onVideoPlayStart() {
// ToastUtil.show(activity, "快手激励视频⼴告播放开始")
}
......@@ -115,6 +118,9 @@ class KsVideoAdManager private constructor(activity: Activity) :
TrackManager.getInstance().addCallImp(Constant.AD_SOURCE_KS, Constant.EVENT_TYPE_ZERO, "", "")
}
override fun onRewardStepVerify(p0: Int, p1: Int) {
}
})
// PlayConfig默认竖屏播放,传null
mRewardVideoAd!!.showRewardVideoAd(activity, null)
......
......@@ -41,7 +41,7 @@ public class VideoAdingManager {
private ShVideoAdManager shVideoAdManager;
private CsjFullVideoAdManager csjFullVideoAdManager;
private KsVideoAdManager ksVideoAdManager;
private CsjGroMoreVideoAdManager csjGroMoreVideoAdManager;
// private CsjGroMoreVideoAdManager csjGroMoreVideoAdManager;
private OwVideoAdManager owVideoAdManager;
private int wnWeight;
......@@ -91,7 +91,7 @@ public class VideoAdingManager {
shVideoAdManager = ShVideoAdManager.Companion.getInstance(activity);
csjFullVideoAdManager = CsjFullVideoAdManager.getInstance(activity);
ksVideoAdManager = KsVideoAdManager.Companion.getInstance(activity);
csjGroMoreVideoAdManager = CsjGroMoreVideoAdManager.getInstance(activity);
// csjGroMoreVideoAdManager = CsjGroMoreVideoAdManager.getInstance(activity);
owVideoAdManager = OwVideoAdManager.Companion.getInstance();
weightList = new ArrayList<>();
}
......@@ -453,11 +453,11 @@ public class VideoAdingManager {
owVideoAdManager.onDestroy();
owVideoAdManager = null;
}
if (csjGroMoreVideoAdManager != null) {
csjGroMoreVideoAdManager.setVideoAdStatusListener(null);
csjGroMoreVideoAdManager.onDestroy();
csjGroMoreVideoAdManager = null;
}
// if (csjGroMoreVideoAdManager != null) {
// csjGroMoreVideoAdManager.setVideoAdStatusListener(null);
// csjGroMoreVideoAdManager.onDestroy();
// csjGroMoreVideoAdManager = null;
// }
if (mReceiverBroadcastReceiver != null) {
activity.stopService(new Intent(activity, AppInstallService.class));
......@@ -808,44 +808,45 @@ public class VideoAdingManager {
}
});
owVideoAdManager.loadAd(activity, bean.getCurCoin(), bean.getCarrierType(), bean.getExtraId());
} else if (TextUtils.equals(videoAdType, Constant.GROMORE_VEDIO_AD)) {
// GROMORE广告激励视频
if (csjGroMoreVideoAdManager == null) {
if (activity == null) {
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerError(Constant.GROMORE_VEDIO_AD);
}
return;
}
csjGroMoreVideoAdManager = CsjGroMoreVideoAdManager.getInstance(activity);
}
csjGroMoreVideoAdManager.setVideoAdStatusListener(new VideoAdStatusListener() {
@Override
public void adSuccess() {
AppConfig.groMoreVideoAdCount--;
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerSuccess(Constant.GROMORE_VEDIO_AD);
}
}
@Override
public void adFail() {
if (videoAdingListener != null) {
videoAdingListener.videoAdingListenerFail(Constant.GROMORE_VEDIO_AD);
}
}
@Override
public void adDownload() {
isVideoAdDownload = true;
// 注册下载任务监听
registerBroad();
}
});
csjGroMoreVideoAdManager.loadAd(activity, bean.getCurCoin(), bean.getCarrierType(), bean.getExtraId());
}
// else if (TextUtils.equals(videoAdType, Constant.GROMORE_VEDIO_AD)) {
// // GROMORE广告激励视频
// if (csjGroMoreVideoAdManager == null) {
// if (activity == null) {
// if (videoAdingListener != null) {
// videoAdingListener.videoAdingListenerError(Constant.GROMORE_VEDIO_AD);
// }
// return;
// }
// csjGroMoreVideoAdManager = CsjGroMoreVideoAdManager.getInstance(activity);
// }
// csjGroMoreVideoAdManager.setVideoAdStatusListener(new VideoAdStatusListener() {
// @Override
// public void adSuccess() {
// AppConfig.groMoreVideoAdCount--;
// if (videoAdingListener != null) {
// videoAdingListener.videoAdingListenerSuccess(Constant.GROMORE_VEDIO_AD);
// }
// }
//
// @Override
// public void adFail() {
// if (videoAdingListener != null) {
// videoAdingListener.videoAdingListenerFail(Constant.GROMORE_VEDIO_AD);
// }
// }
//
// @Override
// public void adDownload() {
// isVideoAdDownload = true;
//
// // 注册下载任务监听
// registerBroad();
// }
// });
//
// csjGroMoreVideoAdManager.loadAd(activity, bean.getCurCoin(), bean.getCarrierType(), bean.getExtraId());
// }
} catch (Exception e) {
e.printStackTrace();
if (videoAdingListener != null) {
......
......@@ -59,6 +59,10 @@ public class BxmPlayVideo {
public void onRewardVideoCached() {
}
@Override
public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) {
}
});
} catch (Throwable e) {
appNative.onError(0);
......
package com.mints.goodmoney.manager
import android.app.Application
import com.bytedance.applog.AppLog
import com.bytedance.applog.InitConfig
import com.bytedance.applog.util.UriConstants
import com.bytedance.hume.readapk.HumeSDK
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.utils.LogUtil
import com.mints.library.utils.CommonUtils
private val TAG = CsjAppLogManager::class.java.simpleName
object CsjAppLogManager {
fun init(application: Application) {
/* 初始化开始 */
val config = InitConfig(TtCsjAdManager.TT_AD_APPID, CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME") + HumeSDK.getChannel(MintsApplication.getContext())) // appid和渠道,appid如不清楚请联系对接同学
//上报域名只支持中国
config.setUriConfig(UriConstants.DEFAULT)
// 是否在控制台输出日志,可用于观察用户行为日志上报情况
config.setLogger { msg, t -> LogUtil.d(TAG, "$msg -> $t") }
config.setAutoStart(true)
AppLog.init(application, config)
/* 初始化结束 */
/* 自定义 “用户公共属性”(可选,初始化后调用, key相同会覆盖)
关于自定义 “用户公共属性” 请注意:1. 上报机制是随着每一次日志发送进行提交,默认的日志发送频率是1分钟,所以如果在一分钟内连续修改自定义用户公共属性,,按照日志发送前的最后一次修改为准, 2. 不推荐高频次修改,如每秒修改一次 */
//Map<String,Object> headerMap = new HashMap<String, Object>();
//headerMap.put("your_custom_key","your_custom_value");
//AppLog.setHeaderInfo((HashMap<String, Object>)headerMap);
//移除公共属性
//AppLog.removeHeaderInfo("your_custom_key");
}
}
\ No newline at end of file
//package com.mints.goodmoney.manager
//
//import android.app.Application
//import com.bytedance.applog.AppLog
//import com.bytedance.applog.InitConfig
//import com.bytedance.applog.util.UriConstants
//import com.bytedance.hume.readapk.HumeSDK
//import com.mints.goodmoney.MintsApplication
//import com.mints.goodmoney.utils.LogUtil
//import com.mints.library.utils.CommonUtils
//
//private val TAG = CsjAppLogManager::class.java.simpleName
//
//object CsjAppLogManager {
//
// fun init(application: Application) {
// /* 初始化开始 */
// val config = InitConfig(TtCsjAdManager.TT_AD_APPID, CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME") + HumeSDK.getChannel(MintsApplication.getContext())) // appid和渠道,appid如不清楚请联系对接同学
//
// //上报域名只支持中国
// config.setUriConfig(UriConstants.DEFAULT)
//
// // 是否在控制台输出日志,可用于观察用户行为日志上报情况
// config.setLogger { msg, t -> LogUtil.d(TAG, "$msg -> $t") }
//
// config.setAutoStart(true)
// AppLog.init(application, config)
// /* 初始化结束 */
//
// /* 自定义 “用户公共属性”(可选,初始化后调用, key相同会覆盖)
// 关于自定义 “用户公共属性” 请注意:1. 上报机制是随着每一次日志发送进行提交,默认的日志发送频率是1分钟,所以如果在一分钟内连续修改自定义用户公共属性,,按照日志发送前的最后一次修改为准, 2. 不推荐高频次修改,如每秒修改一次 */
// //Map<String,Object> headerMap = new HashMap<String, Object>();
// //headerMap.put("your_custom_key","your_custom_value");
// //AppLog.setHeaderInfo((HashMap<String, Object>)headerMap);
//
// //移除公共属性
// //AppLog.removeHeaderInfo("your_custom_key");
// }
//
//}
\ No newline at end of file
......@@ -8,7 +8,7 @@ object CsjGroMoreManager {
const val AD_UNIT_ID = "946167770"
fun init(application: MintsApplication) {
TTGroMoreAdManagerHolder.init(application)
// TTGroMoreAdManagerHolder.init(application)
}
}
\ No newline at end of file
......@@ -3,9 +3,6 @@ package com.mints.goodmoney.manager;
import android.content.Context;
import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.cmcm.cmgame.CmGameSdk;
import com.cmcm.cmgame.gamedata.CmGameAppInfo;
import com.mints.goodmoney.BuildConfig;
......@@ -55,20 +52,30 @@ public class LiebaoManager {
* 游戏SDK初始化
*/
public void initCmGameSdk() {
final String adAppId = TtCsjAdManager.TT_AD_APPID; // 穿山甲appid
TTAdSdk.init(context,
new TTAdConfig.Builder()
.appId(adAppId)
.useTextureView(false) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.appName(TtCsjAdManager.TT_AD_NAME)
.titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowShowNotify(true) //是否允许sdk展示通知栏提示
.allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.debug(BuildConfig.DEBUG) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.supportMultiProcess(false) //是否支持多进程,true支持
.build());
// final String adAppId = TtCsjAdManager.TT_AD_APPID; // 穿山甲appid
// TTAdSdk.init(context,
// new TTAdConfig.Builder()
// .appId(adAppId)
// .useTextureView(false) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
// .appName(TtCsjAdManager.TT_AD_NAME)
// .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
// .allowShowNotify(true) //是否允许sdk展示通知栏提示
// .allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
// .debug(BuildConfig.DEBUG) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
// .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
// .supportMultiProcess(false) //是否支持多进程,true支持
// .build(), new TTAdSdk.InitCallback() {
// @Override
// public void success() {
//
// }
//
// @Override
// public void fail(int i, String s) {
//
// }
// });
CmGameAppInfo cmGameAppInfo = new CmGameAppInfo();
......
......@@ -196,6 +196,11 @@ public class ReadToutiaoAD {
LogUtils.i("ToutiaoAd", "rewardVideoAd video cached");
}
@Override
public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) {
}
//视频广告素材加载到,如title,视频url等,不包括视频文件
@Override
public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
......
package com.mints.goodmoney.manager;
import android.app.Activity;
import android.content.Context;
import android.provider.Settings;
import com.bytedance.hume.readapk.HumeSDK;
import com.bytedance.msdk.api.TTAdConfig;
import com.bytedance.msdk.api.TTAdConstant;
import com.bytedance.msdk.api.TTMediationAdSdk;
import com.bytedance.msdk.api.UserInfoForSegment;
import com.mints.goodmoney.BuildConfig;
import com.mints.goodmoney.MintsApplication;
import com.mints.goodmoney.common.Constant;
import com.mints.library.utils.CommonUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 可以用一个单例来保存TTAdManager实例,在需要初始化sdk的时候调用
*/
public class TTGroMoreAdManagerHolder {
public static final String TT_AD_APPID = "5113521";
public static final String TT_AD_NAME = Constant.MINTS_APP_NAME;
private static boolean sInit;
public static void init(Context context) {
doInit(context);
}
public static void initUnitySdkBanner(Activity activity) {
TTMediationAdSdk.initUnityForBanner(activity);
}
//step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
private static void doInit(Context context) {
if (!sInit) {
TTMediationAdSdk.initialize(context, buildConfig(context));
sInit = true;
}
}
private static TTAdConfig buildConfig(Context context) {
UserInfoForSegment userInfo = new UserInfoForSegment();
userInfo.setUserId(UserManager.getInstance().getUserID());
userInfo.setGender(UserInfoForSegment.GENDER_UNKNOWN);
userInfo.setChannel(CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME"));
userInfo.setSubChannel(HumeSDK.getChannel(MintsApplication.getContext()));
userInfo.setAge(999);
userInfo.setUserValueGroup("msdk demo user value group");
Map<String, String> customInfos = new HashMap<>();
// customInfos.put("aaaa", "test111");
// customInfos.put("bbbb", "test222");
userInfo.setCustomInfos(customInfos);
return new TTAdConfig.Builder()
.appId(TT_AD_APPID) //必填 ,不能为空
.appName(TT_AD_NAME) //必填,不能为空
.openAdnTest(false)//开启第三方ADN测试时需要设置为true,会每次重新拉去最新配置,release 包情况下必须关闭.默认false
.isPanglePaid(false)//是否为费用户
.setPublisherDid(getAndroidId(context)) //用户自定义device_id
.openDebugLog(BuildConfig.DEBUG) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.usePangleTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.setPangleTitleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowPangleShowNotify(true) //是否允许sdk展示通知栏提示
.allowPangleShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.setPangleDirectDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.needPangleClearTaskReset()//特殊机型过滤,部分机型出现包解析失败问题(大部分是三星)。参数取android.os.Build.MODEL
.setUserInfoForSegment(userInfo) // 设置流量分组的信息
.build();
}
public static String getAndroidId(Context context) {
String androidId = null;
try {
androidId = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
} catch (Exception e) {
e.printStackTrace();
}
return androidId;
}
}
//package com.mints.goodmoney.manager;
//
//import android.app.Activity;
//import android.content.Context;
//import android.provider.Settings;
//
//import com.bytedance.hume.readapk.HumeSDK;
//import com.bytedance.msdk.api.TTAdConfig;
//import com.bytedance.msdk.api.TTAdConstant;
//import com.bytedance.msdk.api.TTMediationAdSdk;
//import com.bytedance.msdk.api.UserInfoForSegment;
//import com.mints.goodmoney.BuildConfig;
//import com.mints.goodmoney.MintsApplication;
//import com.mints.goodmoney.common.Constant;
//import com.mints.library.utils.CommonUtils;
//
//import java.util.HashMap;
//import java.util.Map;
//
//
///**
// * 可以用一个单例来保存TTAdManager实例,在需要初始化sdk的时候调用
// */
//public class TTGroMoreAdManagerHolder {
//
// public static final String TT_AD_APPID = "5113521";
// public static final String TT_AD_NAME = Constant.MINTS_APP_NAME;
//
// private static boolean sInit;
//
// public static void init(Context context) {
// doInit(context);
// }
//
// public static void initUnitySdkBanner(Activity activity) {
// TTMediationAdSdk.initUnityForBanner(activity);
// }
//
//
// //step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
// private static void doInit(Context context) {
// if (!sInit) {
// TTMediationAdSdk.initialize(context, buildConfig(context));
// sInit = true;
// }
// }
//
// private static TTAdConfig buildConfig(Context context) {
// UserInfoForSegment userInfo = new UserInfoForSegment();
// userInfo.setUserId(UserManager.getInstance().getUserID());
// userInfo.setGender(UserInfoForSegment.GENDER_UNKNOWN);
// userInfo.setChannel(CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME"));
// userInfo.setSubChannel(HumeSDK.getChannel(MintsApplication.getContext()));
// userInfo.setAge(999);
// userInfo.setUserValueGroup("msdk demo user value group");
//
// Map<String, String> customInfos = new HashMap<>();
//// customInfos.put("aaaa", "test111");
//// customInfos.put("bbbb", "test222");
// userInfo.setCustomInfos(customInfos);
// return new TTAdConfig.Builder()
// .appId(TT_AD_APPID) //必填 ,不能为空
// .appName(TT_AD_NAME) //必填,不能为空
// .openAdnTest(false)//开启第三方ADN测试时需要设置为true,会每次重新拉去最新配置,release 包情况下必须关闭.默认false
// .isPanglePaid(false)//是否为费用户
// .setPublisherDid(getAndroidId(context)) //用户自定义device_id
// .openDebugLog(BuildConfig.DEBUG) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
// .usePangleTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
// .setPangleTitleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
// .allowPangleShowNotify(true) //是否允许sdk展示通知栏提示
// .allowPangleShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
// .setPangleDirectDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
// .needPangleClearTaskReset()//特殊机型过滤,部分机型出现包解析失败问题(大部分是三星)。参数取android.os.Build.MODEL
// .setUserInfoForSegment(userInfo) // 设置流量分组的信息
// .build();
// }
//
// public static String getAndroidId(Context context) {
// String androidId = null;
// try {
// androidId = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
// } catch (Exception e) {
// e.printStackTrace();
// }
// return androidId;
// }
//
//}
......@@ -6,10 +6,9 @@ import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.mints.goodmoney.BuildConfig;
import com.mints.goodmoney.MintsApplication;
import com.mints.goodmoney.common.Constant;
import com.mints.goodmoney.mvp.model.AdcodeBean;
import com.mints.library.utils.CommonUtils;
import com.mints.goodmoney.utils.LogUtil;
/**
* 穿山甲广告
......@@ -81,7 +80,17 @@ public class TtCsjAdManager {
//step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
private static void doInit(Context context) {
if (!sInit) {
TTAdSdk.init(context, buildConfig(context));
TTAdSdk.init(context, buildConfig(context), new TTAdSdk.InitCallback() {
@Override
public void success() {
LogUtil.d("TTAdSdk init success");
}
@Override
public void fail(int i, String s) {
LogUtil.d("TTAdSdk init fail " + i + " " + s);
}
});
sInit = true;
}
}
......@@ -106,7 +115,7 @@ public class TtCsjAdManager {
.allowShowNotify(true) //是否允许sdk展示通知栏提示
.allowShowPageWhenScreenLock(false) //是否在锁屏场景支持展示广告落地页
.debug(logFlag) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_4G, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.supportMultiProcess(false)//是否支持多进程
//.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。
.build();
......
......@@ -3,23 +3,16 @@ package com.mints.goodmoney.ui.activitys
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import com.bytedance.hume.readapk.HumeSDK
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.banner.BannerManager
import com.mints.goodmoney.ad.video.CsjGroMoreVideoAdManager
import com.mints.goodmoney.common.AppConfig
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.TtCsjAdManager
import com.mints.goodmoney.ui.activitys.base.BaseActivity
import com.mints.goodmoney.ui.adapter.AdBannerAdapter
import com.mints.goodmoney.utils.ToastUtil
import com.mints.library.utils.CommonUtils
import com.mints.library.utils.ConstantUtil
import kotlinx.android.synthetic.main.activity_aboutus.*
import kotlinx.android.synthetic.main.fragment_main_my.*
import kotlinx.android.synthetic.main.header_layout.*
/**
......
......@@ -11,7 +11,6 @@ import android.view.KeyEvent
import android.view.View
import androidx.core.content.ContextCompat
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreExpressManager
import com.mints.goodmoney.ad.express.PreLoadExpressManager
import com.mints.goodmoney.ad.video.VideoAdingManager
import com.mints.goodmoney.common.AppConfig
......
......@@ -3,8 +3,9 @@ package com.mints.goodmoney.ui.activitys
import android.os.Bundle
import android.view.View
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreCarrierExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadCarrierExpressManager
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.TtCsjAdManager
import com.mints.goodmoney.mvp.model.MealBean
import com.mints.goodmoney.mvp.presenters.FoodSubsidyPresenter
import com.mints.goodmoney.mvp.views.FoodSubsidyView
......@@ -87,8 +88,8 @@ class FoodSubsidyActivity : BaseActivity(), View.OnClickListener, FoodSubsidyVie
}
// 预加载信息流
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_EAT)
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_EAT)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
}
......@@ -97,11 +98,11 @@ class FoodSubsidyActivity : BaseActivity(), View.OnClickListener, FoodSubsidyVie
*/
private fun initExpress() {
try {
if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
if (TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout != null) {
if (flSubsidykAd != null) {
flSubsidykAd.removeAllViews()
// flSubsidykAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
flSubsidykAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
flSubsidykAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
// flSubsidykAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
}
}
} catch (e: Exception) {
......
......@@ -5,7 +5,6 @@ import android.view.View
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreCarrierExpressManager
import com.mints.goodmoney.ad.video.VideoAdingManager
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.ad.express.TTPreLoadCarrierExpressManager
......@@ -184,11 +183,12 @@ class MorningClockActivity : BaseActivity(), View.OnClickListener, MorningClockV
*/
private fun initExpress() {
try {
if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
// if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
if (TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout != null) {
if (flMorningClockAd != null) {
flMorningClockAd.removeAllViews()
// flMorningClockAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
flMorningClockAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
flMorningClockAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
// flMorningClockAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
}
}
} catch (e: Exception) {
......
package com.mints.goodmoney.ui.activitys
import android.text.TextUtils
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import com.bytedance.sdk.openadsdk.AdSlot
import com.bytedance.sdk.openadsdk.TTAdNative
import com.bytedance.sdk.openadsdk.TTSplashAd
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.TTNativeExpressManager
import com.mints.goodmoney.manager.TtCsjAdManager
import com.mints.goodmoney.manager.UserManager
import com.mints.goodmoney.ui.activitys.base.BaseActivity
import com.mints.library.net.netstatus.NetUtils
import com.mints.library.utils.CommonUtils
import net.grandcentrix.tray.AppPreferences
private val TAG = SplashCsjADActivity::class.java.simpleName
......@@ -18,6 +24,9 @@ private val TAG = SplashCsjADActivity::class.java.simpleName
* 后台返回时每次都展示 快手广告
*/
class SplashCsjADActivity : BaseActivity() {
private val ps by lazy { AppPreferences(context) }
private var container: ViewGroup? = null
private var mIsPaused = false
var canJump = false
......@@ -143,7 +152,18 @@ class SplashCsjADActivity : BaseActivity() {
}
private fun readyGoOtherActivity() {
finish()
val customVersion: Int = ps.getInt(Constant.CUSTOM_VERSION, 0)
val isFirstEnter: Boolean = ps.getBoolean(Constant.ISFIRSTENTER + customVersion, true)
if (isFirstEnter) {
readyGoThenKill(GuideActivity::class.java)
} else {
val channel = CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME")
if (TextUtils.equals(channel, Constant.CHANNEL_SHARE) && !UserManager.getInstance().userIsLogin()) {
readyGo(WxLoginActivity::class.java)
} else {
readyGoThenKill(MainActivity::class.java)
}
}
}
}
\ No newline at end of file
package com.mints.goodmoney.ui.activitys;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.FrameLayout;
import com.bytedance.msdk.adapter.pangle.PangleNetworkRequestInfo;
import com.bytedance.msdk.api.AdError;
import com.bytedance.msdk.api.AdSlot;
import com.bytedance.msdk.api.NetworkPlatformConst;
import com.bytedance.msdk.api.TTNetworkRequestInfo;
import com.bytedance.msdk.api.splash.TTSplashAd;
import com.bytedance.msdk.api.splash.TTSplashAdListener;
import com.bytedance.msdk.api.splash.TTSplashAdLoadCallback;
import com.mints.goodmoney.MintsApplication;
import com.mints.goodmoney.R;
import com.mints.goodmoney.common.Constant;
import com.mints.goodmoney.common.DeviceInfo;
import com.mints.goodmoney.manager.TrackManager;
import com.mints.goodmoney.manager.TtCsjAdManager;
import com.mints.goodmoney.manager.UserManager;
import com.mints.goodmoney.ui.activitys.base.BaseActivity;
import com.mints.goodmoney.utils.LogUtil;
import com.mints.library.utils.CommonUtils;
import com.yilan.sdk.ui.little.YLLittleVideoFragment;
import net.grandcentrix.tray.AppPreferences;
import java.util.HashMap;
/**
* GroMore开屏广告Activity示例
*/
public class SplashGroMoreActivity extends BaseActivity {
private static final String TAG = "SplashGroMoreActivity";
private TTSplashAd mTTSplashAd;
private FrameLayout mSplashContainer;
//是否强制跳转到主页面
private boolean mForceGoMain;
private String mAdUnitId = "887459392";
//开屏广告加载超时时间,建议大于1000,这里为了冷启动第一次加载到广告并且展示,示例设置了2000ms
private static final int AD_TIME_OUT = 4000;
private static final int MSG_GO_MAIN = 1;
//开屏广告是否已经加载
private boolean mHasLoaded;
// 百度开屏广告点击跳转落地页后倒计时不暂停,即使在看落地页,倒计时结束后仍然会强制跳转,需要特殊处理:
// 检测到广告被点击,且走了activity的onPaused证明跳转到了落地页,这时候onAdDismiss回调中不进行跳转,而是在activity的onResume中跳转。
private boolean isBaiduSplashAd = false;
private boolean baiduSplashAdClicked = false;
private boolean onPaused = false;
private AppPreferences ps;
@Override
protected int getContentViewLayoutID() {
return R.layout.activity_splash_gromore;
}
@Override
protected void initViewsAndEvents() {
if (!isTaskRoot()) {
//点击Home键后再点击App图标,会回到原来的界面。今天重新打包后,但是在Debug模式下,一切正常,
// 但是把打完包的apk(Release)安装在其他手机上时,回到桌面后点击图标会重新打开启动页
finish();
return;
}
TrackManager.getInstance().getCommonHallBaseMsg();
TrackManager.getInstance().firstApiWithUid();
// 校验APP签名
checkAppSign();
}
/**
* 加载开屏广告
*/
private void loadSplashAd() {
if (mAdUnitId == null) return;
/**
* 注:每次加载开屏广告的时候需要新建一个TTSplashAd,否则可能会出现广告填充问题
* ( 例如:mTTSplashAd = new TTSplashAd(this, mAdUnitId);)
*/
mTTSplashAd = new TTSplashAd(this, mAdUnitId);
mTTSplashAd.setTTAdSplashListener(mSplashAdListener);
//step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
AdSlot adSlot = new AdSlot.Builder()
.setImageAdSize(1080, 1920) // 既适用于原生类型,也适用于模版类型。
.build();
//自定义兜底方案 选择使用
TTNetworkRequestInfo ttNetworkRequestInfo;
//穿山甲兜底
ttNetworkRequestInfo = new PangleNetworkRequestInfo(TtCsjAdManager.TT_AD_APPID, "887483103");
//gdt兜底
// ttNetworkRequestInfo = new GdtNetworkRequestInfo("1101152570", "8863364436303842593");
//ks兜底
// ttNetworkRequestInfo = new KsNetworkRequestInfo("90009", "4000000042");
//百度兜底
// ttNetworkRequestInfo = new BaiduNetworkRequestInfo("e866cfb0", "2058622");
//step4:请求广告,调用开屏广告异步请求接口,对请求回调的广告作渲染处理
mTTSplashAd.loadAd(adSlot, ttNetworkRequestInfo, new TTSplashAdLoadCallback() {
@Override
public void onSplashAdLoadFail(AdError adError) {
LogUtil.d(TAG, adError.message);
mHasLoaded = true;
Log.e(TAG, "load splash ad error : " + adError.code + ", " + adError.message);
// 获取本次waterfall加载中,加载失败的adn错误信息。
if (mTTSplashAd != null)
LogUtil.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
goToMainActivity();
}
@Override
public void onSplashAdLoadSuccess() {
if (mTTSplashAd != null) {
mTTSplashAd.showAd(mSplashContainer);
isBaiduSplashAd = mTTSplashAd.getAdNetworkPlatformId() == NetworkPlatformConst.SDK_NAME_BAIDU;
// 获取本次waterfall加载中,加载失败的adn错误信息。
if (mTTSplashAd != null) {
HashMap<String, Object> vo = new HashMap<>();
vo.put("adcode",mTTSplashAd.getAdNetworkRitId());
vo.put("ecpm",mTTSplashAd.getPreEcpm());
vo.put("adSource",mTTSplashAd.getAdNetworkPlatformId());
vo.put("adType",Constant.GRO_MORE_ADTYPE0);
TrackManager.getInstance().cmtGroMoreInfo(vo);
}
}
Log.e(TAG, "load splash ad success ");
}
@Override
public void onAdLoadTimeout() {
mHasLoaded = true;
Log.i(TAG, "开屏广告加载超时.......");
// 获取本次waterfall加载中,加载失败的adn错误信息。
if (mTTSplashAd != null)
LogUtil.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
goToMainActivity();
}
}, AD_TIME_OUT);
}
TTSplashAdListener mSplashAdListener = new TTSplashAdListener() {
@Override
public void onAdClicked() {
baiduSplashAdClicked = true;
LogUtil.d(TAG, "onAdClicked");
}
@Override
public void onAdShow() {
LogUtil.d(TAG, "onAdShow");
}
@Override
public void onAdSkip() {
LogUtil.d(TAG, "onAdSkip");
goToMainActivity();
}
@Override
public void onAdDismiss() {
LogUtil.d(TAG, "onAdDismiss");
if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
// 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要在onResume中跳转主页。
return;
}
goToMainActivity();
}
};
@Override
protected void onResume() {
//判断是否该跳转到主页面
if (mForceGoMain) {
goToMainActivity();
}
if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
// 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要自己在onResume中跳转主页。
goToMainActivity();
}
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
onPaused = true;
}
@Override
protected void onStop() {
super.onStop();
mForceGoMain = true;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mTTSplashAd != null) {
mTTSplashAd.destroy();
}
}
/**
* 校验App签名
*/
private void checkAppSign() {
DeviceInfo deviceInfo = DeviceInfo.Companion.getInstance();
if (!deviceInfo.getSignInfo()) {
getBaseApplication().exitApp();
} else {
YLLittleVideoFragment.preloadVideo();
try {
mSplashContainer = findViewById(R.id.splash_container);
ps = new AppPreferences(this);
//加载开屏广告
loadSplashAd();
} catch (Exception e) {
goToMainActivity();
}
}
}
@Override
protected boolean isApplyKitKatTranslucency() {
return false;
}
/**
* 跳转到主页面
*/
private void goToMainActivity() {
int customVersion = ps.getInt(Constant.CUSTOM_VERSION, 0);
boolean isFirstEnter = ps.getBoolean(Constant.ISFIRSTENTER + customVersion, true);
if (isFirstEnter) {
readyGoThenKill(GuideActivity.class);
} else {
String channel = CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME");
if (TextUtils.equals(channel, Constant.CHANNEL_SHARE) && !UserManager.getInstance().userIsLogin()) {
readyGo(WxLoginActivity.class);
} else {
readyGoThenKill(MainActivity.class);
}
}
mSplashContainer.removeAllViews();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
}
//package com.mints.goodmoney.ui.activitys;
//
//import android.text.TextUtils;
//import android.util.Log;
//import android.view.KeyEvent;
//import android.widget.FrameLayout;
//
//import com.bytedance.msdk.adapter.pangle.PangleNetworkRequestInfo;
//import com.bytedance.msdk.api.AdError;
//import com.bytedance.msdk.api.AdSlot;
//import com.bytedance.msdk.api.NetworkPlatformConst;
//import com.bytedance.msdk.api.TTNetworkRequestInfo;
//import com.bytedance.msdk.api.splash.TTSplashAd;
//import com.bytedance.msdk.api.splash.TTSplashAdListener;
//import com.bytedance.msdk.api.splash.TTSplashAdLoadCallback;
//import com.mints.goodmoney.MintsApplication;
//import com.mints.goodmoney.R;
//import com.mints.goodmoney.common.Constant;
//import com.mints.goodmoney.common.DeviceInfo;
//import com.mints.goodmoney.manager.TrackManager;
//import com.mints.goodmoney.manager.TtCsjAdManager;
//import com.mints.goodmoney.manager.UserManager;
//import com.mints.goodmoney.ui.activitys.base.BaseActivity;
//import com.mints.goodmoney.utils.LogUtil;
//import com.mints.library.utils.CommonUtils;
//import com.yilan.sdk.ui.little.YLLittleVideoFragment;
//
//import net.grandcentrix.tray.AppPreferences;
//
//import java.util.HashMap;
//
//
///**
// * GroMore开屏广告Activity示例
// */
//public class SplashGroMoreActivity extends BaseActivity {
// private static final String TAG = "SplashGroMoreActivity";
//// private TTSplashAd mTTSplashAd;
// private FrameLayout mSplashContainer;
// //是否强制跳转到主页面
// private boolean mForceGoMain;
// private String mAdUnitId = "887459392";
//
// //开屏广告加载超时时间,建议大于1000,这里为了冷启动第一次加载到广告并且展示,示例设置了2000ms
// private static final int AD_TIME_OUT = 4000;
// private static final int MSG_GO_MAIN = 1;
// //开屏广告是否已经加载
// private boolean mHasLoaded;
//
// // 百度开屏广告点击跳转落地页后倒计时不暂停,即使在看落地页,倒计时结束后仍然会强制跳转,需要特殊处理:
// // 检测到广告被点击,且走了activity的onPaused证明跳转到了落地页,这时候onAdDismiss回调中不进行跳转,而是在activity的onResume中跳转。
// private boolean isBaiduSplashAd = false;
// private boolean baiduSplashAdClicked = false;
// private boolean onPaused = false;
// private AppPreferences ps;
//
// @Override
// protected int getContentViewLayoutID() {
// return R.layout.activity_splash_gromore;
// }
//
// @Override
// protected void initViewsAndEvents() {
// if (!isTaskRoot()) {
// //点击Home键后再点击App图标,会回到原来的界面。今天重新打包后,但是在Debug模式下,一切正常,
// // 但是把打完包的apk(Release)安装在其他手机上时,回到桌面后点击图标会重新打开启动页
// finish();
// return;
// }
// TrackManager.getInstance().getCommonHallBaseMsg();
// TrackManager.getInstance().firstApiWithUid();
//
// // 校验APP签名
// checkAppSign();
// }
//
// /**
// * 加载开屏广告
// */
// private void loadSplashAd() {
// if (mAdUnitId == null) return;
// /**
// * 注:每次加载开屏广告的时候需要新建一个TTSplashAd,否则可能会出现广告填充问题
// * ( 例如:mTTSplashAd = new TTSplashAd(this, mAdUnitId);)
// */
// mTTSplashAd = new TTSplashAd(this, mAdUnitId);
// mTTSplashAd.setTTAdSplashListener(mSplashAdListener);
//
// //step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
// AdSlot adSlot = new AdSlot.Builder()
// .setImageAdSize(1080, 1920) // 既适用于原生类型,也适用于模版类型。
// .build();
//
// //自定义兜底方案 选择使用
// TTNetworkRequestInfo ttNetworkRequestInfo;
// //穿山甲兜底
// ttNetworkRequestInfo = new PangleNetworkRequestInfo(TtCsjAdManager.TT_AD_APPID, "887483103");
// //gdt兜底
//// ttNetworkRequestInfo = new GdtNetworkRequestInfo("1101152570", "8863364436303842593");
// //ks兜底
//// ttNetworkRequestInfo = new KsNetworkRequestInfo("90009", "4000000042");
// //百度兜底
//// ttNetworkRequestInfo = new BaiduNetworkRequestInfo("e866cfb0", "2058622");
//
//
// //step4:请求广告,调用开屏广告异步请求接口,对请求回调的广告作渲染处理
// mTTSplashAd.loadAd(adSlot, ttNetworkRequestInfo, new TTSplashAdLoadCallback() {
// @Override
// public void onSplashAdLoadFail(AdError adError) {
// LogUtil.d(TAG, adError.message);
// mHasLoaded = true;
// Log.e(TAG, "load splash ad error : " + adError.code + ", " + adError.message);
// // 获取本次waterfall加载中,加载失败的adn错误信息。
// if (mTTSplashAd != null)
// LogUtil.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
// goToMainActivity();
// }
//
// @Override
// public void onSplashAdLoadSuccess() {
// if (mTTSplashAd != null) {
// mTTSplashAd.showAd(mSplashContainer);
// isBaiduSplashAd = mTTSplashAd.getAdNetworkPlatformId() == NetworkPlatformConst.SDK_NAME_BAIDU;
// // 获取本次waterfall加载中,加载失败的adn错误信息。
//
//
// if (mTTSplashAd != null) {
// HashMap<String, Object> vo = new HashMap<>();
// vo.put("adcode",mTTSplashAd.getAdNetworkRitId());
// vo.put("ecpm",mTTSplashAd.getPreEcpm());
// vo.put("adSource",mTTSplashAd.getAdNetworkPlatformId());
// vo.put("adType",Constant.GRO_MORE_ADTYPE0);
// TrackManager.getInstance().cmtGroMoreInfo(vo);
// }
// }
// Log.e(TAG, "load splash ad success ");
// }
//
// @Override
// public void onAdLoadTimeout() {
// mHasLoaded = true;
// Log.i(TAG, "开屏广告加载超时.......");
// // 获取本次waterfall加载中,加载失败的adn错误信息。
// if (mTTSplashAd != null)
// LogUtil.d(TAG, "ad load infos: " + mTTSplashAd.getAdLoadInfoList());
// goToMainActivity();
// }
// }, AD_TIME_OUT);
//
// }
//
// TTSplashAdListener mSplashAdListener = new TTSplashAdListener() {
// @Override
// public void onAdClicked() {
// baiduSplashAdClicked = true;
// LogUtil.d(TAG, "onAdClicked");
// }
//
// @Override
// public void onAdShow() {
// LogUtil.d(TAG, "onAdShow");
// }
//
// @Override
// public void onAdSkip() {
// LogUtil.d(TAG, "onAdSkip");
//
// goToMainActivity();
// }
//
// @Override
// public void onAdDismiss() {
// LogUtil.d(TAG, "onAdDismiss");
// if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
// // 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要在onResume中跳转主页。
// return;
// }
// goToMainActivity();
// }
// };
//
// @Override
// protected void onResume() {
// //判断是否该跳转到主页面
// if (mForceGoMain) {
// goToMainActivity();
// }
// if (isBaiduSplashAd && onPaused && baiduSplashAdClicked) {
// // 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要自己在onResume中跳转主页。
// goToMainActivity();
// }
// super.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// onPaused = true;
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mForceGoMain = true;
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// if (mTTSplashAd != null) {
// mTTSplashAd.destroy();
// }
// }
//
// /**
// * 校验App签名
// */
// private void checkAppSign() {
// DeviceInfo deviceInfo = DeviceInfo.Companion.getInstance();
// if (!deviceInfo.getSignInfo()) {
// getBaseApplication().exitApp();
// } else {
// YLLittleVideoFragment.preloadVideo();
// try {
// mSplashContainer = findViewById(R.id.splash_container);
// ps = new AppPreferences(this);
// //加载开屏广告
// loadSplashAd();
// } catch (Exception e) {
// goToMainActivity();
// }
// }
// }
//
// @Override
// protected boolean isApplyKitKatTranslucency() {
// return false;
// }
//
// /**
// * 跳转到主页面
// */
// private void goToMainActivity() {
//
// int customVersion = ps.getInt(Constant.CUSTOM_VERSION, 0);
// boolean isFirstEnter = ps.getBoolean(Constant.ISFIRSTENTER + customVersion, true);
// if (isFirstEnter) {
// readyGoThenKill(GuideActivity.class);
// } else {
// String channel = CommonUtils.getAppMetaData(MintsApplication.getContext(), "CHANNEL_NAME");
// if (TextUtils.equals(channel, Constant.CHANNEL_SHARE) && !UserManager.getInstance().userIsLogin()) {
// readyGo(WxLoginActivity.class);
// } else {
// readyGoThenKill(MainActivity.class);
// }
// }
//
// mSplashContainer.removeAllViews();
// }
//
//
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK) {
// return true;
// }
// return super.onKeyDown(keyCode, event);
// }
//}
......@@ -76,6 +76,15 @@ class SplashKsADActivity : BaseActivity() {
next()
}
override fun onDownloadTipsDialogShow() {
}
override fun onDownloadTipsDialogDismiss() {
}
override fun onDownloadTipsDialogCancel() {
}
})
if (!isFinishing) {
......
......@@ -3,8 +3,9 @@ package com.mints.goodmoney.ui.activitys
import android.os.Bundle
import android.view.View
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreCarrierExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadCarrierExpressManager
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.TtCsjAdManager
import com.mints.goodmoney.mvp.model.WalkBean
import com.mints.goodmoney.mvp.presenters.WalkPresenter
import com.mints.goodmoney.mvp.views.WalkView
......@@ -98,8 +99,8 @@ class WalkActivity : BaseActivity(), View.OnClickListener, WalkView, StepView.St
}
// 预加载信息流
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WALK)
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WALK)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
}
/**
......@@ -107,11 +108,12 @@ class WalkActivity : BaseActivity(), View.OnClickListener, WalkView, StepView.St
*/
private fun initExpress() {
try {
if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
// if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
if (TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout != null) {
if (flWalkAd != null) {
flWalkAd.removeAllViews()
// flWalkAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
flWalkAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
flWalkAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
// flWalkAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
}
}
} catch (e: Exception) {
......
......@@ -3,8 +3,9 @@ package com.mints.goodmoney.ui.activitys
import android.os.Bundle
import android.view.View
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreCarrierExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadCarrierExpressManager
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.manager.TtCsjAdManager
import com.mints.goodmoney.mvp.model.WaterBean
import com.mints.goodmoney.mvp.presenters.WaterPresenter
import com.mints.goodmoney.ui.activitys.base.BaseActivity
......@@ -68,8 +69,8 @@ class WaterActivity : BaseActivity(), View.OnClickListener, WaterView.WaterViewL
}
// 预加载信息流
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WATER)
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WATER)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
}
override fun clickForWaterSuc(waterCoin: Int) {
......@@ -111,11 +112,12 @@ class WaterActivity : BaseActivity(), View.OnClickListener, WaterView.WaterViewL
*/
private fun initExpress() {
try {
if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
// if (GroMoreCarrierExpressManager.instance.getADFrameLayout() != null) {
if (TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout != null) {
if (flWaterAd != null) {
flWaterAd.removeAllViews()
// flWaterAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
flWaterAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
flWaterAd.addView(TTPreLoadCarrierExpressManager.getInstance().ttFrameLayout)
// flWaterAd.addView(GroMoreCarrierExpressManager.instance.getADFrameLayout())
}
}
} catch (e: Exception) {
......
......@@ -349,6 +349,7 @@ class XiaomanActivity : BaseActivity(), View.OnClickListener {
//视频广告加载后的视频文件资源缓存到本地的回调
override fun onRewardVideoCached() {}
override fun onRewardVideoCached(p0: TTRewardVideoAd?) {}
//视频广告素材加载到,如title,视频url等,不包括视频文件
override fun onRewardVideoAdLoad(ad: TTRewardVideoAd) {
......
......@@ -16,7 +16,6 @@ import com.daimajia.androidanimations.library.YoYo
import com.daimajia.androidanimations.library.YoYo.YoYoString
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.express.GroMoreExpressManager
import com.mints.goodmoney.ad.express.PreLoadExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadExpressXmlyManager
import com.mints.goodmoney.ad.video.VideoAdingManager
......
......@@ -19,7 +19,6 @@ import com.mints.goodmoney.BuildConfig
import com.mints.goodmoney.MintsApplication
import com.mints.goodmoney.R
import com.mints.goodmoney.ad.banner.BannerManager
import com.mints.goodmoney.ad.express.GroMoreCarrierExpressManager
import com.mints.goodmoney.ad.express.PreLoadExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadCarrierExpressManager
import com.mints.goodmoney.ad.express.TTPreLoadExpressXmlyManager
......@@ -1013,13 +1012,13 @@ class MyFragment : BaseFragment(),
readyGo(XiaomanActivity::class.java, bundle)
}
Constant.HOT_ACTIVITY_WATER -> {
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WATER)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WATER)
readyGo(WaterActivity::class.java)
}
Constant.HOT_ACTIVITY_WALK -> {
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WALK)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_WALK)
readyGo(WalkActivity::class.java)
}
Constant.HOT_ACTIVITY_CARD -> {
......@@ -1029,8 +1028,8 @@ class MyFragment : BaseFragment(),
readyGo(LiebaoGameActivity::class.java)
}
Constant.HOT_ACTIVITY_MORNINGCLOCK -> {
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_MORNINGCLOCK)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_MORNINGCLOCK)
readyGo(MorningClockActivity::class.java)
}
Constant.HOT_ACTIVITY_BXM -> {
......@@ -1110,8 +1109,8 @@ class MyFragment : BaseFragment(),
readyGo(WrapperActivity::class.java, bundle)
}
Constant.HOT_ACTIVITY_EAT -> {
GroMoreCarrierExpressManager.instance.loadADFrameLayout()
// TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_EAT)
// GroMoreCarrierExpressManager.instance.loadADFrameLayout()
TTPreLoadCarrierExpressManager.getInstance().loadTtFrameLayout(TtCsjAdManager.TT_AD_NATIVEEXPRESS_EAT)
readyGo(FoodSubsidyActivity::class.java)
}
Constant.HOT_ACTIVITY_SHARE_NEWS -> {
......
......@@ -8,9 +8,7 @@ import android.text.TextUtils;
import com.mints.goodmoney.manager.TrackManager;
import com.mints.goodmoney.mvp.presenters.VersionUpdatePresenter;
import com.mints.goodmoney.ui.activitys.SplashADActivity;
import com.mints.goodmoney.ui.activitys.SplashCsjADActivity;
import com.mints.goodmoney.ui.activitys.SplashGroMoreActivity;
import java.lang.ref.WeakReference;
......@@ -131,7 +129,7 @@ public class ForegroundOrBackground implements Application.ActivityLifecycleCall
//// activity.startActivity(ksIntent);
// }
if (ksIntent == null) {
ksIntent = new Intent(activity, SplashGroMoreActivity.class);
ksIntent = new Intent(activity, SplashCsjADActivity.class);
}
activity.startActivity(ksIntent);
}
......
package com.mints.goodmoney.utils;
import com.bytedance.msdk.api.BaiduExtraOptions;
import com.bytedance.msdk.api.GDTExtraOption;
import com.bytedance.msdk.api.TTVideoOption;
public class VideoOptionUtil {
public static TTVideoOption getTTVideoOption() {
//广点通(GDT)单独使用配置
GDTExtraOption gdtExtraOption = new GDTExtraOption.Builder()
.setGDTAutoPlayMuted(true)//自动播放是否静音,默认true
.setGDTDetailPageMuted(false)//详情页是否静音,默认值为false,即有声播放;
.setGDTEnableDetailPage(true)//是否能跳转详情页,默认true
.setGDTEnableUserControl(false)//是否能控制是否暂停与播放,默认false
.setGDTMaxVideoDuration(0)//视频最大长度,单位:秒 此设置会影响广告填充,请谨慎设置
.setGDTMinVideoDuration(0)//视频最小长度,单位:秒 此设置会影响广告填充,请谨慎设置
// VideoOption.AutoPlayPolicy.WIFI表示只在WiFi下自动播放;
// VideoOption.AutoPlayPolicy.ALWAYS表示始终自动播放,不区分当前网络;
// VideoOption.AutoPlayPolicy.NEVER表示始终都不自动播放,不区分当前网络,但在WiFi时会预下载视频资源;
// 默认为始终自动播放;模板渲染视频、插屏2.0视频、自渲染2.0视频都可使用
.setAutoPlayPolicy(GDTExtraOption.AutoPlayPolicy.WIFI)//自动播放策略--
.setDownAPPConfirmPolicy(GDTExtraOption.DownAPPConfirmPolicy.TYPE_DEFAULT)//指定点击 APP 广告后是否展示二次确认,可选项包括 Default(wifi 不展示,非wifi 展示),NoConfirm(所有情况不展示)
.setBrowserType(GDTExtraOption.BrowserType.TYPE_DEFAULT)//指定普链广告点击后用于展示落地页的浏览器类型,可选项包括:InnerBrowser(APP 内置浏览器),Sys(系统浏览器),Default(默认),SDK 按照默认逻辑选择
.build();
//针对百度SDK信息流设置
BaiduExtraOptions baiduExtraOptions = new BaiduExtraOptions.Builder()
.setGDTExtraOption(BaiduExtraOptions.DOWNLOAD_APP_CONFIRM_ALWAYS)
.setCacheVideoOnlyWifi(true).build();
//视频声音控制
TTVideoOption videoOption = new TTVideoOption.Builder()
.setMuted(false) //所有类型生效,GDT除外
.setAdmobAppVolume(1f)//admob 声音配置,与setMuted配合使用
.setGDTExtraOption(gdtExtraOption)//GDT 单独
.setBaiduExtraOption(baiduExtraOptions)//百度SDK配置
.build();
return videoOption;
}
public static TTVideoOption getTTVideoOption2() {
//广点通(GDT)单独使用配置
GDTExtraOption gdtExtraOption = new GDTExtraOption.Builder()
.setGDTAutoPlayMuted(true)//自动播放是否静音,默认true
.setGDTDetailPageMuted(false)//详情页是否静音,默认值为false,即有声播放;
.setGDTEnableDetailPage(true)//是否能跳转详情页,默认true
.setGDTEnableUserControl(false)//是否能控制是否暂停与播放,默认false
.setGDTMaxVideoDuration(0)//视频最大长度,单位:秒 此设置会影响广告填充,请谨慎设置
.setGDTMinVideoDuration(0)//视频最小长度,单位:秒 此设置会影响广告填充,请谨慎设置
.setFeedExpressType(GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2)//确定使用GDT FEED 模板渲染2.0功能;需要向广点通商务申请2.0权限
// VideoOption.AutoPlayPolicy.WIFI表示只在WiFi下自动播放;
// VideoOption.AutoPlayPolicy.ALWAYS表示始终自动播放,不区分当前网络;
// VideoOption.AutoPlayPolicy.NEVER表示始终都不自动播放,不区分当前网络,但在WiFi时会预下载视频资源;
// 默认为始终自动播放;模板渲染视频、插屏2.0视频、自渲染2.0视频都可使用
.setAutoPlayPolicy(GDTExtraOption.AutoPlayPolicy.WIFI)//自动播放策略--
.setDownAPPConfirmPolicy(GDTExtraOption.DownAPPConfirmPolicy.TYPE_DEFAULT)//指定点击 APP 广告后是否展示二次确认,可选项包括 Default(wifi 不展示,非wifi 展示),NoConfirm(所有情况不展示)
.setBrowserType(GDTExtraOption.BrowserType.TYPE_DEFAULT).build();//指定普链广告点击后用于展示落地页的浏览器类型,可选项包括:InnerBrowser(APP 内置浏览器),Sys(系统浏览器),Default(默认),SDK 按照默认逻辑选择
//针对百度SDK信息流设置
BaiduExtraOptions baiduExtraOptions = new BaiduExtraOptions.Builder()
.setGDTExtraOption(BaiduExtraOptions.DOWNLOAD_APP_CONFIRM_ALWAYS)
.setCacheVideoOnlyWifi(true).build();
//视频声音控制
TTVideoOption videoOption = new TTVideoOption.Builder()
.setMuted(false) //所有类型生效,GDT除外
.setAdmobAppVolume(1f)//admob 声音配置,与setMuted配合使用
.setGDTExtraOption(gdtExtraOption)//GDT 单独
.setBaiduExtraOption(baiduExtraOptions)//百度SDK配置
.build();
return videoOption;
}
}
//package com.mints.goodmoney.utils;
//
//import com.bytedance.msdk.api.BaiduExtraOptions;
//import com.bytedance.msdk.api.GDTExtraOption;
//import com.bytedance.msdk.api.TTVideoOption;
//
//public class VideoOptionUtil {
//
//
// public static TTVideoOption getTTVideoOption() {
// //广点通(GDT)单独使用配置
// GDTExtraOption gdtExtraOption = new GDTExtraOption.Builder()
// .setGDTAutoPlayMuted(true)//自动播放是否静音,默认true
// .setGDTDetailPageMuted(false)//详情页是否静音,默认值为false,即有声播放;
// .setGDTEnableDetailPage(true)//是否能跳转详情页,默认true
// .setGDTEnableUserControl(false)//是否能控制是否暂停与播放,默认false
// .setGDTMaxVideoDuration(0)//视频最大长度,单位:秒 此设置会影响广告填充,请谨慎设置
// .setGDTMinVideoDuration(0)//视频最小长度,单位:秒 此设置会影响广告填充,请谨慎设置
// // VideoOption.AutoPlayPolicy.WIFI表示只在WiFi下自动播放;
// // VideoOption.AutoPlayPolicy.ALWAYS表示始终自动播放,不区分当前网络;
// // VideoOption.AutoPlayPolicy.NEVER表示始终都不自动播放,不区分当前网络,但在WiFi时会预下载视频资源;
// // 默认为始终自动播放;模板渲染视频、插屏2.0视频、自渲染2.0视频都可使用
// .setAutoPlayPolicy(GDTExtraOption.AutoPlayPolicy.WIFI)//自动播放策略--
// .setDownAPPConfirmPolicy(GDTExtraOption.DownAPPConfirmPolicy.TYPE_DEFAULT)//指定点击 APP 广告后是否展示二次确认,可选项包括 Default(wifi 不展示,非wifi 展示),NoConfirm(所有情况不展示)
// .setBrowserType(GDTExtraOption.BrowserType.TYPE_DEFAULT)//指定普链广告点击后用于展示落地页的浏览器类型,可选项包括:InnerBrowser(APP 内置浏览器),Sys(系统浏览器),Default(默认),SDK 按照默认逻辑选择
// .build();
//
// //针对百度SDK信息流设置
// BaiduExtraOptions baiduExtraOptions = new BaiduExtraOptions.Builder()
// .setGDTExtraOption(BaiduExtraOptions.DOWNLOAD_APP_CONFIRM_ALWAYS)
// .setCacheVideoOnlyWifi(true).build();
//
// //视频声音控制
// TTVideoOption videoOption = new TTVideoOption.Builder()
// .setMuted(false) //所有类型生效,GDT除外
// .setAdmobAppVolume(1f)//admob 声音配置,与setMuted配合使用
// .setGDTExtraOption(gdtExtraOption)//GDT 单独
// .setBaiduExtraOption(baiduExtraOptions)//百度SDK配置
// .build();
//
// return videoOption;
// }
//
// public static TTVideoOption getTTVideoOption2() {
// //广点通(GDT)单独使用配置
// GDTExtraOption gdtExtraOption = new GDTExtraOption.Builder()
// .setGDTAutoPlayMuted(true)//自动播放是否静音,默认true
// .setGDTDetailPageMuted(false)//详情页是否静音,默认值为false,即有声播放;
// .setGDTEnableDetailPage(true)//是否能跳转详情页,默认true
// .setGDTEnableUserControl(false)//是否能控制是否暂停与播放,默认false
// .setGDTMaxVideoDuration(0)//视频最大长度,单位:秒 此设置会影响广告填充,请谨慎设置
// .setGDTMinVideoDuration(0)//视频最小长度,单位:秒 此设置会影响广告填充,请谨慎设置
// .setFeedExpressType(GDTExtraOption.FeedExpressType.FEED_EXPRESS_TYPE_2)//确定使用GDT FEED 模板渲染2.0功能;需要向广点通商务申请2.0权限
// // VideoOption.AutoPlayPolicy.WIFI表示只在WiFi下自动播放;
// // VideoOption.AutoPlayPolicy.ALWAYS表示始终自动播放,不区分当前网络;
// // VideoOption.AutoPlayPolicy.NEVER表示始终都不自动播放,不区分当前网络,但在WiFi时会预下载视频资源;
// // 默认为始终自动播放;模板渲染视频、插屏2.0视频、自渲染2.0视频都可使用
// .setAutoPlayPolicy(GDTExtraOption.AutoPlayPolicy.WIFI)//自动播放策略--
// .setDownAPPConfirmPolicy(GDTExtraOption.DownAPPConfirmPolicy.TYPE_DEFAULT)//指定点击 APP 广告后是否展示二次确认,可选项包括 Default(wifi 不展示,非wifi 展示),NoConfirm(所有情况不展示)
// .setBrowserType(GDTExtraOption.BrowserType.TYPE_DEFAULT).build();//指定普链广告点击后用于展示落地页的浏览器类型,可选项包括:InnerBrowser(APP 内置浏览器),Sys(系统浏览器),Default(默认),SDK 按照默认逻辑选择
//
//
// //针对百度SDK信息流设置
// BaiduExtraOptions baiduExtraOptions = new BaiduExtraOptions.Builder()
// .setGDTExtraOption(BaiduExtraOptions.DOWNLOAD_APP_CONFIRM_ALWAYS)
// .setCacheVideoOnlyWifi(true).build();
//
// //视频声音控制
// TTVideoOption videoOption = new TTVideoOption.Builder()
// .setMuted(false) //所有类型生效,GDT除外
// .setAdmobAppVolume(1f)//admob 声音配置,与setMuted配合使用
// .setGDTExtraOption(gdtExtraOption)//GDT 单独
// .setBaiduExtraOption(baiduExtraOptions)//百度SDK配置
// .build();
//
// return videoOption;
// }
//}
......@@ -80,7 +80,9 @@ allprojects {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/umsdk/release' }
// maven { url 'https://dl.bintray.com/umsdk/release' }
// umeng仓库
maven { url 'https://repo1.maven.org/maven2/' }
maven { url "https://jitpack.io" }
//添加一览 maven地址
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment