# ZTAD-SDK **Repository Path**: mlethe/ZTAD-SDK ## Basic Information - **Project Name**: ZTAD-SDK - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-12 - **Last Updated**: 2026-04-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ZTAD-SDK ## 依赖工程 编辑 `build.gradle`: ```groovy allprojects { repositories { ... maven { url "https://jitpack.io" } } } dependencies { implementation 'com.gitee.Mlethe:ZTAD-SDK:3.5.5' } ``` ## 用法 ### AndroidManifest 配置 ``` xml ``` ### 初始化 ```kotlin ZTSDK.getInstance() .setAppId(Constants.ZT_APP_ID) // 中台APPID .setChannel(channel) // app渠道 .setWechatAppId(Constants.WX_APP_ID) // 微信appId .setDebug(isDebug) // 是否开启调试日志 .setEnablePersonalRecommend(SpUtil.personalRecommend) // 广告个性化推荐配置 .setAppName(Constants.ZT_APP_NAME) // 设置APP名称 .setConfigListener(object : OnConfigListener { /** * 获取用户id * * @return */ override fun getUserId(): String { return System.currentTimeMillis().toString() } /** * 获取唯一id * * @return */ override fun getUniqueId(): String { return System.currentTimeMillis().toString() } /** * activity 是否可以跳转 * * @return false 不跳转,true 跳转 */ override fun onJumpEnable(): Boolean { return true } /** * 点击跳转网页 * * @param url 跳转链接 * @param json 请求所需参数 */ override fun onWebPage(url: String, json: String?) { } /** * 获取oaid * * @return */ override fun getOaid(): String? { return SharedPreferencesUtil.getValue("oaid", "") } /** * 是否允许SDK主动使⽤oaid * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanUseOaid(): Boolean { return false } /** * 是否允许SDK主动使用地理位置信息 * * @return true可以获取,false禁止获取。默认为true */ override fun isCanUseLocation(): Boolean { return false } /** * 当isCanUseLocation=false时,可传入地理位置信息,穿山甲sdk使用您传入的地理位置信息 * * @return 地理位置参数 */ override fun getAdLocation(): AdLocationProvider? { return null } /** * 快手获取位置信息 * * @return */ override fun getLocation(): Location? { return null } /** * 是否允许SDK主动使用手机硬件参数,如:imei * * @return true可以使用,false禁止使用。默认为true */ override fun isCanUsePhoneState(): Boolean { return false } /** * 当isCanUsePhoneState=false时,可传入imei信息 * * @return imei信息 */ override fun getImei(): String? { return null } /** * 当isCanUsePhoneState=false时,可传⼊原始的imei信息,sdk使⽤您传⼊的原始imei信息。 * 注意:请传⼊原始imei值,⽆需使⽤md5加密,sdk整体信息加密传输已满⾜合规需要 */ override fun getImeis(): Array? { return null } /** * 是否允许SDK主动获取ANDROID_ID *

* 4600新增 * * @return 默认true 允许 , false 不允许 */ override fun isCanUseAndroidId(): Boolean { return false } /** * 当isCanUsePhoneState=false时,可传⼊android_id信息,sdk使⽤您传⼊的android_id */ override fun getAndroidId(): String { return Settings.System.getString(contentResolver, Settings.Secure.ANDROID_ID) } /** * 是否允许SDK主动使用ACCESS_WIFI_STATE权限 * * @return true可以使用,false禁止使用。默认为true */ override fun isCanUseWifiState(): Boolean { return false } /** * 是否允许SDK主动使用WRITE_EXTERNAL_STORAGE权限 * * @return true可以使用,false禁止使用。默认为true */ override fun isCanUseWriteExternal(): Boolean { return false } /** * 是否允许SDK主动使⽤mac_address * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanUseMacAddress(): Boolean { return false } /** * 当isCanUseMacAddress=false时,可传⼊mac地址信息,sdk使⽤您传⼊的mac地址信息(快手) * 没有canUseMacAddress状态(穿山甲) */ override fun getMacAddress(): String { return "" } /** * 是否允许SDK主动使⽤ACCESS_NETWORK_STATE权限 * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanUseNetworkState(): Boolean { return false } /** * 是否允许SDK主动读取app安装列表 * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanReadInstalledPackages(): Boolean { return false } /** * 当canReadInstalledPackages=false时,可传⼊package list信息,sdk使⽤您传⼊的 package list */ override fun getInstalledPackages(): MutableList? { return null } /** * 是否允许获取imsi * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanUseImsi(): Boolean { return false } /** * 穿山甲使用,是否允许SDK在申明和授权了的情况下使用录音权限 * * @return true可以使⽤,false禁⽌使⽤。默认为true */ override fun isCanUsePermissionRecordAudio(): Boolean { return false } }) .setAdAgentListener(object : AdAgentListener { /** * 概率为不显示广告/没有广告数据 */ override fun onNotShow(page: String?, location: String?) { Log.e("ZTAD", "AdAgentListener onNotShow: page->${page}, location->${location}") } /** * 广告显示失败(未开始请求) * * @param code 错误码 * @param msg 错误信息 */ override fun onFail( page: String?, location: String?, code: Int, msg: String? ) { Log.e("ZTAD", "AdAgentListener onFail: page->${page}, location->${location}") } /** * 开始加载 * * @param type 类型 */ override fun onLoadStart( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onLoadStart: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告加载成功 * * @param type 类型 */ override fun onLoadSuccess( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onLoadSuccess: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告加载失败 * * @param type 类型 * @param code 错误码 * @param msg 错误信息 */ override fun onLoadFail( type: AdType, data: AdData, code: Int, msg: String? ) { Log.e("ZTAD", "AdAgentListener onLoadFail: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告显示 * * @param type 类型 */ override fun onShow( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onShow: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告曝光 * * @param type 类型 */ override fun onExposure( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onExposure: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告渲染失败 * * @param type 类型 * @param code 错误码 * @param msg 错误信息 */ override fun onRenderFail( type: AdType, data: AdData, code: Int, msg: String? ) { Log.e("ZTAD", "AdAgentListener onRenderFail: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告被点击 * * @param type 类型 */ override fun onClicked( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onClicked: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 请求时间 * * @param type 类型 * @param time 请求时间 */ override fun onLoadTime( type: AdType, data: AdData, time: Long ) { Log.e("ZTAD", "AdAgentListener onLoadTime: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告关闭 * * @param type 类型 */ override fun onAdClose( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onAdClose: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 广告跳过、视频广告跳过回调 * * @param type 类型 */ override fun onSkip( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onSkip: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 激励视频触发激励(观看视频大于一定时长或者视频播放完毕) * * @param type */ override fun onReward( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onReward: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 激励视频播放完毕 * * @param type */ override fun onVideoComplete( type: AdType, data: AdData ) { Log.e("ZTAD", "AdAgentListener onVideoComplete: type->${type}, page->${data.adPage}, location->${data.adLocation}") } /** * 请求超时 */ override fun onOverTime(page: String?, location: String?) { Log.e("ZTAD", "AdAgentListener onOverTime: page->${page}, location->${location}") } }) .setShowDialog(true) // 是否显示自定义下载弹窗 .init(this); ``` ### 拉取广告配置 ```kotlin // 建议在开屏页面调用(sdk初始化时,sdk内部会调用) ZTSDK.refreshConfig() ``` ### 开屏广告 ```kotlin val width = DensityUtil.getWidth(this@SplashActivity) val height = DensityUtil.getHeight(this@SplashActivity) val viewWidth = width val viewHeight = height - DensityUtil.dp2px(this@SplashActivity, 80f) val params = PlacementParams() .setPage("KP") .setLocation("KP") .setContainer(binding.splashLayout) .setSingle(false) .setTimeout(5 * 1000) .setViewAcceptedSize( DensityUtil.px2dp(this@SplashActivity, viewWidth.toFloat()), DensityUtil.px2dp(this@SplashActivity, viewHeight.toFloat()) ) splashAd = SplashAd(params) splashAd?.setAdShowListener(object : SplashAdListener { override fun onAdClicked() { Log.e("ZTAD", "onAdClicked:") mCanJump = true } override fun onAdShow() { Log.e("ZTAD", "onAdShow:") } override fun onAdExposure() { Log.e("ZTAD", "onAdExposure:") } override fun onAdSkip() { Log.e("ZTAD", "onAdSkip:") goToActivity() } override fun onAdClose() { Log.e("ZTAD", "onAdClose:") goToActivity() } override fun onAdTick(time: Int) { Log.e("ZTAD", "onAdTick:time->$time") } override fun onRenderFail(code: Int, msg: String) { Log.e("ZTAD", "onRenderFail:") goToActivity() } })?.setAdLoadListener(object : AdLoadListener { override fun onSuccess() { } override fun onFail(code: Int, msg: String) { goToActivity() } }) ?.loadAd(this@SplashActivity) ``` ### 浮窗广告 ```kotlin val params = PlacementParams() .setPage("SY") .setLocation("FCGG") .setTimeout(10000) FloatAd(params) .setAdShowListener(object : AdShowListener { override fun onAdClicked() { Log.e("ZTAD", "FloatAd onAdClicked: ") } override fun onAdShow() { Log.e("ZTAD", "FloatAd onAdShow: ") } override fun onAdExposure() { Log.e("ZTAD", "FloatAd onAdExposure: ") } override fun onAdClose() { Log.e("ZTAD", "FloatAd onAdClose: ") } override fun onRenderFail(code: Int, msg: String) { Log.e("ZTAD", "FloatAd onRenderFail: ") } }) .setAdLoadListener(object : AdLoadListener { override fun onSuccess() { } override fun onFail(code: Int, msg: String) { } }) .loadAd(this) ``` ### 激励视频 ```kotlin val params = PlacementParams() .setPage("TZHD") .setLocation("skipTask1") RewardVideoAd(params) .setAdShowListener(object : RewardVideoAdListener { override fun onReward() { Log.e("ZTAD", "onReward: ") } override fun onAdClicked() { Log.e("ZTAD", "onAdClicked: ") } override fun onVideoComplete() { Log.e("ZTAD", "onVideoComplete: ") } override fun onAdShow() { Log.e("ZTAD", "onAdShow: ") } override fun onAdExposure() { Log.e("ZTAD", "onAdExposure: ") } override fun onAdClose() { Log.e("ZTAD", "onAdClose: ") } override fun onRenderFail(code: Int, msg: String) { Log.e("ZTAD", "onRenderFail: ") } }).setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } }).loadAd(this) ``` ### 抖音商城广告 ```kotlin val params = PlacementParams() .setPage("FCJZDL") .setLocation("fc_mf_04") .setTimeout(5 * 1000) val nativeAd = NativeAd(params) // 商城未领取奖励时是否拦截提示 nativeAd.setShopInterceptionFinish(true) // 商城浏览时长(单位:秒)及奖励数量 nativeAd.setShopRewardData(60, 1) nativeAd.setShopAdListener(object : ShopAdListener{ /** * 获取自定义View * * @param inflater * @param container * @return */ override fun getView(inflater: LayoutInflater, container: ViewGroup): View? { return null } /** * 触发激励 * * @param gold 数量 */ override fun onReward(gold: Int) { } /** * 浏览时间完成 */ override fun onBrowseCompleted() { } /** * 滑动到顶部 */ override fun onScrollToTop() { } /** * 滑动到底部 */ override fun onScrollToBottom() { } /** * 页面关闭拦截 * * @param activity * @return true 拦截,false 不拦截 */ override fun onFinishInterception(activity: FragmentActivity): Boolean { return false } }) nativeAd.setAdShowListener(object : AdShowListener { override fun onAdClicked() { } override fun onAdShow() { } override fun onAdExposure() { } override fun onRenderFail(code: Int, msg: String) { } override fun onAdClose() { } }).setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } }).loadAd(this@MainActivity) ``` ### 任务中心自定义广告 ```kotlin val params = PlacementParams() .setPage("FCJZDL") .setLocation("fc_mf_04") .setTimeout(5 * 1000) val nativeAd = NativeCustomAd(params) nativeAd.setAdFeedCallback(object : AdFeedCallback { override fun onRender( ad: NativeCustomAd, data: NativeAdData ) { // 自定义渲染数据 val title = (data.gameplay ?: "") + (data.appName ?: "") val icon = data.icon ad.setAdContainer(viewGroup) // 设置广告父布局View .setClickViewList(list) // 设置可以被点击的View .setCreativeViewList(list) // 设置可以被点击的View .setTaskBrowseTime(10) // 任务广告浏览时间(单位:秒) } override fun onReward() { // 奖励发放 } }) nativeAd.setAdShowListener(object : AdShowListener { override fun onAdClicked() { } override fun onAdShow() { } override fun onAdExposure() { } override fun onRenderFail(code: Int, msg: String) { } override fun onAdClose() { } }).setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } }).loadAd(this@MainActivity) // 必须实现以下方法 override fun onResume() { super.onResume() nativeAd.resume() } override fun onPause() { super.onPause() nativeAd.pause() } ``` ### 信息流广告(模板渲染) ```kotlin val width = dp2px(232f).toInt() val dpWidth = 232f val params = PlacementParams() .setPage("FCJZDL") .setLocation("fc_mf_04") .setContainer(binding.nativeContainer) .setViewAcceptedSize(dpWidth, dpWidth * 2 / 3) .setViewSize(width, width * 2 / 3) .setTimeout(5 * 1000) val nativeAd = NativeAd(params) nativeAd.setAdShowListener(object : AdShowListener { override fun onAdClicked() { } override fun onAdShow() { } override fun onAdExposure() { } override fun onRenderFail(code: Int, msg: String) { } override fun onAdClose() { } }).setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } }).loadAd(this@MainActivity) // 必须实现以下方法 override fun onDestroy() { super.onDestroy() nativeAd?.destroy() } ``` ### 信息流广告(自渲染) ```kotlin val width = dp2px(232f).toInt() val dpWidth = 232f val params = PlacementParams() .setPage("FCJZDL") .setLocation("fc_mf_04") .setContainer(binding.nativeContainer) .setViewAcceptedSize(dpWidth, dpWidth * 2 / 3) .setViewSize(width, width * 2 / 3) .setTimeout(5 * 1000) val nativeAd = NativeCustomAd(params) nativeAd.setAdFeedCallback(object : AdFeedCallback { override fun onRender( ad: NativeCustomAd, data: NativeAdData ) { // 自定义渲染数据 } }) nativeAd.setAdShowListener(object : AdShowListener { override fun onAdClicked() { } override fun onAdShow() { } override fun onAdExposure() { } override fun onRenderFail(code: Int, msg: String) { } override fun onAdClose() { } }).setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } }).loadAd(this@MainActivity) // 必须实现以下方法 override fun onDestroy() { super.onDestroy() nativeAd?.destroy() } ``` ### 插屏广告 ```kotlin val params = PlacementParams() .setPage("SY") .setLocation("CP") .setTimeout(1000 * 10) val ad = InteractionAd(params) ad.setAdShowListener(object : AdShowListener { override fun onAdClicked() { } override fun onAdShow() { } override fun onAdExposure() { } override fun onRenderFail(code: Int, msg: String) { } override fun onAdClose() { } }) ad.setAdLoadListener(object : AdLoadListener { override fun onSuccess() { } override fun onFail(code: Int, msg: String) { } }) ad.loadAd(this) ``` ### Banner广告 ```kotlin val width = getWidth(this@MainActivity) - dp2px(20f).toInt() val dpWidth = DemoApplication.screenWidthDp - 20f val params = PlacementParams() .setPage("GRZX") .setLocation("TB") .setContainer(binding.bannerContainer) .setCloseEnable(false) .setViewAcceptedSize(dpWidth, dpWidth / 4) .setViewSize(width, width / 4) bannerAd = BannerAd(params) bannerAd?.setAdShowListener(object : AdShowListener { override fun onAdClicked() {} override fun onAdShow() {} override fun onAdExposure() {} override fun onRenderFail(code: Int, msg: String) {} override fun onAdClose() { if (this@MainActivity.isFinishing) return binding.bannerContainer.visibility = View.GONE } })?.setAdLoadListener(object : AdLoadListener { override fun onSuccess() { Log.e("ZTAD", "onSuccess: ") } override fun onFail(code: Int, msg: String) { Log.e("ZTAD", "onFail: ") } })?.loadAd(this@MainActivity) override fun onDestroy() { super.onDestroy() // 页面销毁时需要销毁 bannerAd?.destroy() } ```