Commit d0393ced authored by wangxuewei's avatar wangxuewei

[提交人]:王雪伟

[提交简述] :幸运农场
[实现方案] :1.0.7更换广告依赖方式,加入预加载
parent dfdc0077
...@@ -56,5 +56,10 @@ ...@@ -56,5 +56,10 @@
<option name="name" value="maven5" /> <option name="name" value="maven5" />
<option name="url" value="http://test.vlion.cn:8081/nexus/content/repositories/inland/" /> <option name="url" value="http://test.vlion.cn:8081/nexus/content/repositories/inland/" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="http://zx-maven.huolea.com/repository/admodule/" />
</remote-repository>
</component> </component>
</project> </project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">
......
...@@ -10,29 +10,23 @@ import com.bytedance.sdk.openadsdk.TTSplashAd ...@@ -10,29 +10,23 @@ import com.bytedance.sdk.openadsdk.TTSplashAd
import com.gyf.immersionbar.BarHide import com.gyf.immersionbar.BarHide
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.umeng.analytics.MobclickAgent import com.umeng.analytics.MobclickAgent
import com.ym.admodule.rs.RSADUtils import com.ym.admodule.config.AdManager
import com.ym.admodule.listener.ZXADSplashListener
import com.ym.game.GameActivity import com.ym.game.GameActivity
import com.ym.xync.R import com.ym.xync.R
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.module.ReportEntity import com.ym.library.module.ReportEntity
import com.ym.library.net.SplashPresenter.Companion.PERMISSIONS import com.ym.library.net.SplashPresenter.Companion.PERMISSIONS
import com.ym.game.utils.CenterDialog import com.ym.game.utils.CenterDialog
import com.ym.library.config.AdManager
import com.ym.library.config.ZXADCallback
import com.ym.library.config.ZXADRewardVideo
import com.ym.library.listener.ZXADSplashListener
import com.ym.library.listener.ZXADVideoListener
import com.ym.library.module.NewsEntity import com.ym.library.module.NewsEntity
import com.ym.library.net.* import com.ym.library.net.*
import com.ym.library.sm.SMADUtils
import com.ym.library.utils.* import com.ym.library.utils.*
import com.ym.library.wechat.UserApiClient
import org.jetbrains.anko.act
class SplashActivity : BaseActivity(), SplashContract.View { class SplashActivity : BaseActivity(), SplashContract.View {
override fun layoutID(): Int = R.layout.splash_layout override fun layoutID(): Int = R.layout.splash_layout
private var mPresenter: SplashPresenter? = null private var mPresenter: SplashPresenter? = null
private var tv_skipview: TextView? = null private var tv_skipview: TextView? = null
private var splash_container: FrameLayout? = null private var splash_container: FrameLayout? = null
...@@ -95,7 +89,6 @@ class SplashActivity : BaseActivity(), SplashContract.View { ...@@ -95,7 +89,6 @@ class SplashActivity : BaseActivity(), SplashContract.View {
// }) // })
// var newsEntity2 = NewsEntity() // var newsEntity2 = NewsEntity()
// newsEntity2.codeId = "e95e6a55551" // newsEntity2.codeId = "e95e6a55551"
// SMADUtils.loadSplashAd(newsEntity2,this,splash_container!!,object :ZXADSplashListener{ // SMADUtils.loadSplashAd(newsEntity2,this,splash_container!!,object :ZXADSplashListener{
...@@ -109,53 +102,68 @@ class SplashActivity : BaseActivity(), SplashContract.View { ...@@ -109,53 +102,68 @@ class SplashActivity : BaseActivity(), SplashContract.View {
// } // }
// //
// }) // })
AdManager.loadSplashAd(
AdManager.loadSplashAd(this, this, ADConfig.AD_SPLASH,
ADConfig.AD_SPLASH, tv_skipview, splash_container!!, object : ZXADSplashListener { tv_skipview,
override fun onSuccessResult() { splash_container!!,
Log.e("huang", "onSuccessResult()") object : ZXADSplashListener {
} override fun onAdShow() {
override fun onFailResult(result: String) {
Log.e("huang", "onFailResult()")
startMain()
}
override fun onTimeout() {
Log.e("huang", "onTimeout()")
startMain()
}
override fun onErrorResult(s: String) {
Log.e("huang", "onErrorResult()")
startMain()
}
override fun onSplashAdLoad(ad: TTSplashAd) {
Log.e(
"huang",
"广告展现 结束" + System.currentTimeMillis()
)
}
override fun onAdClicked(data: NewsEntity) {
Log.e("huang", "onAdClicked()")
}
override fun onAdShow(data: NewsEntity) {
Log.e("huang", "onAdShow()")
} }
override fun onAdSkip() { override fun onAdSkip() {
Log.e("huang", "onAdSkip()")
startMain() startMain()
} }
override fun onAdTimeOver() { override fun onError(errorMsg: String?) {
Log.e("huang", "onAdTimeOver()")
startMain() startMain()
} }
}) })
// AdManager.loadSplashAd(this,
// ADConfig.AD_SPLASH, tv_skipview, splash_container!!, object : ZXADSplashListener {
// override fun onSuccessResult() {
// Log.e("huang", "onSuccessResult()")
// }
//
// override fun onFailResult(result: String) {
// Log.e("huang", "onFailResult()")
// startMain()
// }
//
// override fun onTimeout() {
// Log.e("huang", "onTimeout()")
// startMain()
// }
//
// override fun onErrorResult(s: String) {
// Log.e("huang", "onErrorResult()")
// startMain()
// }
//
// override fun onSplashAdLoad(ad: TTSplashAd) {
// Log.e(
// "huang",
// "广告展现 结束" + System.currentTimeMillis()
// )
// }
//
// override fun onAdClicked(data: NewsEntity) {
// Log.e("huang", "onAdClicked()")
// }
//
// override fun onAdShow(data: NewsEntity) {
// Log.e("huang", "onAdShow()")
// }
//
// override fun onAdSkip() {
// Log.e("huang", "onAdSkip()")
// startMain()
// }
//
// override fun onAdTimeOver() {
// Log.e("huang", "onAdTimeOver()")
// startMain()
// }
// })
} else { } else {
startMain() startMain()
} }
...@@ -173,7 +181,7 @@ class SplashActivity : BaseActivity(), SplashContract.View { ...@@ -173,7 +181,7 @@ class SplashActivity : BaseActivity(), SplashContract.View {
isClick = false isClick = false
startTime = System.currentTimeMillis() startTime = System.currentTimeMillis()
// startActivity(Intent(this@SplashActivity, GameActivity::class.java)) // startActivity(Intent(this@SplashActivity, GameActivity::class.java))
val token = SettingPreference.getToken() val token = com.ym.modulecommon.utils.SettingPreference.getToken()
if (token.isEmpty()) { if (token.isEmpty()) {
EventUtils.onEvent("login_token_null", "未登录") EventUtils.onEvent("login_token_null", "未登录")
startActivity(Intent(this@SplashActivity, WxLoginActivity::class.java)) startActivity(Intent(this@SplashActivity, WxLoginActivity::class.java))
......
package com.ym.game.application; package com.ym.game.application;
import android.app.Application
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build
import android.os.Process import android.os.Process
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.webkit.WebView
import androidx.multidex.MultiDex import androidx.multidex.MultiDex
import androidx.multidex.MultiDexApplication import androidx.multidex.MultiDexApplication
import com.bx.adsdk.AdSdk import com.bx.adsdk.AdSdk
import com.tencent.bugly.crashreport.CrashReport import com.tencent.bugly.crashreport.CrashReport
import com.umeng.commonsdk.UMConfigure import com.umeng.commonsdk.UMConfigure
import com.umeng.socialize.PlatformConfig import com.umeng.socialize.PlatformConfig
import com.ym.admodule.config.AdManager
import com.ym.library.AppliContext import com.ym.library.AppliContext
import com.ym.library.Config
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.config.AdManager import com.ym.modulecommon.net.NetConfig
import com.ym.library.config.ZXADConfig
import com.ym.library.net.NetConfig
import java.io.BufferedReader import java.io.BufferedReader
import java.io.FileReader import java.io.FileReader
import java.io.IOException import java.io.IOException
...@@ -32,10 +27,10 @@ class BaseApplication : MultiDexApplication() { ...@@ -32,10 +27,10 @@ class BaseApplication : MultiDexApplication() {
//第一步初始化 application //第一步初始化 application
AppliContext.init(this) AppliContext.init(this)
// Config.init(this) // Config.init(this)
NetConfig.setBase_Url(NetConfig.Environment.PRODUCT)// TODO 上线之后提成成 NetConfig.Environment.PRODUCT NetConfig.setBase_Url(NetConfig.Environment.DEV)// TODO 上线之后提成成 NetConfig.Environment.PRODUCT
AdManager.init(this,"a03d5320d905cf3b")
Constant.appLs = "a03d5320d905cf3b"//applsq // Constant.appLs = "a03d5320d905cf3b"//applsq
AdManager.init(this) // AdManager.init(this)
// AdManager.init(//替换id // AdManager.init(//替换id
// this, ZXADConfig // this, ZXADConfig
// .csjId("5113760") // .csjId("5113760")
......
...@@ -2,9 +2,8 @@ package com.ym.game.net ...@@ -2,9 +2,8 @@ package com.ym.game.net
import android.text.TextUtils import android.text.TextUtils
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.net.NetConfig import com.ym.modulecommon.net.NetConfig
import com.ym.library.utils.PhoneUtils import com.ym.modulecommon.utils.PhoneUtils
import com.ym.library.utils.SettingPreference
import okhttp3.Interceptor import okhttp3.Interceptor
import okhttp3.Request import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
...@@ -35,12 +34,12 @@ object GameApiClient { ...@@ -35,12 +34,12 @@ object GameApiClient {
private val headInterceptor = Interceptor { chain -> private val headInterceptor = Interceptor { chain ->
val request = chain.request() val request = chain.request()
val builder = request.newBuilder() val builder = request.newBuilder()
builder.addHeader(Constant.aid, SettingPreference.getAndroidId()) builder.addHeader(Constant.aid, com.ym.modulecommon.utils.SettingPreference.getAndroidId())
builder.addHeader(Constant.Device.env, Constant.Param.env) builder.addHeader(Constant.Device.env, com.ym.modulecommon.Constant.param.env)
if (!TextUtils.isEmpty(SettingPreference.getUserAgent())) { if (!TextUtils.isEmpty(com.ym.modulecommon.utils.SettingPreference.getUserAgent())) {
builder.addHeader("web-user-agent", SettingPreference.getUserAgent()) builder.addHeader("web-user-agent", com.ym.modulecommon.utils.SettingPreference.getUserAgent())
builder.removeHeader("User-Agent") builder.removeHeader("User-Agent")
builder.addHeader("User-Agent", SettingPreference.getUserAgent()) builder.addHeader("User-Agent", com.ym.modulecommon.utils.SettingPreference.getUserAgent())
} }
val headers: Request = builder.build() val headers: Request = builder.build()
chain.proceed(headers) chain.proceed(headers)
......
...@@ -14,18 +14,18 @@ import android.widget.TextView ...@@ -14,18 +14,18 @@ import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bytedance.sdk.openadsdk.TTNativeExpressAd import com.bytedance.sdk.openadsdk.TTNativeExpressAd
import com.ym.admodule.config.AdManager
import com.ym.game.adapter.GameOrderListAdapter import com.ym.game.adapter.GameOrderListAdapter
import com.ym.game.listener.IDialogViewCloseCallback import com.ym.game.listener.IDialogViewCloseCallback
import com.ym.game.module.FlyBoxEntity import com.ym.game.module.FlyBoxEntity
import com.ym.game.module.OrderListEntity import com.ym.game.module.OrderListEntity
import com.ym.game.module.TurntableEntity import com.ym.game.module.TurntableEntity
import com.ym.library.AppliContext import com.ym.library.AppliContext
import com.ym.library.config.AdManager
import com.ym.library.config.ZXADSizeConfig import com.ym.library.config.ZXADSizeConfig
import com.ym.library.listener.ZXADExpressListener import com.ym.library.listener.ZXADExpressListener
import com.ym.library.module.NewsEntity import com.ym.library.module.NewsEntity
import com.ym.library.utils.ADConfig import com.ym.library.utils.ADConfig
import com.ym.library.utils.PhoneUtils import com.ym.modulecommon.utils.PhoneUtils
import com.ym.library.utils.Utils import com.ym.library.utils.Utils
import com.ym.xync.R import com.ym.xync.R
import java.text.DecimalFormat import java.text.DecimalFormat
...@@ -140,58 +140,69 @@ object MainDialog { ...@@ -140,58 +140,69 @@ object MainDialog {
AdManager.loadFeedAd( AdManager.loadFeedAd(
ADConfig.AD_IMG_FADE, ADConfig.AD_IMG_FADE,
(context), (context),
ZXADSizeConfig( com.ym.admodule.config.ZXADSizeConfig(
Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 56, Utils.px2dip(com.ym.library.utils.PhoneUtils.getScreenWidth(context).toFloat()) - 56,
((Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 56) * 0.66).toInt() ((Utils.px2dip(
com.ym.library.utils.PhoneUtils.getScreenWidth(context).toFloat()
) - 56) * 0.66).toInt()
), ),
object :
ZXADExpressListener {
override fun onError(p1: String?) {
}
override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
}
override fun onAdClicked(newsEntity: NewsEntity) {
}
override fun onAdShow(newsEntity: NewsEntity) {
}
override fun onRenderFail(s: String) {
}
override fun onRenderSuccess() {
}
override fun onDownloadFinished() {
}
override fun onInstalled() {
}
override fun onDownloadFailed() {
}
override fun onDownloadPaused() {
}
override fun onDownloadActive() {
}
override fun onIdle() {
}
override fun onFail() {
}
override fun onSuccess() {
}
},
layoutAd layoutAd
) )
// AdManager.loadFeedAd(
// ADConfig.AD_IMG_FADE,
// (context),
// ZXADSizeConfig(
// Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 56,
// ((Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 56) * 0.66).toInt()
// ),
// object :
// ZXADExpressListener {
// override fun onError(p1: String?) {
//
// }
//
// override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
// }
//
// override fun onAdClicked(newsEntity: NewsEntity) {
// }
//
// override fun onAdShow(newsEntity: NewsEntity) {
// }
//
// override fun onRenderFail(s: String) {
// }
//
// override fun onRenderSuccess() {
// }
//
// override fun onDownloadFinished() {
// }
//
// override fun onInstalled() {
// }
//
// override fun onDownloadFailed() {
// }
//
// override fun onDownloadPaused() {
// }
//
// override fun onDownloadActive() {
// }
//
// override fun onIdle() {
// }
//
// override fun onFail() {
// }
//
// override fun onSuccess() {
// }
//
// },
// layoutAd
// )
mDialogView.findViewById<TextView>(R.id.btn_get_drop_happy_accept).setOnClickListener { mDialogView.findViewById<TextView>(R.id.btn_get_drop_happy_accept).setOnClickListener {
mDialog.dismiss() mDialog.dismiss()
...@@ -362,62 +373,72 @@ object MainDialog { ...@@ -362,62 +373,72 @@ object MainDialog {
// myAdLayParam.width = PhoneUtils.getScreenWidth(context) - Utils.dip2px(30) // myAdLayParam.width = PhoneUtils.getScreenWidth(context) - Utils.dip2px(30)
// myAdLayParam.height = (PhoneUtils.getScreenWidth(context) * 0.66f).toInt() // myAdLayParam.height = (PhoneUtils.getScreenWidth(context) * 0.66f).toInt()
// layoutAd.layoutParams = myAdLayParam // layoutAd.layoutParams = myAdLayParam
AdManager.loadFeedAd( AdManager.loadFeedAd(
ADConfig.AD_IMG_FADE, ADConfig.AD_IMG_FADE,
(context as Activity), (context),
ZXADSizeConfig( com.ym.admodule.config.ZXADSizeConfig(
Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 30, Utils.px2dip(com.ym.library.utils.PhoneUtils.getScreenWidth(context).toFloat()) - 30,
((Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 30) * 0.66).toInt() ((Utils.px2dip(
com.ym.library.utils.PhoneUtils.getScreenWidth(context).toFloat()
) - 30) * 0.66).toInt()
), ),
object :
ZXADExpressListener {
override fun onError(p1: String?) {
}
override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
}
override fun onAdClicked(newsEntity: NewsEntity) {
}
override fun onAdShow(newsEntity: NewsEntity) {
}
override fun onRenderFail(s: String) {
}
override fun onRenderSuccess() {
}
override fun onDownloadFinished() {
}
override fun onInstalled() {
}
override fun onDownloadFailed() {
}
override fun onDownloadPaused() {
}
override fun onDownloadActive() {
}
override fun onIdle() {
}
override fun onFail() {
}
override fun onSuccess() {
}
},
layoutAd layoutAd
) )
// AdManager.loadFeedAd(
// ADConfig.AD_IMG_FADE,
// (context as Activity),
// ZXADSizeConfig(
// Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 30,
// ((Utils.px2dip(PhoneUtils.getScreenWidth(context).toFloat()) - 30) * 0.66).toInt()
// ),
// object :
// ZXADExpressListener {
// override fun onError(p1: String?) {
//
// }
//
// override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
// }
//
// override fun onAdClicked(newsEntity: NewsEntity) {
// }
//
// override fun onAdShow(newsEntity: NewsEntity) {
// }
//
// override fun onRenderFail(s: String) {
// }
//
// override fun onRenderSuccess() {
// }
//
// override fun onDownloadFinished() {
// }
//
// override fun onInstalled() {
// }
//
// override fun onDownloadFailed() {
// }
//
// override fun onDownloadPaused() {
// }
//
// override fun onDownloadActive() {
// }
//
// override fun onIdle() {
// }
//
// override fun onFail() {
// }
//
// override fun onSuccess() {
// }
//
// },
// layoutAd
// )
mDialog.setCanceledOnTouchOutside(false) mDialog.setCanceledOnTouchOutside(false)
mDialog.setCancelable(false) mDialog.setCancelable(false)
......
...@@ -12,6 +12,8 @@ import android.widget.RelativeLayout ...@@ -12,6 +12,8 @@ import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.ym.admodule.config.AdManager
import com.ym.admodule.listener.ZXADVideoListener
import com.ym.cms.listener.OnRecycleItemClickListener import com.ym.cms.listener.OnRecycleItemClickListener
import com.ym.game.listener.IDialogViewCloseCallback import com.ym.game.listener.IDialogViewCloseCallback
import com.ym.game.adapter.SigninDropsAdapter import com.ym.game.adapter.SigninDropsAdapter
...@@ -23,9 +25,7 @@ import com.ym.game.module.WateringTaskEntity ...@@ -23,9 +25,7 @@ import com.ym.game.module.WateringTaskEntity
import com.ym.game.net.GameApiClient import com.ym.game.net.GameApiClient
import com.ym.game.presenter.WateringRewardPresenter import com.ym.game.presenter.WateringRewardPresenter
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.config.AdManager
import com.ym.library.config.ZXADRewardVideo import com.ym.library.config.ZXADRewardVideo
import com.ym.library.listener.ZXADVideoListener
import com.ym.library.module.NewsEntity import com.ym.library.module.NewsEntity
import com.ym.library.net.BaseObserver import com.ym.library.net.BaseObserver
import com.ym.library.net.RxSchedulers import com.ym.library.net.RxSchedulers
...@@ -121,10 +121,15 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View, ...@@ -121,10 +121,15 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View,
3 -> dismiss() 3 -> dismiss()
6 -> { 6 -> {
dismiss() dismiss()
JumpUtils.h5Jump("每日福利", Constant.Param.WelfareCenter, false,mContext as Activity) JumpUtils.h5Jump(
"每日福利",
Constant.Param.WelfareCenter,
false,
mContext as Activity
)
} }
4 -> { 4 -> {
EventUtils.onEvent("click_receive_coin_task_video_btn","领金币任务视频") EventUtils.onEvent("click_receive_coin_task_video_btn", "领金币任务视频")
// mPresenter?.getRrchardDailyTask() // mPresenter?.getRrchardDailyTask()
//看广告 //看广告
// ToponManager.loadReward( // ToponManager.loadReward(
...@@ -173,67 +178,33 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View, ...@@ -173,67 +178,33 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View,
// }, // },
// AdID.mPlacementId_Reward_video_luck_farm // AdID.mPlacementId_Reward_video_luck_farm
// ) // )
AdManager.loadRewardVideoAd( AdManager.playRewardAd(
ADConfig.AD_REWARD_VIDIO, ADConfig.AD_REWARD_VIDIO,
"",
(mContext as Activity), (mContext as Activity),
object : ZXADVideoListener { object : ZXADVideoListener {
override fun onFail() {
}
override fun onSuccess() {
}
override fun onError() {
}
override fun onRewardVideoCached() {
}
override fun setRewardAdInteractionListener() {
}
override fun onRewardVerify() {
}
override fun onVideoError() {
// showToponWaterVideo()
}
override fun onRewardVideoAdLoad() {
}
override fun onRewardVideoAdLoad(entity: NewsEntity) {
}
override fun onAdShow() {
}
override fun onAdVideoBarClick(newsEntity: NewsEntity) {
}
override fun onAdClose() { override fun onAdClose() {
AdManager.loadNextCacheRewardVideoAd(
ADConfig.AD_REWARD_VIDIO,
mContext as Activity
)
getVideoAcceleratorsReceive2(); getVideoAcceleratorsReceive2();
} }
override fun onVideoComplete() { override fun onAdShow() {
} }
override fun onSkippedVideo() { override fun onAdVideoBarClick() {
} }
override fun onFullScreenVideoCached() { override fun onError(errorMsg: String?) {
AdManager.loadNextCacheRewardVideoAd(
ADConfig.AD_REWARD_VIDIO,
mContext as Activity
)
} }
override fun onLoadVideoAd(rewardVideoAD: ZXADRewardVideo) { override fun onSuccess() {
} }
}) })
} }
...@@ -312,6 +283,7 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View, ...@@ -312,6 +283,7 @@ class SiginDropsPopupwindow : PopupWindow(), WateringRewardContract.View,
this.animationStyle = R.style.main_photo_anim this.animationStyle = R.style.main_photo_anim
isClippingEnabled = false isClippingEnabled = false
} }
//看视频领上报 //看视频领上报
fun getVideoAcceleratorsReceive2() { fun getVideoAcceleratorsReceive2() {
GameApiClient.gameApi.adVideoReport() GameApiClient.gameApi.adVideoReport()
......
...@@ -11,15 +11,16 @@ import android.view.MotionEvent ...@@ -11,15 +11,16 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import com.ym.admodule.config.AdManager
import com.ym.admodule.listener.ZXADVideoListener
import com.ym.game.GameActivity
import com.ym.game.listener.IDialogViewCloseCallback import com.ym.game.listener.IDialogViewCloseCallback
import com.ym.game.contract.TurntableContract import com.ym.game.contract.TurntableContract
import com.ym.game.module.StatusEntity import com.ym.game.module.StatusEntity
import com.ym.game.module.TurntableEntity import com.ym.game.module.TurntableEntity
import com.ym.game.net.GameApiClient import com.ym.game.net.GameApiClient
import com.ym.game.presenter.TurntablePresenter import com.ym.game.presenter.TurntablePresenter
import com.ym.library.config.AdManager
import com.ym.library.config.ZXADRewardVideo import com.ym.library.config.ZXADRewardVideo
import com.ym.library.listener.ZXADVideoListener
import com.ym.library.module.NewsEntity import com.ym.library.module.NewsEntity
import com.ym.library.net.BaseObserver import com.ym.library.net.BaseObserver
import com.ym.library.net.RxSchedulers import com.ym.library.net.RxSchedulers
...@@ -32,6 +33,7 @@ import com.ym.library.utils.EventUtils ...@@ -32,6 +33,7 @@ import com.ym.library.utils.EventUtils
import com.ym.library.utils.LogUtils import com.ym.library.utils.LogUtils
import com.ym.library.utils.Utils import com.ym.library.utils.Utils
import com.ym.xync.R import com.ym.xync.R
import org.jetbrains.anko.act
/** /**
...@@ -187,81 +189,37 @@ object TurntableDialog : TurntableUtils(), TurntableContract.View { ...@@ -187,81 +189,37 @@ object TurntableDialog : TurntableUtils(), TurntableContract.View {
// } // }
// //
// }, AdID.mPlacementId_Reward_video_luck_farm) // }, AdID.mPlacementId_Reward_video_luck_farm)
AdManager.playRewardAd(
AdManager.loadRewardVideoAd(
ADConfig.AD_REWARD_VIDIO, ADConfig.AD_REWARD_VIDIO,
"",
(context as Activity), (context as Activity),
object : ZXADVideoListener { object : ZXADVideoListener {
override fun onFail() { override fun onAdClose() {
AdManager.loadNextCacheRewardVideoAd(ADConfig.AD_REWARD_VIDIO, context as Activity)
} getVideoAcceleratorsReceive3();
override fun onSuccess() {
}
override fun onError() {
reset()
btnTurntableLottery?.isEnabled = false
isStartAnim = true
isUpdate = true
mPresenter?.getTurntableLotteryResult()
}
override fun onRewardVideoCached() {
}
override fun setRewardAdInteractionListener() {
}
override fun onRewardVerify() {
}
override fun onVideoError() {
// showToponWaterVideo()
reset() reset()
btnTurntableLottery?.isEnabled = false btnTurntableLottery?.isEnabled = false
isStartAnim = true isStartAnim = true
isUpdate = true isUpdate = true
mPresenter?.getTurntableLotteryResult()
}
override fun onRewardVideoAdLoad() {
}
override fun onRewardVideoAdLoad(entity: NewsEntity) {
} }
override fun onAdShow() { override fun onAdShow() {
} }
override fun onAdVideoBarClick(newsEntity: NewsEntity) { override fun onAdVideoBarClick() {
} }
override fun onAdClose() { override fun onError(errorMsg: String?) {
getVideoAcceleratorsReceive3(); AdManager.loadNextCacheRewardVideoAd(ADConfig.AD_REWARD_VIDIO, context as Activity)
reset() reset()
btnTurntableLottery?.isEnabled = false btnTurntableLottery?.isEnabled = false
isStartAnim = true isStartAnim = true
isUpdate = true isUpdate = true
} mPresenter?.getTurntableLotteryResult()
override fun onVideoComplete() {
}
override fun onSkippedVideo() {
}
override fun onFullScreenVideoCached() {
} }
override fun onLoadVideoAd(rewardVideoAD: ZXADRewardVideo) { override fun onSuccess() {
} }
}) })
} }
...@@ -423,6 +381,7 @@ object TurntableDialog : TurntableUtils(), TurntableContract.View { ...@@ -423,6 +381,7 @@ object TurntableDialog : TurntableUtils(), TurntableContract.View {
this.onTouchEvent(event) this.onTouchEvent(event)
} }
} }
//看视频领上报 //看视频领上报
fun getVideoAcceleratorsReceive3() { fun getVideoAcceleratorsReceive3() {
GameApiClient.gameApi.adVideoReport() GameApiClient.gameApi.adVideoReport()
......
...@@ -27,6 +27,9 @@ allprojects { ...@@ -27,6 +27,9 @@ allprojects {
maven { maven {
url "http://test.vlion.cn:8081/nexus/content/repositories/inland/" url "http://test.vlion.cn:8081/nexus/content/repositories/inland/"
} }
maven{
url "http://zx-maven.huolea.com/repository/admodule/"
}
} }
} }
......
...@@ -20,6 +20,9 @@ android { ...@@ -20,6 +20,9 @@ android {
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
} }
// manifestPlaceholders = [
// "APPLICATION_ID": applicationId,
// ]
} }
sourceSets { sourceSets {
...@@ -59,60 +62,64 @@ repositories { ...@@ -59,60 +62,64 @@ repositories {
dependencies { dependencies {
api fileTree(include: ['*.jar'], dir: 'libs') api fileTree(include: ['*.jar'], dir: 'libs')
api fileTree(include: ['*.aar'], dir: 'libs') api fileTree(include: ['*.aar'], dir: 'libs')
api 'androidx.appcompat:appcompat:1.2.0-alpha02' // api 'androidx.appcompat:appcompat:1.2.0-alpha02'
api 'com.android.support:design:28.0.0' // api 'com.android.support:design:28.0.0'
api 'com.android.support:support-v4:28.0.0' // api 'com.android.support:support-v4:28.0.0'
api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72' // api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72'
api 'com.github.bumptech.glide:glide:4.9.0' // api 'com.github.bumptech.glide:glide:4.9.0'
api 'jp.wasabeef:glide-transformations:4.0.1' // api 'jp.wasabeef:glide-transformations:4.0.1'
api 'com.android.support:multidex:1.0.0' // api 'com.android.support:multidex:1.0.0'
api 'com.squareup.okhttp3:okhttp:3.10.0' // api 'com.squareup.okhttp3:okhttp:3.10.0'
api 'com.squareup.okhttp3:logging-interceptor:3.4.1' // api 'com.squareup.okhttp3:logging-interceptor:3.4.1'
api 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' // api 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
api 'com.trello.rxlifecycle2:rxlifecycle:2.2.0' // api 'com.trello.rxlifecycle2:rxlifecycle:2.2.0'
api 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.0' // api 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.0'
api 'com.squareup.retrofit2:retrofit:2.3.0' // api 'com.squareup.retrofit2:retrofit:2.3.0'
api 'com.squareup.retrofit2:converter-gson:2.3.0' // api 'com.squareup.retrofit2:converter-gson:2.3.0'
api 'com.squareup.okhttp3:logging-interceptor:3.4.1' // api 'com.squareup.okhttp3:logging-interceptor:3.4.1'
api 'org.jetbrains.anko:anko-common:0.9' // api 'org.jetbrains.anko:anko-common:0.9'
api 'com.badoo.mobile:android-weak-handler:1.1' // api 'com.badoo.mobile:android-weak-handler:1.1'
api 'com.gyf.immersionbar:immersionbar:3.0.0' api 'com.gyf.immersionbar:immersionbar:3.0.0'
//AndroidX // //AndroidX
implementation 'androidx.legacy:legacy-support-v4:1.0.0' // implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' // implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
//
//sdk相关 // //sdk相关
implementation 'com.android.support:support-v4:28.+' // implementation 'com.android.support:support-v4:28.+'
implementation 'com.android.support:appcompat-v7:28.0.0' // implementation 'com.android.support:appcompat-v7:28.0.0'
// 2.6.5之后的版本,SDK有依赖recyclerview-v7 // // 2.6.5之后的版本,SDK有依赖recyclerview-v7
implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0'
// implementation 'com.google.code.gson:gson:2.8.5' //// implementation 'com.google.code.gson:gson:2.8.5'
// implementation files('libs/poi-3.0-rc4-20070503.jar') //// implementation files('libs/poi-3.0-rc4-20070503.jar')
//
api 'com.tencent.bugly:crashreport:latest.release' api 'com.tencent.bugly:crashreport:latest.release'
api 'com.tencent.bugly:nativecrashreport:latest.release' api 'com.tencent.bugly:nativecrashreport:latest.release'
//
api('cn.vlion.inland:inlandmix:9.8.5') { // api('cn.vlion.inland:inlandmix:9.8.5') {
exclude group: 'cn.vlion.inland', module: 'inlandb' // exclude group: 'cn.vlion.inland', module: 'inlandb'
exclude group: 'cn.vlion.inland', module: 'inlandg' // exclude group: 'cn.vlion.inland', module: 'inlandg'
exclude group: 'cn.vlion.inland', module: 'inlands' // exclude group: 'cn.vlion.inland', module: 'inlands'
exclude group: 'cn.vlion.inland', module: 'inlandt' // exclude group: 'cn.vlion.inland', module: 'inlandt'
exclude group: 'cn.vlion.inland', module: 'inlandtf' // exclude group: 'cn.vlion.inland', module: 'inlandtf'
exclude group: 'pl.droidsonroids.gif' // exclude group: 'pl.droidsonroids.gif'
exclude group: 'cn.vlion.inland', module: 'inlandk' // exclude group: 'cn.vlion.inland', module: 'inlandk'
exclude group: 'cn.vlion.inland', module: 'inlandimb' // exclude group: 'cn.vlion.inland', module: 'inlandimb'
exclude group: 'com.squareup.picasso' // exclude group: 'com.squareup.picasso'
exclude group: 'cn.vlion.inland', module: 'inlanddk' // exclude group: 'cn.vlion.inland', module: 'inlanddk'
exclude group: 'com.github.bumptech.glide' // exclude group: 'com.github.bumptech.glide'
exclude group: 'com.tuia' // exclude group: 'com.tuia'
exclude group: 'cn.vlion.inland', module: 'inlandhy' // exclude group: 'cn.vlion.inland', module: 'inlandhy'
exclude group: 'com.mintegral.msdk' // exclude group: 'com.mintegral.msdk'
exclude group: 'cn.vlion.inlandsh' // exclude group: 'cn.vlion.inlandsh'
// }
api 'com.ym.admodule:admodule:1.0.1.7'
api ("com.bx:adsdk:1.3.3"){
exclude group: 'com.google.code.gson'
} }
api "com.bx:adsdk:1.3.3"
} }
//configurations {
// all*.exclude group: 'com.google.code.gson'
//}
{
"h5_url": {
"wx_share": "https://newspool.aichuangzuo.cn/jijuShare/share.html",
"onlineService": "https://cdn-apph5.zhangxinzhixun.com/location/Service",
"pay": "https://newspool.huolea.com/sspapiNovel/su/custom/jiluapp/pay.html",
"privacy": "https://newspool.huolea.com/sspapiNovel/su/custom/jiluapp/privacy.html",
"invite": "https://newspool.aichuangzuo.cn/jijuShare/invitation.html",
"tutorial": "https://cdn-apph5.zhangxinzhixun.com/location/UsingTutorial",
"user": "https://newspool.huolea.com/sspapiNovel/su/custom/jiluapp/user.html"
},
"pay_config": {
"wx": {
"status": 1
},
"ali": {
"status": 1
}
},
"lua": "",
"check": 1,
"md5": "a5adff92353f772db544b8c389c5e0d2"
}
\ No newline at end of file
package com.ayl.ces.jni
import android.content.Context
import android.util.Log
/**
* Created by gaoleichao on 2018/7/13.
*/
class CesCore {
lateinit var mContext: Context
var isInit: Boolean = false
init {
System.loadLibrary("native-lib")
}
companion object {
/**
* @param
*/
@Volatile
var mCesCore: CesCore? = null
fun getInstance(): CesCore {
if (mCesCore == null) {
synchronized(CesCore::class.java) {
if (mCesCore == null) {
mCesCore = CesCore()
}
}
}
return mCesCore!!
}
}
fun init(context: Context) {
mContext = context
native_init(mContext)
}
fun SmData(): String {
return sm_work(mContext)
}
fun setData(strS: String) {
SetData(strS)
isInit = true
Log.d("splash", "isInit:" + isInit)
}
fun getIsInit(): Boolean {
return isInit
}
private external fun native_init(context: Context?)
private external fun sm_work(context: Context?): String
/////////////////////////////////////
external fun SetData(strSource: String): Boolean
external fun Dowork(src: String, client_no: String): String
external fun Dework(src: String, client_no: String): String
external fun Sgwork(src: String): String
external fun Ckwork(client_no: String): String
external fun Version(): String
}
\ No newline at end of file
package com.ym.library
import android.content.Context
import android.text.TextUtils
import android.util.Log
import com.ym.library.utils.LogUtils
import com.ym.library.utils.PhoneUtils
import com.ym.library.utils.SettingPreference
import com.ym.library.utils.Utils
import org.jetbrains.anko.doAsync
import java.lang.Exception
/**
* Created by gaoleichao on 2018/7/12.
*/
class Config {
companion object {
fun init(context: Context) {
doAsync {
try {
if (TextUtils.isEmpty(SettingPreference.getUid())) {
SettingPreference.setUid(SettingPreference.getUid())
}
SettingPreference.setModel(PhoneUtils.getModel())
SettingPreference.setAndroidId(PhoneUtils.getAndroidID(context))
SettingPreference.setCarrier(PhoneUtils.getOperator(context))
SettingPreference.setW(PhoneUtils.getScreenWidth(context).toString())
SettingPreference.setH(PhoneUtils.getScreenHeight(context).toString())
SettingPreference.setDevice(PhoneUtils.getDeviceId(context))
SettingPreference.setImei(PhoneUtils.getImei(context))
SettingPreference.setSsid(PhoneUtils.getBSSID(context))
SettingPreference.setImsi(PhoneUtils.getIMSI(context))
SettingPreference.setMac(PhoneUtils.getMac(context))
// SettingPreference.setEnv(CesCore.getInstance().Ckwork(PhoneUtils.getAndroidID(context)))
SettingPreference.setVC(PhoneUtils.getAppVersionCode(context).toString())
SettingPreference.setVN(PhoneUtils.getAppVersionName(context))
SettingPreference.setNTT(PhoneUtils.getNetworkType(context).toString())
SettingPreference.setMac(PhoneUtils.getMac(context))
SettingPreference.setIp(PhoneUtils.getIPAddress(false))
SettingPreference.setSource(Utils.getChannel(context))
SettingPreference.setSVN(""+android.os.Build.VERSION.SDK_INT)
}catch (e:Exception){}
LogUtils.d("Param", "Param.svn: " + Constant.Param.svn)
LogUtils.d("Param", "Param.vendor: " + Constant.Param.vendor)
LogUtils.d("Param", "Param.uid: " + SettingPreference.getUid())
LogUtils.d("Param", "Param.androidId: " + SettingPreference.getAndroidId())
Log.d("Param","getAndroidId:"+SettingPreference.getAndroidId())
LogUtils.d("Param", "Param.carrier: " + SettingPreference.getCarrier())
LogUtils.d("Param", "Param.w: " + SettingPreference.getW())
LogUtils.d("Param", "Param.h: " + SettingPreference.getH())
LogUtils.d("Param", "Param.model: " + SettingPreference.getModel())
LogUtils.d("Param", "Param.vc: " + SettingPreference.getVC())
Log.d("Param", "Param.device: " + SettingPreference.getDevice())
LogUtils.d("Param", "Param.imei: " + SettingPreference.getImei())
LogUtils.d("Param", "Param.mac: " + SettingPreference.getMac())
LogUtils.d("Param", "Param.ntt: " + SettingPreference.getNTT())
LogUtils.d("Param", "Param.imsi: " + SettingPreference.getImsi())
// LogUtils.d("Param", "Param.env: " + SettingPreference.getEnv())
}
}
}
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ import android.Manifest; ...@@ -4,7 +4,7 @@ import android.Manifest;
import android.os.Build; import android.os.Build;
import com.ym.library.net.LatestLoginInfo; import com.ym.library.net.LatestLoginInfo;
import com.ym.library.utils.PhoneUtils; import com.ym.modulecommon.utils.PhoneUtils;
import java.util.List; import java.util.List;
......
...@@ -59,12 +59,12 @@ abstract class JavaInterface { ...@@ -59,12 +59,12 @@ abstract class JavaInterface {
@JavascriptInterface @JavascriptInterface
fun getNovelUid(): String? { fun getNovelUid(): String? {
System.out.println("getNovelUid()") System.out.println("getNovelUid()")
return SettingPreference.getUid() return com.ym.modulecommon.utils.SettingPreference.getUid()
} }
@JavascriptInterface @JavascriptInterface
fun getUserInfo(): String? { fun getUserInfo(): String? {
var entity = SettingPreference.getUserInfoData() var entity = com.ym.modulecommon.utils.SettingPreference.getUserInfoData()
if (entity != null) { if (entity != null) {
var data = Utils.obj2Str(entity) var data = Utils.obj2Str(entity)
System.out.println("getUserInfoData():$data") System.out.println("getUserInfoData():$data")
...@@ -86,7 +86,7 @@ abstract class JavaInterface { ...@@ -86,7 +86,7 @@ abstract class JavaInterface {
*/ */
@JavascriptInterface @JavascriptInterface
fun getToken(): String { fun getToken(): String {
return SettingPreference.getToken() return com.ym.modulecommon.utils.SettingPreference.getToken()
} }
/** /**
...@@ -95,7 +95,7 @@ abstract class JavaInterface { ...@@ -95,7 +95,7 @@ abstract class JavaInterface {
@JavascriptInterface @JavascriptInterface
fun availCoins(): Int { fun availCoins(): Int {
var user = SettingPreference.getUserInfoData() var user = com.ym.modulecommon.utils.SettingPreference.getUserInfoData()
println("availCoins()-------------$user-----") println("availCoins()-------------$user-----")
return user?.availCoins ?: 0 return user?.availCoins ?: 0
...@@ -461,27 +461,27 @@ abstract class JavaInterface { ...@@ -461,27 +461,27 @@ abstract class JavaInterface {
val params = JSONObject() val params = JSONObject()
val ts = System.currentTimeMillis() val ts = System.currentTimeMillis()
params.put(Constant.Device.ts, ts) params.put(Constant.Device.ts, ts)
params.put(Constant.Device.uid, SettingPreference.getUid()) params.put(Constant.Device.uid, com.ym.modulecommon.utils.SettingPreference.getUid())
params.put(Constant.Device.token, SettingPreference.getToken()) params.put(Constant.Device.token, com.ym.modulecommon.utils.SettingPreference.getToken())
params.put(Constant.Device.aid, SettingPreference.getAndroidId()) params.put(Constant.Device.aid, com.ym.modulecommon.utils.SettingPreference.getAndroidId())
params.put(Constant.Device.imei, SettingPreference.getImei()) params.put(Constant.Device.imei, com.ym.modulecommon.utils.SettingPreference.getImei())
params.put(Constant.Device.device, SettingPreference.getDevice()) params.put(Constant.Device.device, com.ym.modulecommon.utils.SettingPreference.getDevice())
params.put(Constant.Device.mac, SettingPreference.getMac()) params.put(Constant.Device.mac, com.ym.modulecommon.utils.SettingPreference.getMac())
params.put(Constant.Device.platform, "android") params.put(Constant.Device.platform, "android")
params.put(Constant.Device.carrier, SettingPreference.getCarrier()) params.put(Constant.Device.carrier, com.ym.modulecommon.utils.SettingPreference.getCarrier())
params.put(Constant.Device.w, SettingPreference.getW()) params.put(Constant.Device.w, com.ym.modulecommon.utils.SettingPreference.getW())
params.put(Constant.Device.vendor, Build.MANUFACTURER) params.put(Constant.Device.vendor, Build.MANUFACTURER)
params.put(Constant.Device.h, SettingPreference.getH()) params.put(Constant.Device.h, com.ym.modulecommon.utils.SettingPreference.getH())
params.put(Constant.Device.ip, SettingPreference.getIp()) params.put(Constant.Device.ip, com.ym.modulecommon.utils.SettingPreference.getIp())
params.put(Constant.Device.imsi, SettingPreference.getImsi()) params.put(Constant.Device.imsi, com.ym.modulecommon.utils.SettingPreference.getImsi())
params.put(Constant.Device.model, SettingPreference.getModel()) params.put(Constant.Device.model, com.ym.modulecommon.utils.SettingPreference.getModel())
params.put(Constant.Device.vn, SettingPreference.getVN()) params.put(Constant.Device.vn, com.ym.modulecommon.utils.SettingPreference.getVN())
params.put(Constant.Device.ntt, SettingPreference.getNTT()) params.put(Constant.Device.ntt, com.ym.modulecommon.utils.SettingPreference.getNTT())
params.put(Constant.Device.vc, SettingPreference.getVC()) params.put(Constant.Device.vc, com.ym.modulecommon.utils.SettingPreference.getVC())
params.put(Constant.Device.source, SettingPreference.getSource()) params.put(Constant.Device.source, com.ym.modulecommon.utils.SettingPreference.getSource())
params.put(Constant.Device.ua, SettingPreference.getUA()) params.put(Constant.Device.ua, com.ym.modulecommon.utils.SettingPreference.getUA())
params.put(Constant.Device.svn, SettingPreference.getSVN()) params.put(Constant.Device.svn, com.ym.modulecommon.utils.SettingPreference.getSVN())
var param = obj2Array(params) var param = obj2Array(params)
System.out.println("-------------:$param") System.out.println("-------------:$param")
return params.toString() return params.toString()
...@@ -624,7 +624,7 @@ abstract class JavaInterface { ...@@ -624,7 +624,7 @@ abstract class JavaInterface {
@JavascriptInterface @JavascriptInterface
fun withDraw() { fun withDraw() {
val token = SettingPreference.getToken() val token = com.ym.modulecommon.utils.SettingPreference.getToken()
if (token.isEmpty()) { if (token.isEmpty()) {
WxImplUtils().onAuth(act, object : WxImplUtils.IWxLoginCallback { WxImplUtils().onAuth(act, object : WxImplUtils.IWxLoginCallback {
override fun onWxSuccess(token: String?, openid: String?) { override fun onWxSuccess(token: String?, openid: String?) {
......
...@@ -16,6 +16,7 @@ import com.ym.library.R ...@@ -16,6 +16,7 @@ import com.ym.library.R
import com.ym.library.module.ReportEntity import com.ym.library.module.ReportEntity
import com.ym.library.net.* import com.ym.library.net.*
import com.ym.library.utils.EventUtils import com.ym.library.utils.EventUtils
import com.ym.library.utils.GsonInstance
import com.ym.library.utils.SettingPreference import com.ym.library.utils.SettingPreference
import com.ym.library.utils.Utils import com.ym.library.utils.Utils
import kotlinx.android.synthetic.main.activity_xiaoman.* import kotlinx.android.synthetic.main.activity_xiaoman.*
...@@ -35,7 +36,7 @@ class XiaoManActivity : BaseActivity() { ...@@ -35,7 +36,7 @@ class XiaoManActivity : BaseActivity() {
* @param placeId 资源位id:必传 * @param placeId 资源位id:必传
* @param callback CampaignCallback 回调 * @param callback CampaignCallback 回调
*/ */
campaignFragment = CampaignFragment.newInstance(SettingPreference.getToken()) campaignFragment = CampaignFragment.newInstance(com.ym.modulecommon.utils.SettingPreference.getToken())
campaignFragment?.setPlaceId("2758") campaignFragment?.setPlaceId("2758")
campaignFragment?.setCallback(object : CampaignCallback() { campaignFragment?.setCallback(object : CampaignCallback() {
override fun showAd(params: String) { override fun showAd(params: String) {
......
...@@ -6,7 +6,7 @@ import android.view.Gravity ...@@ -6,7 +6,7 @@ import android.view.Gravity
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.ym.library.AppliContext import com.ym.library.AppliContext
import com.ym.library.utils.PhoneUtils import com.ym.modulecommon.utils.PhoneUtils
/** /**
* Created by gaoleichao on 2020-06-03 * Created by gaoleichao on 2020-06-03
......
package com.ym.library.bd
import android.app.Activity
import android.os.Handler
import android.os.Message
import android.os.SystemClock
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.TextView
import android.widget.Toast
import com.baidu.mobads.*
import com.baidu.mobads.rewardvideo.RewardVideoAd
import com.ym.library.config.*
import com.ym.library.listener.ADListener
import com.ym.library.listener.ZXADExpressListener
import com.ym.library.listener.ZXADSplashListener
import com.ym.library.listener.ZXADVideoListener
import com.ym.library.module.NewsEntity
import com.ym.library.net.AdUpload
import com.ym.library.utils.EventUtils
import com.ym.library.utils.LogHelper
object BDADUtils {
private const val TAG = "AdManager"
//开屏
fun loadSplashAd(newsEntity: NewsEntity, activity: Activity, container: ViewGroup, zxadListener: ZXADSplashListener?, skipView: TextView?,zxadCallback: ZXADCallback) {
// 广告展现前先调用sdk初始化方法,可以有效缩短广告第一次展现所需时间
BaiduManager.init(activity)
container.visibility = View.VISIBLE
// 增加lp页面关闭回调,不需要该回调的继续使用原来接口就可以
val listener: SplashLpCloseListener = object : SplashLpCloseListener {
override fun onLpClosed() {
// Toast.makeText(activity, "lp页面关闭", Toast.LENGTH_SHORT).show()
zxadListener?.onAdSkip()
Log.d(TAG,"百度 开屏 onLpClosed")
}
override fun onAdDismissed() {
zxadListener?.onAdSkip()
Log.d(TAG,"百度 开屏 onAdDismissed")
}
override fun onAdFailed(arg0: String) {
EventUtils.onEventPullFail(newsEntity)
Log.d(TAG,"百度 开屏 onAdFailed" + arg0)
zxadListener?.onAdSkip()
zxadCallback.onAdFail()
}
override fun onAdPresent() {
Log.d(TAG,"百度 开屏 onAdPresent")
container.setVisibility(View.GONE)
}
override fun onAdClick() {
Log.d(TAG,"百度 开屏 onAdClick")
// 设置开屏可接受点击时,该回调可用
zxadListener?.onAdClicked(newsEntity)
// AdUpload.onAdClick(newsEntity)
EventUtils.apiClient(newsEntity?.clk_tracking[0])
}
}
val adPlaceId = newsEntity.codeId // 重要:请填上您的广告位ID,代码位错误会导致无法请求到广告
// 等比缩小放大,裁剪边缘部分
// SplashAd.setBitmapDisplayMode(BitmapDisplayMode.DISPLAY_MODE_CENTER_CROP);
// 等比缩小放大,裁剪边缘部分
// SplashAd.setBitmapDisplayMode(BitmapDisplayMode.DISPLAY_MODE_CENTER_CROP);
SplashAd(activity, container, listener, adPlaceId, true)
// AdUpload.onAdImpression(newsEntity)
EventUtils.apiClient(newsEntity?.imp_tracking[0])
}
//插屏广告
fun loadInteractionAd(
activity: Activity,
newsEntity: NewsEntity,
callback: ZXADCallback
) {
var mInterAd = InterstitialAd(activity, newsEntity.codeId)
mInterAd.setListener(object :InterstitialAdListener{
override fun onAdFailed(p0: String?) {
EventUtils.onEventShowFail(newsEntity)
callback.onAdFail()
}
override fun onAdDismissed() {
}
override fun onAdPresent() {
}
override fun onAdClick(p0: InterstitialAd?) {
// AdUpload.onAdClick(newsEntity)
}
override fun onAdReady() {
mInterAd.showAd(activity)
// AdUpload.onAdImpression(newsEntity)
}
})
//加载广告
mInterAd.loadAd()
}
//激励视频
fun loadRewardVideoAd(
activity: Activity,
newsEntity: NewsEntity,
listener: ZXADVideoListener,
callback: ZXADCallback
) {
// 激励视屏产品可以选择是否使用SurfaceView进行渲染视频
var mRewardVideoAd = RewardVideoAd(
activity,
newsEntity.codeId, object :RewardVideoAd.RewardVideoAdListener{
override fun onAdFailed(p0: String?) {
EventUtils.onEventPullFail(newsEntity)
callback.onAdFail()
listener.onError()
}
override fun playCompletion() {
listener.onVideoComplete()
}
override fun onAdShow() {
// AdUpload.onAdImpression(newsEntity)
EventUtils.apiClient(newsEntity?.imp_tracking[0])
callback.onAdSuccess()
}
override fun onAdClick() {
// AdUpload.onAdClick(newsEntity)
EventUtils.apiClient(newsEntity?.clk_tracking[0])
}
override fun onAdClose(p0: Float) {
listener.onAdClose()
}
override fun onVideoDownloadSuccess() {
}
override fun onVideoDownloadFailed() {
}
}, true)
mRewardVideoAd.load()
var startTime = System.currentTimeMillis()
val handler = object : Handler() {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
if(System.currentTimeMillis()-startTime<3000){
if (mRewardVideoAd != null) {
mRewardVideoAd.show()
removeCallbacksAndMessages(null)
} else{
sendEmptyMessageDelayed(1,20)
}
}else{
EventUtils.onEventPullFail(newsEntity)
removeCallbacksAndMessages(null)
}
}
}
handler.sendEmptyMessageDelayed(1,20)
}
//信息流 原生
fun loadFeedNativeAd(activity:Activity,newsEntity: NewsEntity,zxadCallback: ZXADCallback){
val zxAdSlot = ZXAdSlot()
zxAdSlot.codeID = newsEntity.codeId
zxAdSlot.count = 3
zxAdSlot.sizeConfig = ZXADSizeConfig(300,300)
val zxadNative = ZXADNative(activity, newsEntity, zxAdSlot)
zxadNative.loadAd(object :ADListener.NativeNetListener{
override fun onAdFailed(error: AdError?) {
}
override fun onAdLoaded(nativeData: NativeDataAD?) {
}
})
}
//加载信息流广告
fun loadFeedAd(
activity: Activity,
newsEntity: NewsEntity,
zxadModelConfig: ZXADSizeConfig,
zxadExpressListener: ZXADExpressListener,
container: FrameLayout,
callback: ZXADCallback
) {
// // 默认请求大图广+ICON样式
//// fetchNativeAd(BIG_PIC_AD_PLACE_ID);
// /**
// * Step 1. 创建BaiduNative对象,参数分别为: 上下文context,广告位ID
// * 注意:请将adPlaceId替换为自己的广告位ID
// * 注意:信息流广告对象,与广告位id一一对应,同一个对象可以多次发起请求
// */
// var mBaiduNativeManager = BaiduNativeManager(activity, newsEntity.codeId)
//
// // 若与百度进行相关合作,可使用如下接口上报广告的上下文
//
// // 若与百度进行相关合作,可使用如下接口上报广告的上下文
// val requestParameters = RequestParameters.Builder()
// .downloadAppConfirmPolicy(RequestParameters.DOWNLOAD_APP_CONFIRM_ONLY_MOBILE) // 用户维度:用户性别,取值:0-unknown,1-male,2-female
// .addExtra(ArticleInfo.USER_SEX, "1") // 用户维度:收藏的小说ID,最多五个ID,且不同ID用'/分隔'
// .addExtra(ArticleInfo.FAVORITE_BOOK, "这是小说的名称1/这是小说的名称2/这是小说的名称3") // 内容维度:小说、文章的名称
// .addExtra(ArticleInfo.PAGE_TITLE, "测试书名") // 内容维度:小说、文章的ID
// .addExtra(ArticleInfo.PAGE_ID, "10930484090") // 内容维度:小说分类,一级分类和二级分类用'/'分隔
// .addExtra(ArticleInfo.CONTENT_CATEGORY, "一级分类/二级分类") // 内容维度:小说、文章的标签,最多10个,且不同标签用'/分隔'
// .addExtra(ArticleInfo.CONTENT_LABEL, "标签1/标签2/标签3")
// .build()
//
// mBaiduNativeManager.loadFeedAd(requestParameters, object :BaiduNativeManager.FeedAdListener{
// override fun onNativeLoad(p0: MutableList<NativeResponse>?) {
//
// }
//
// override fun onNativeFail(p0: NativeErrorCode?) {
// }
//
// override fun onLpClosed() {
// }
//
// override fun onVideoDownloadSuccess() {
// }
//
// override fun onVideoDownloadFailed() {
// }
//
// })
}
}
\ No newline at end of file
package com.ym.library.bd;
import android.graphics.Bitmap;
import com.baidu.mobad.feeds.NativeResponse;
import com.ym.library.config.NativeADWrapper;
import com.ym.library.config.ZXADType;
import java.util.ArrayList;
import java.util.List;
public class NativeAdForBAI implements NativeADWrapper {
private NativeResponse nativeResponse;
private long mStartTime;
private long VALID_TIME = 30 * 60 * 1000;//
public NativeAdForBAI(NativeResponse response) {
nativeResponse = response;
mStartTime = System.currentTimeMillis();
}
@Override
public String getAdId() {
return ZXADType.AD_ID_BAI;
}
@Override
public List<String> getAdImageUrl() {
// 这里特殊的是 不知道返回的 大图还是单图 多图,所以做一个图片的集合返回
List<String> lists = new ArrayList<>();
lists.add(nativeResponse.getImageUrl());
lists.addAll(nativeResponse.getMultiPicUrls());
return lists;
}
@Override
public String getAdIconUrl() {
return nativeResponse.getIconUrl();
}
@Override
public String getAdContent() {
return nativeResponse.getDesc();
}
@Override
public String getAdCallToAction() {
return null;
}
@Override
public String getAdTitle() {
return nativeResponse.getTitle();
}
@Override
public float getAdStarRating() {
return 0;
}
@Override
public String getAdSource() {
return null;
}
@Override
public boolean isValid() {
return (System.currentTimeMillis() - mStartTime) < VALID_TIME;
}
@Override
public int getAdMaterialType() {
return 0;
}
@Override
public int getAdActionType() {
return 0;
}
@Override
public Bitmap getSDKLogo() {
// csj kua 默认返回都是bitmap gdt无返回,此处默认bai无返回
return null;
}
@Override
public void destroy() {
}
@Override
public int getAdChannelType() {
return ZXADType.AD_TYPE_BAI;
}
@Override
public String getAdChannelName() {
return ZXADType.AD_CHANNEL_BAI;
}
@Override
public Object getOrgAdData() {
return nativeResponse;
}
}
package com.ym.library.bd;
import android.content.Context;
import com.baidu.mobad.feeds.BaiduNative;
import com.baidu.mobad.feeds.NativeErrorCode;
import com.baidu.mobad.feeds.NativeResponse;
import com.ym.library.config.BaseChannel;
import com.ym.library.config.NativeADWrapper;
import com.ym.library.config.ZXAdSlot;
import com.ym.library.utils.LogHelper;
import java.util.List;
public class NativeBAICache extends BaseChannel implements BaiduNative.BaiduNativeNetworkListener {
private static final String TAG = NativeBAICache.class.getSimpleName();
private BaiduNative mNative;
private ZXAdSlot zxAdSlot;
public NativeBAICache(Context context, int sid, int cacheSize, long wt, ZXAdSlot zxAdSlot) {
super(context, sid, cacheSize, wt);
this.zxAdSlot = zxAdSlot;
doInit(mContext);
}
@Override
public void doInit(Context context) {
mNative = new BaiduNative(context, zxAdSlot.codeID, this);
}
@Override
public NativeADWrapper doGetAD() {
return super.doGetAD();
}
@Override
public void doLoadAd() {
if (!isRefreshing) {
if (getCacheSize() < mCacheSize) {
LogHelper.d(TAG, "BAI cache start refreshing");
isRefreshing = true;
mNative.makeRequest();
} else {
LogHelper.d(TAG, "BAI no need refresh ! getValidCount :" + getCacheSize());
}
} else {
LogHelper.d(TAG, "BAI cache Already refreshing");
}
}
@Override
public int getCacheSize() {
int valid = 0;
for (NativeADWrapper ad : mCacheList) {
if (ad.isValid()) {
valid++;
}
}
LogHelper.d(TAG, "BAI getCacheSize :" + valid);
return valid;
}
@Override
public void doClear() {
}
@Override
public void doDestroy() {
}
@Override
public void onNativeLoad(List<NativeResponse> list) {
isRefreshing = false;
isError = false;
LogHelper.d(TAG, "BAI Cache load Success" + list.size() + list.get(0).getTitle());
for (NativeResponse nativeAd : list) {
mCacheList.add(new NativeAdForBAI(nativeAd));
}
}
@Override
public void onNativeFail(NativeErrorCode nativeErrorCode) {
isRefreshing = false;
isError = true;
LogHelper.d(TAG, "BAI Cache load Error: code = " + nativeErrorCode + ", msg = " + nativeErrorCode.name());
}
}
package com.ym.library.config;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import com.ym.library.listener.ADListener;
import java.util.List;
public interface NativeDataAD {
/**
* 广告logo
*
* @return
*/
Bitmap getAdLogo();
/**
* 标题
*
* @return
*/
String getAdTitle();
/**
* 描述
*
* @return
*/
String getAdDesc();
/**
* 点击button响应文案
*
* @return
*/
String getAdCallToAction();
/**
* 广告来源
*
* @return
*/
String getSource();
/**
* 广告Icon URL
*
* @return
*/
String getAdIconUrl();
/**
* 广告大图/多图 图片URL
*
* @return
*/
List<String> getImageList();
/**
* APP Icon Url,非下载或为空
*
* @return
*/
String getAppIconUrl();
/**
* APP 商店评分
*
* @return
*/
float getAppScore();
/**
* APP评论数
*
* @return
*/
int getAppCommentNum();
/**
* APP 文件大小(下载类)
*
* @return
*/
int getAppSize();
/**
* 视频广告封面图
*
* @return
*/
String getAdVideoCoverImage();
void registerViewForInteraction(ViewGroup container, List<View> clickViews, ADListener.InteractionListener listener);
void registerViewForInteraction(ViewGroup container, View view, List<View> clickViews, ADListener.InteractionListener listener);
}
package com.ym.library.config
//优先级,重试机制
interface ZXADCallback {
fun onAdSuccess()
fun onAdFail()
}
\ No newline at end of file
package com.ym.library.config
import com.bytedance.sdk.openadsdk.TTAdConstant
object ZXADConfig {
var IS_DEUG = true
//广点通 appId
var GDT_AD_APP_ID = ""
//穿山甲 appId
var TT_AD_APP_ID = ""
//SIGNMOB appId
var SIGNMOB_APP_ID = ""
var SIGNMOB_APP_KEY = ""
//baidu appId
var BAIDU_APP_ID = ""
//优量包 appId
var YLB_APP_ID = ""
//快手 appId
var KS_APP_ID = ""
//瑞狮 appId
var RS_APP_ID = ""
//是否使用 TextureView
var useTextureView = false
//titlebar
var titleBarTheme = TTAdConstant.TITLE_BAR_THEME_DARK
//允许通知
var allowShowNotify = true
//允许锁屏状态下显示落地页
var allowShowPageWhenScreenLock = true
//是否支持多进程
var supportMultiProcess = false//默认false
//应用名字
var appName = "test"//默认false
var zxadConfig: ZXADConfig = ZXADConfig
fun getInstances(): ZXADConfig {
if(zxadConfig ==null){
zxadConfig = ZXADConfig
}
return zxadConfig
}
fun Build(): ZXADConfig {
return getInstances()
}
fun isDebug(s: Boolean): ZXADConfig {
IS_DEUG = s
return zxadConfig
}
fun gdtId(gdtId: String): ZXADConfig {
GDT_AD_APP_ID = gdtId
return zxadConfig
}
fun csjId(csjId: String): ZXADConfig {
TT_AD_APP_ID = csjId
return zxadConfig
}
fun bdId(bdId: String): ZXADConfig {
BAIDU_APP_ID = bdId
return zxadConfig
}
fun signMob(appid:String,appkey :String): ZXADConfig {
SIGNMOB_APP_ID = appid
SIGNMOB_APP_KEY = appkey
return zxadConfig
}
fun ylbId(appid:String): ZXADConfig {
YLB_APP_ID = appid
return zxadConfig
}
fun ksId(appid:String): ZXADConfig {
KS_APP_ID = appid
return zxadConfig
}
fun rsId(appid:String): ZXADConfig {
RS_APP_ID = appid
return zxadConfig
}
fun useTextureView(useTextureView: Boolean): ZXADConfig {
ZXADConfig.useTextureView = useTextureView
return zxadConfig
}
fun titleBarTheme(titleBarTheme: Int): ZXADConfig {
ZXADConfig.titleBarTheme = titleBarTheme
return zxadConfig
}
fun allowShowNotify(allowShowNotify: Boolean): ZXADConfig {
ZXADConfig.allowShowNotify = allowShowNotify
return zxadConfig
}
fun allowShowPageWhenScreenLock(allowShowPageWhenScreenLock: Boolean): ZXADConfig {
ZXADConfig.allowShowPageWhenScreenLock = allowShowPageWhenScreenLock
return zxadConfig
}
fun supportMultiProcess(supportMultiProcess: Boolean): ZXADConfig {
ZXADConfig.supportMultiProcess = supportMultiProcess
return zxadConfig
}
fun appName(appName: String): ZXADConfig {
ZXADConfig.appName = appName
return zxadConfig
}
}
\ No newline at end of file
package com.ym.library.config;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import com.bytedance.sdk.openadsdk.TTNativeAd;
import com.qq.e.ads.nativ.NativeUnifiedADData;
import com.qq.e.ads.nativ.widget.NativeAdContainer;
import com.ym.library.listener.ADListener;
import com.ym.library.module.NewsEntity;
import com.ym.library.utils.EventUtils;
import com.ym.library.utils.LogHelper;
import java.util.List;
public class ZXADNative implements NativeDataAD {
private static final String TAG = ZXADNative.class.getSimpleName();
private NativeADWrapper mNativeAd;
private Context mContext;
private NewsEntity newsEntity;
private ZXADRequestController adRequestController;
private ADListener.NativeNetListener mLoadListener;
private boolean isAdShow = false;
// public ZXNativeAd(Context context, int sid) {
// this(context, sid, 1);
// }
public ZXADNative(Context context, NewsEntity newsEntity, ZXAdSlot zxAdSlot) {
mContext = context;
this.newsEntity = newsEntity;
adRequestController = ZXPullRequestInstance.getInstance(context).getAdController(newsEntity, zxAdSlot);
}
public NativeADWrapper getCacheAD() {
return adRequestController.getAd();
}
public void loadAd(ADListener.NativeNetListener nativeListener) {
mLoadListener = nativeListener;
adRequestController.setLoadListener(EMPTY_LISTENER);
adRequestController.loadAd();
}
@Override
public Bitmap getAdLogo() {
if (null != mNativeAd) {
return mNativeAd.getSDKLogo();
}
return null;
}
@Override
public String getAdTitle() {
if (null != mNativeAd) {
return mNativeAd.getAdTitle();
}
return null;
}
@Override
public String getAdDesc() {
if (null != mNativeAd) {
mNativeAd.getAdContent();
}
return null;
}
@Override
public String getAdCallToAction() {
if (null != mNativeAd) {
mNativeAd.getAdCallToAction();
}
return null;
}
@Override
public float getAppScore() {
if (null != mNativeAd) {
mNativeAd.getAdStarRating();
}
return 4;
}
@Override
public int getAppCommentNum() {
if (null != mNativeAd) {
// TODO
}
return 0;
}
@Override
public int getAppSize() {
if (null != mNativeAd) {
// TODO
}
return 0;
}
@Override
public String getAdVideoCoverImage() {
if (null != mNativeAd) {
// TODO
}
return null;
}
@Override
public void registerViewForInteraction(ViewGroup container, List<View> clickViews, final ADListener.InteractionListener listener) {
LogHelper.d(TAG, "-----register view -----:" + mNativeAd.getAdTitle());
if (null != mNativeAd) {
int channelType = mNativeAd.getAdChannelType();
Object dataObj = mNativeAd.getOrgAdData();
// 处理csj的点击注册
if (ZXADType.AD_TYPE_CSJ == channelType) {
if (dataObj instanceof TTNativeAd) {
LogHelper.e(TAG, "-------Register Native Ad is CSJ");
((TTNativeAd) dataObj).registerViewForInteraction(container, clickViews, clickViews, new TTNativeAd.AdInteractionListener() {
@Override
public void onAdClicked(View view, TTNativeAd ttNativeAd) {
if (null != listener && null != view) {
listener.onAdClick(ZXADNative.this);
if (newsEntity != null && newsEntity.getClk_tracking().size() > 0) {
EventUtils.INSTANCE.apiClient(newsEntity.getClk_tracking().get(0));
}
}
}
@Override
public void onAdCreativeClick(View view, TTNativeAd ttNativeAd) {
}
@Override
public void onAdShow(TTNativeAd ttNativeAd) {
if (null != listener) {
listener.onAdExposed(ZXADNative.this);
}
if (newsEntity != null && newsEntity.getImp_tracking().size() > 0) {
EventUtils.INSTANCE.apiClient(newsEntity.getImp_tracking().get(0));
}
}
});
}
// else if (dataObj instanceof KsNativeAd) {
// LogHelper.e(TAG, "-------Register Native Ad is KUS");
// ((KsNativeAd) dataObj).registerViewForInteraction(container, clickViews, new KsNativeAd.AdInteractionListener() {
// @Override
// public void onAdClicked(View view, KsNativeAd ksNativeAd) {
// if (null != listener && null != view) {
// listener.onAdClick(ZXNativeAd.this);
// }
// }
//
// @Override
// public void onAdShow(KsNativeAd ksNativeAd) {
// if (null != listener) {
// listener.onAdExposed(ZXNativeAd.this);
// }
// }
// });
// }
else if (dataObj instanceof NativeUnifiedADData) {
LogHelper.e(TAG, "-------Register Native Ad is GDT");
NativeAdContainer containeraa = new NativeAdContainer(mContext);
container.addView(container);
((NativeUnifiedADData) dataObj).bindAdToView(mContext, containeraa, null, clickViews);
}
}
} else {
LogHelper.e(TAG, "Native Ad is Null");
}
}
@Override
public void registerViewForInteraction(ViewGroup container, View view, List<View> clickViews, ADListener.InteractionListener listener) {
}
@Override
public String getSource() {
return mNativeAd.getAdSource();
}
@Override
public String getAdIconUrl() {
return mNativeAd.getAdIconUrl();
}
@Override
public List<String> getImageList() {
return mNativeAd.getAdImageUrl();
}
@Override
public String getAppIconUrl() {
return mNativeAd.getAdIconUrl();
}
private ADListener.NativeLoadListener EMPTY_LISTENER = new ADListener.NativeLoadListener() {
@Override
public void onAdLoaded(NativeADWrapper nativeAd) {
if (null != nativeAd) {
mNativeAd = nativeAd;
if (null != mLoadListener) {
mLoadListener.onAdLoaded(ZXADNative.this);
}
}
}
@Override
public void onAdFailed(AdError error) {
if (null != mLoadListener) {
mLoadListener.onAdFailed(error);
}
}
};
}
package com.ym.library.config;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.Process;
import com.ym.library.csj.NativeCSJCache;
import com.ym.library.gdt.NativeGDTCache;
import com.ym.library.listener.ADListener;
import com.ym.library.module.NewsEntity;
import com.ym.library.utils.LogHelper;
import com.ym.library.utils.ThreadUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
public class ZXADRequestController implements Handler.Callback {
private static final String TAG = ZXADRequestController.class.getSimpleName();
private Context mContext;
private ZXAdSlot zxAdSlot;
private NewsEntity newsEntity;
// 广告位下的多渠道配置对象
// private PriorityPolicy mConfig;
// 渠道名列表
private List<String> mChannelNames = Collections.synchronizedList(new ArrayList<String>());
// 错误的渠道
private List<String> mErrorNames = Collections.synchronizedList(new ArrayList<String>());
// 渠道缓存队列
private ConcurrentHashMap<String, BaseChannel> mChannelCaches = new ConcurrentHashMap<>();
private long mTotalTime = 3000;
private Handler mHandler;
// 标记是否在load过程中
private boolean isLoading = false;
// 是否被意外取消(主要是destroy后无法通知异步)
private volatile boolean isCancel;
private static final int MSG_START_SCAN = 100;
private static final int MSG_TIME_OUT = 101;
private ADListener.NativeLoadListener mListener;
public ZXADRequestController(Context context, NewsEntity newsEntity, ZXAdSlot zxAdSlot) {
mContext = context;
this.zxAdSlot = zxAdSlot;
switch (newsEntity.getPlatformId()) {
case 1:
mChannelCaches.put(String.valueOf(newsEntity.getPlatformId()), new NativeCSJCache(context, 0, 1, 0, zxAdSlot));
mChannelNames.add(String.valueOf(newsEntity.getPlatformId()));
break;
case 2:
mChannelCaches.put(String.valueOf(newsEntity.getPlatformId()), new NativeGDTCache(context, 0, 1, 0, zxAdSlot));
mChannelNames.add(String.valueOf(newsEntity.getPlatformId()));
break;
}
this.newsEntity = newsEntity;
HandlerThread thread = new HandlerThread("adRequest", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mHandler = new Handler(thread.getLooper(), this);
}
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_START_SCAN:
mHandler.removeMessages(MSG_START_SCAN);
LogHelper.d(TAG, "handle MSG SCAN ~");
scanResult();
break;
case MSG_TIME_OUT:
mHandler.removeMessages(MSG_TIME_OUT);
LogHelper.d(TAG, "handle MSG TIME OUT ~");
break;
default:
break;
}
return false;
}
/**
* 同步的方式获取一个广告
*
* @return
*/
public NativeADWrapper getAd() {
NativeADWrapper adWrapper = null;
synchronized (newsEntity) {
for (String channel : mChannelNames) {
BaseChannel cache = mChannelCaches.get(channel);
if (null != cache && cache.getCacheSize() > 0) {
adWrapper = cache.doGetAD();
break;
} else {
continue;
}
}
}
return adWrapper;
}
/**
* 动态传入loadListener
*
* @param listener
*/
public void setLoadListener(ADListener.NativeLoadListener listener) {
mListener = listener;
}
/**
* 异步的方式获取一个广告
*/
public void loadAd() {
if (isLoading) {
LogHelper.d(TAG, "already do load ");
return;
}
mHandler.sendEmptyMessage(MSG_START_SCAN);
isCancel = false;
scanResult();
}
private void scanResult() {
LogHelper.d(TAG, "scanResult start ----");
long startTime = System.currentTimeMillis();
boolean isReturn = false;
long time_interval;
while (!isReturn) {
isLoading = true;
Iterator<String> iterator = mChannelNames.iterator();
while (iterator.hasNext()) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
String name = iterator.next();
if (isCancel) {
ThreadUtils.runOnUIT(new Runnable() {
@Override
public void run() {
mListener.onAdFailed(AdError.NO_FILL);
}
});
isReturn = true;
LogHelper.d(TAG, "Current Action Has Been Canceled :" + name);
break;
}
time_interval = System.currentTimeMillis() - startTime;
if (time_interval > mTotalTime) {
LogHelper.d(TAG, "超时了,退出");
ThreadUtils.runOnUIT(new Runnable() {
@Override
public void run() {
mListener.onAdFailed(AdError.TIME_OUT_ERROR);
}
});
isReturn = true;
break;
}
if (mErrorNames.contains(name)) {
LogHelper.d(TAG, "当前渠道已错误,跳过 :" + name);
continue;
}
if (null == mChannelCaches.get(name)) {
LogHelper.d(TAG, "没有渠道 :" + name + ", 跳过");
continue;
}
BaseChannel channel = mChannelCaches.get(name);
if (!channel.isError) {
LogHelper.d(TAG, "channel 正常,尝试取ad :" + name);
if (canReturn(name, time_interval)) {
if (channel.getCacheSize() > 0) {
final NativeADWrapper ad = channel.doGetAD();
LogHelper.d(TAG, "渠道" + channel + "返回了," + ad.getAdTitle());
ThreadUtils.runOnUIT(new Runnable() {
@Override
public void run() {
mListener.onAdLoaded(ad);
}
});
isReturn = true;
break;
} else {
if (!channel.isRefreshing) {
channel.doLoadAd();
LogHelper.d(TAG, "当前渠道需要刷新 :" + name);
}
}
}
} else {
LogHelper.d(TAG, "channel Error,加入错误列表 :" + name);
// resetChannelWT(name);
if (!mErrorNames.contains(name)) {
mErrorNames.add(name);
}
if (mErrorNames.size() == mChannelNames.size()) {
LogHelper.d(TAG, "所有渠道都错误了 ! NO_FILL");
ThreadUtils.runOnUIT(new Runnable() {
@Override
public void run() {
mListener.onAdFailed(AdError.NO_FILL);
}
});
isReturn = true;
break;
}
}
}
}
isLoading = false;
LogHelper.d(TAG, "scanResult End ----");
}
private boolean canReturn(String name, long currT) {
boolean can = false;
BaseChannel channel = mChannelCaches.get(name);
if (null == channel) {
can = false;
}
long startTime = channel.mStartTime;
if (startTime <= currT && currT <= mTotalTime) {
can = true;
}
LogHelper.d(TAG, "canReturn 渠道 :" + name + ", startT :" + startTime + ", 总时长 :" + mTotalTime + ", 当前时间:" + currT + ", returnResult :" + can);
return can;
}
/**
* 内部监听,主要用来监听各个渠道缓存的状态
*/
private InnerCallBack.AdLoadCallback mLoadCallBack = new InnerCallBack.AdLoadCallback() {
@Override
public void onAdLoaded(BaseChannel whichChannel) {
if (mChannelCaches.contains(whichChannel)) {
mChannelCaches.get(whichChannel).isRefreshing = false;
mChannelCaches.get(whichChannel).isError = false;
}
}
@Override
public void onAdError(BaseChannel whichChannel, AdError error) {
if (mChannelCaches.contains(whichChannel)) {
mChannelCaches.get(whichChannel).isRefreshing = false;
mChannelCaches.get(whichChannel).isError = true;
}
}
};
private ADListener.NativeLoadListener EMPTY_CALLBACK = new ADListener.NativeLoadListener() {
@Override
public void onAdLoaded(NativeADWrapper nativeAd) {
LogHelper.e(TAG, "EMPTY CALLBACK ~ onAdLoaded");
}
@Override
public void onAdFailed(AdError error) {
LogHelper.e(TAG, "EMPTY CALLBACK ~ onAdFailed");
}
};
}
package com.ym.library.config
object ZXADType {
// start=====================================================================
// 1. 穿山甲 2.广点通 3. 快手 4. 搜狗 5.科大讯飞
/**
* 新
* 1001 chuanshanjia 穿山甲 1
1002 kuaishou 快手 1
1003 guangdiantong 广点通 1
1004 youliangbao 优量宝 1
*/
const val PLANTFORM_AD_TT = "chuanshanjia" //穿山甲
const val PLANTFORM_AD_GDT = "guangdiantong" //广点通
const val PLANTFORM_AD_KUS = "kuaishou" //快手
const val PLANTFORM_SH_YLB = "youliangbao"//优量宝
const val PLANTFORM_AD_SIGNMOB = "sigmob" //sign Mob
const val PLANTFORM_AD_BD = "baidu" //百度
const val PLANTFORM_AD_SH = "shanhu"//珊瑚
const val PLANTFORM_AD_RS = "ruishi"//瑞狮
const val PLANTFORM_AD_SG = 4 //搜狗
const val PLANTFORM_AD_KDXF = 5 //科大讯飞
// =====================================================================stop
// 广告内容模式
// 大图
const val AD_MODE_BIGIMAGE = 1
// 小图
const val AD_MODE_SMALLIMG = 2
// 多图
const val AD_MODE_MOREIMG = 3
// 图文
const val AD_MODE_WORDSIMG = 4
// 视频
const val AD_MODE_VIDEO = 5
// 渠道类型
const val AD_TYPE_CSJ = 11
const val AD_TYPE_GDT = 12
const val AD_TYPE_BAI = 13
const val AD_TYPE_SEL = 14
const val AD_TYPE_KUS = 15
// 渠道名定义
const val AD_CHANNEL_CSJ = "csj"
const val AD_CHANNEL_GDT = "gdt"
const val AD_CHANNEL_BAI = "bai"
const val AD_CHANNEL_SEL = "sel"
const val AD_CHANNEL_KUS = "kus"
// 渠道ADID
const val AD_ID_CSJ = "1101"
const val AD_ID_GDT = "1102"
const val AD_ID_BAI = "1103"
const val AD_ID_SEL = "1104"
const val AD_ID_KUS = "1105"
}
\ No newline at end of file
package com.ym.library.config;
public class ZXAdSlot {
public String codeID;
public boolean isSupportDeeplink;
// public boolean isAutoPlay;
// public long imgSize;
// public int slotType;
// public int adSize;
public int count;
public ZXADSizeConfig sizeConfig;
}
package com.ym.library.config;
import android.content.Context;
import android.util.SparseArray;
import com.ym.library.module.NewsEntity;
public class ZXPullRequestInstance {
private static ZXPullRequestInstance sInstance;
private Context mContext;
private SparseArray<ZXADRequestController> mControllerMap = new SparseArray<>();
public static ZXPullRequestInstance getInstance(Context context) {
if (null == sInstance) {
synchronized (ZXPullRequestInstance.class) {
if (null == sInstance) {
sInstance = new ZXPullRequestInstance(context);
}
}
}
return sInstance;
}
public ZXADRequestController getAdController(NewsEntity newsEntity, ZXAdSlot zxAdSlot) {
if (null != mControllerMap.get(newsEntity.getPlatformId())) {
return mControllerMap.get(newsEntity.getPlatformId());
}
ZXADRequestController controller = new ZXADRequestController(mContext, newsEntity,zxAdSlot);
mControllerMap.put(newsEntity.getPlatformId(), controller);
return controller;
}
private ZXPullRequestInstance(Context context) {
mContext = context;
}
}
package com.ym.library.csj;
import android.graphics.Bitmap;
import com.bytedance.sdk.openadsdk.TTImage;
import com.bytedance.sdk.openadsdk.TTNativeAd;
import com.ym.library.config.NativeADWrapper;
import com.ym.library.config.ZXADConfig;
import com.ym.library.config.ZXADType;
import java.util.ArrayList;
import java.util.List;
public class NativeAdForCSJ implements NativeADWrapper {
TTNativeAd mTTNative;
private long mStartTime;
private long VALID_TIME = 30 * 60 * 1000;// 有效时间30Min
NativeAdForCSJ(TTNativeAd ttNativeAd) {
mTTNative = ttNativeAd;
mStartTime = System.currentTimeMillis();
}
@Override
public String getAdId() {
return ZXADType.AD_ID_CSJ;
}
@Override
public List<String> getAdImageUrl() {
return convertImage(mTTNative.getImageList());
}
@Override
public String getAdIconUrl() {
return convertImage(mTTNative.getIcon());
}
@Override
public String getAdContent() {
return mTTNative.getDescription();
}
@Override
public String getAdCallToAction() {
// 没有对应返回
return null;
}
@Override
public String getAdTitle() {
return mTTNative.getTitle();
}
@Override
public float getAdStarRating() {
return mTTNative.getAppScore();
}
@Override
public String getAdSource() {
return mTTNative.getSource();
}
@Override
public boolean isValid() {
return (System.currentTimeMillis() - mStartTime) < VALID_TIME;
}
@Override
public int getAdMaterialType() {
return convertMode(mTTNative.getImageMode());
}
@Override
public int getAdActionType() {
return mTTNative.getInteractionType();
}
@Override
public Bitmap getSDKLogo() {
return mTTNative.getAdLogo();
}
@Override
public void destroy() {
mTTNative = null;
}
@Override
public int getAdChannelType() {
return ZXADType.AD_TYPE_CSJ;
}
@Override
public String getAdChannelName() {
return ZXADType.AD_CHANNEL_CSJ;
}
@Override
public Object getOrgAdData() {
return mTTNative;
}
/**
* Image<>imageUrl的转化
*
* @param image
* @return
*/
String convertImage(TTImage image) {
if (null != image) {
return image.getImageUrl();
}
return "";
}
List<String> convertImage(List<TTImage> ttImageList) {
List<String> images = new ArrayList<>();
if (null != ttImageList) {
for (TTImage img : ttImageList) {
images.add(convertImage(img));
}
}
return images;
}
/**
* 广告内容模式转化
*
* @param mode
* @return
*/
int convertMode(int mode) {
int type = -1;
if (2 == mode) {
type = ZXADType.AD_MODE_BIGIMAGE;
}
switch (mode) {
case 3:
type = ZXADType.AD_MODE_BIGIMAGE;
break;
case 2:
type = ZXADType.AD_MODE_SMALLIMG;
break;
case 4:
type = ZXADType.AD_MODE_MOREIMG;
break;
case 5:
type = ZXADType.AD_MODE_VIDEO;
break;
default:
break;
}
return type;
}
}
package com.ym.library.csj;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTNativeAd;
import com.ym.library.config.BaseChannel;
import com.ym.library.config.NativeADWrapper;
import com.ym.library.config.ZXAdSlot;
import com.ym.library.utils.LogHelper;
import java.util.List;
public class NativeCSJCache extends BaseChannel implements TTAdNative.NativeAdListener, Handler.Callback {
private String TAG = NativeAdForCSJ.class.getSimpleName();
private TTAdNative mTTAdNative;
private ZXAdSlot zxAdSlot;
public NativeCSJCache(Context context, int sid, int cacheSize, long wt, ZXAdSlot zxAdSlot) {
super(context, sid, cacheSize, wt);
// mSlot = slot; // TODO read adSlot
HandlerThread thread = new HandlerThread("T-csj");
thread.start();
mPullHandler = new Handler(thread.getLooper(), this);
this.zxAdSlot =zxAdSlot;
// TTAdConfig config = new TTAdConfig.Builder()
// .appId("5035966")
// .appName("com.ym.step")
// .debug(true)
// .build();
// TTAdSdk.init(context, config);
// TTAdSdk.init(mContext, new TTAdConfig.Builder()
// // .appId("5001121")
// .appId("5035966").useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
// .appName("com.ym.step").titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK).allowShowNotify(true) //是否允许sdk展示通知栏提示
// .allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
// .debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
// .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
// .supportMultiProcess(true)//是否支持多进程
// // .needClearTaskReset()
// //.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。
// .build());
doInit(mContext);
}
@Override
public NativeADWrapper doGetAD() {
return super.doGetAD();
}
@Override
public void doInit(Context context) {
mTTAdNative = TTAdSdk.getAdManager().createAdNative(mContext);
}
@Override
public void doLoadAd() {
if (!isRefreshing) {
if (getCacheSize() < mCacheSize) {
isRefreshing = true;
LogHelper.d(TAG, "CSJCache do refreshing");
AdSlot slot = new AdSlot.Builder()
.setCodeId(zxAdSlot.codeID)
.setSupportDeepLink(true)
.setNativeAdType(AdSlot.TYPE_FEED) //请求原生广告时候,请务必调用该方法,设置参数为TYPE_BANNER或TYPE_INTERACTION_AD
// .setExpressViewAcceptedSize(1024,680)
.setImageAcceptedSize(zxAdSlot.sizeConfig.getWidth(), zxAdSlot.sizeConfig.getHeight())
.setAdCount(zxAdSlot.count)
.build();
mTTAdNative.loadNativeAd(slot, this);
LogHelper.d(TAG, "CSJ cache start refreshing");
} else {
LogHelper.d(TAG, "no need refresh ! getValidCount :" + getCacheSize());
}
} else {
LogHelper.d(TAG, "CSJ cache Already refreshing");
}
}
@Override
public int getCacheSize() {
int count = 0;
for (NativeADWrapper c : mCacheList) {
if (c.isValid()) {
count++;
} else {
mCacheList.remove(c);
}
}
LogHelper.d(TAG, "getCacheSize :" + count);
return count;
}
@Override
public void doClear() {
LogHelper.d(TAG, "Do Clear ~");
mCacheList.clear();
}
@Override
public void doDestroy() {
LogHelper.d(TAG, "Do Destroy ~");
mContext = null;
mCacheList = null;
}
@Override
public void onError(int i, String s) {
LogHelper.d(TAG, "load error :" + i + ", msg: " + s);
isRefreshing = false;
isError = true;
}
@Override
public void onNativeAdLoad(List<TTNativeAd> list) {
LogHelper.d(TAG, "load success ~ Total Count :" + list.size());
isRefreshing = false;
isError = false;
if (null != list) {
for (TTNativeAd t : list) {
LogHelper.d(TAG, "Ad Loaded : " + t.getTitle());
mCacheList.add(new NativeAdForCSJ(t));
if (mCacheList.size() == mCacheSize) {
break;
}
}
}
}
@Override
public boolean handleMessage(Message msg) {
return false;
}
}
This diff is collapsed.
...@@ -8,13 +8,12 @@ import android.os.Build ...@@ -8,13 +8,12 @@ import android.os.Build
import android.os.Environment import android.os.Environment
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import com.google.gson.annotations.Until
import com.ym.library.AppliContext import com.ym.library.AppliContext
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.module.VersionEntity import com.ym.library.module.VersionEntity
import com.ym.library.net.BaseObserver import com.ym.library.net.BaseObserver
import com.ym.library.net.RxSchedulers import com.ym.library.net.RxSchedulers
import com.ym.library.utils.PhoneUtils import com.ym.modulecommon.utils.PhoneUtils
import com.ym.library.utils.SettingPreference import com.ym.library.utils.SettingPreference
import com.ym.library.utils.Utils import com.ym.library.utils.Utils
import com.ym.library.widget.LoadingDialog import com.ym.library.widget.LoadingDialog
......
...@@ -2,10 +2,9 @@ package com.ym.library.down ...@@ -2,10 +2,9 @@ package com.ym.library.down
import com.ym.library.Constant import com.ym.library.Constant
import com.ym.library.net.IUserApi import com.ym.library.net.IUserApi
import com.ym.library.net.NetConfig
import com.ym.library.utils.LogUtils import com.ym.library.utils.LogUtils
import com.ym.library.utils.PhoneUtils import com.ym.modulecommon.net.NetConfig
import com.ym.library.utils.SettingPreference import com.ym.modulecommon.utils.PhoneUtils
import okhttp3.Interceptor import okhttp3.Interceptor
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
...@@ -40,9 +39,9 @@ object VersionClient { ...@@ -40,9 +39,9 @@ object VersionClient {
// builder.addHeader("User-Agent", SettingPreference.getUserAgent()) // builder.addHeader("User-Agent", SettingPreference.getUserAgent())
// } // }
// if (request.url().host().toString().contains("zhangxinhulian.com")) { // if (request.url().host().toString().contains("zhangxinhulian.com")) {
builder.addHeader(Constant.aid, SettingPreference.getAndroidId()) builder.addHeader(Constant.aid, com.ym.modulecommon.utils.SettingPreference.getAndroidId())
LogUtils.e(SettingPreference.getAndroidId()) LogUtils.e(com.ym.modulecommon.utils.SettingPreference.getAndroidId())
// } // }
chain.proceed(builder.build()) chain.proceed(builder.build())
} }
......
This diff is collapsed.
package com.ym.library.gdt;
import android.content.Context;
import com.qq.e.ads.nativ.NativeADUnifiedListener;
import com.qq.e.ads.nativ.NativeUnifiedAD;
import com.qq.e.ads.nativ.NativeUnifiedADData;
import com.qq.e.comm.util.AdError;
import com.ym.library.config.BaseChannel;
import com.ym.library.config.NativeADWrapper;
import com.ym.library.config.ZXAdSlot;
import com.ym.library.utils.LogHelper;
import java.util.List;
public class NativeGDTCache extends BaseChannel implements NativeADUnifiedListener {
private static final String TAG = NativeGDTCache.class.getSimpleName();
private NativeUnifiedADData mAdData;
private NativeUnifiedAD mAdManager;
// private String appId = "1110064402";
// private String posId = "7051204269378351";
public NativeGDTCache(Context context, int sid, int cacheSize, long wt, ZXAdSlot zxAdSlot) {
super(context, sid, cacheSize, wt);
// mAdManager = new NativeUnifiedAD(context, appId, posId, this);
mAdManager = new NativeUnifiedAD(context, zxAdSlot.codeID, this);
}
@Override
public NativeADWrapper doGetAD() {
return super.doGetAD();
}
@Override
public void doInit(Context context) {
}
@Override
public void doLoadAd() {
if (!isRefreshing) {
if (getCacheSize() < mCacheSize) {
isRefreshing = true;
mAdManager.loadData(mCacheSize);
LogHelper.d(TAG, "GDT start refreshing");
} else {
LogHelper.d(TAG, "GDT no need refresh ! getValidCount :" + getCacheSize());
}
} else {
LogHelper.d(TAG, "GDT cache Already refreshing");
}
}
@Override
public int getCacheSize() {
int valid = 0;
for (NativeADWrapper ad : mCacheList) {
if (ad.isValid()) {
valid++;
}
}
LogHelper.d(TAG, "GDT getCacheSize :" + valid);
return valid;
}
@Override
public void doClear() {
synchronized (mCacheList) {
mCacheList.clear();
}
}
@Override
public void doDestroy() {
}
@Override
public void onADLoaded(List<NativeUnifiedADData> list) {
LogHelper.d(TAG, "GDT Cache load Success" + list.size() + list.get(0).getTitle());
isRefreshing = false;
isError = false;
for (NativeUnifiedADData ad : list) {
mCacheList.add(new NativeAdForGDT(ad));
}
}
@Override
public void onNoAD(AdError adError) {
isRefreshing = false;
isError = true;
LogHelper.d(TAG, "GDT Cache load Error: code = " + adError.getErrorCode() + ", msg = " + adError.getErrorMsg());
}
}
This diff is collapsed.
package com.ym.library.net package com.ym.library.net
import com.ym.library.module.* import com.ym.library.module.*
import com.ym.modulecommon.module.UserInfoEntity
import io.reactivex.Observable import io.reactivex.Observable
import okhttp3.ResponseBody import okhttp3.ResponseBody
import retrofit2.http.* import retrofit2.http.*
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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