代码实例语言:kotlin
添加私服仓库访问账号
在项目根目录的build.gradle文件添加以下节点,其中username、password单独给出。
allprojects {
repositories {
//省略其他...
maven {
url 'https://maven.aliyun.com/repository/public'
}
maven {
credentials {
username 'xxxxx'
password 'xxxxx'
}
url 'https://packages.aliyun.com/maven/repository/2133730-release-As2rFV/'
}
maven {
credentials {
username 'xxxxx'
password 'xxxxx'
}
url 'https://packages.aliyun.com/maven/repository/2133730-snapshot-6euW51/'
}
}
}
1、使用topon依赖
1)在项目中使用到topon的mudule或app的builde.gradle文件里添加依赖
implementation 'com.inveno.library:TopOn:1.0.2-SNAPSHOT'
//implementation 'com.google.code.gson:gson:2.8.6' 若工程已有依赖gson,则不用添加
2)在app的builde.grable文件下添加配置
android {
defaultConfig {
//省略其他...
ndk {
// 添加项目所需CPU类型的最小集
abiFilters "armeabi-v7a" //, "armeabi","x86"
}
multiDexEnabled true
}
}
如果有用到androidX,则在根目录的gradle.properties文件里添加以下
android.useAndroidX=true
android.enableJetifier=true
3)混淆
#----- TopOn start -----
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.* {*;}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keep class com.qq.e.** {
public protected *;
}
-keep class android.support.v4.**{
public *;
}
-keep class android.support.v7.**{
public *;
}
-keep class MTT.ThirdAppInfoNew {
*;
}
-keep class com.tencent.** {
*;
}
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**
#----- TopOn end -----
4)在application类初始化
TopOnManager.init(this,"appid","appKey",isDebug)
5)使用
开屏广告
val container = ... //要显示开屏广告的容器,一般为Framelayout
val splashAdTopOnManage = SplashAdTopOnManage(this, "appId",container, object :SplashAdInterface {
override fun onAdShow() {}
override fun onAdOnClick() {}
override fun onAdSkip() {}
override fun onAdDismiss() {}
override fun onAdLoadFail(code: String, msg: String) {}
})
//加载广告
splashAdTopOnManage.loadSpalshAd()
激励广告
val adRewardTopOnManage = AdRewardTopOnManage(context, "adId", object : AdManageInterface {
override fun adShow() {}
override fun adClose() {}
override fun adClick() {}
override fun adReward(atAdInfo: ATAdInfo) {}
override fun adError(code: String, msg: String?) {}
})
//异步预加载激励视频
mRewardVideoAd.loadRewardAd()
//播放激励视频
if (mRewardVideoAd.isReady == true) {
adRewardTopOnManage.showAd()
}
全屏or插屏广告
val fullVideoTopOnManage = FullVideoTopOnManage(context,"adId",object : FullVideoManageInterface {
override fun onFullVideoAdShow() {}
override fun onFullVideoAdClick() {}
override fun onFullVideoAdClosed() {}
override fun onVideoComplete() {}
override fun onVideoError(code: String, msg: String?) {}
override fun onSkippedVideo() {}
})
//异步预加载全屏or插屏广告
fullVideoTopOnManage.loadFullVideo()
//播放全屏or插屏广告
if(fullVideoTopOnManage.isReady == true){
fullVideoTopOnManage.show()
}
信息流广告
val infoAdView: View? = null //banner广告
val container: View? = null //显示banner广告的容器
//如果之前有了预加载的信息流广告则直接显示
if (infoAdView != null && container != null) {
try {
container.removeAllViews()
container.addView(infoAdView)
} catch (e: Exception) {
e.printStackTrace()
}
infoAdView = null
}
//如果infoAdView不为空,则不用再次加载
if (infoAdView != null)
return
//adHeight=0为自适应高度
val feedAdTopOnManage = FeedAdTopOnManage(context,"adId",adWidth,adHeight,object:FeedAdInterface {
override fun onAdClick() {}
override fun onAdShow() {}
override fun onRenderFail(code: String, desc: String) {}
override fun onRenderSuccess(showView: View?, width: Float, height: Float) {
infoAdView = showView
try {
val parent = infoAdView?.parent
if (parent is ViewGroup) {
parent.removeView(infoAdView)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onAdShowFail(msg: String?) {}
})
//加载信息流广告
feedAdTopOnManage.loadFeedAd()
banner广告
val container: view = ... //显示banner广告的容器,一般为framelayout
val bannerTopOnManage = new BannerTopOnManage(activity, "adId", container, new BannerInterface() {
override fun onAdError(code: String, msg: String?) {}
override fun onAdOpened() {}
override fun onAdClosed() {}
override fun onAdClicked() {}
override fun onAdShow() {}
})
//加载banner广告
mBannerView.loadBannerAd()
2、使用快手or头条买量sdk
1)在对应app或者module添加依赖
implementation 'com.inveno.library:spread:1.0.0-SNAPSHOT'
2)在app的builde.grable文件下添加配置
android {
defaultConfig {
//省略其他...
manifestPlaceholders.put("APPLOG_SCHEME", "rangersapplog.byAx6uYt".toLowerCase())
}
}
3)使用
class TestActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
//初始化快手sdk
KuaiShouManager.init(applicationContext,"appId","appName",isDebug)
//快手激活
KuaiShouManager.onAppActive()
//快手统计次留
KuaiShouManager.onNextDayStay()
//初始化头条
TouTiaoManager.init(applicationContext,"toutiaoId","channelName")
}
override fun onPause() {
super.onPause()
//快手paus事件
KuaiShouManager.onPagePause()
}
override fun onResume() {
super.onResume()
//快手resume事件
KuaiShouManager.onPagePause()
}
}
3、使用 growmore依赖
1)在项目中使用到topon的mudule或app的builde.gradle文件里添加依赖
implementation 'com.inveno.library:GrowMore:1.0.0-SNAPSHOT'
2)在app的builde.grable文件下添加配置
android {
defaultConfig {
//省略其他...
ndk {
// 添加项目所需CPU类型的最小集
abiFilters "armeabi-v7a" //, "armeabi","x86"
}
packagingOptions {
doNotStrip "*/armeabi-v7a/*.so"
//doNotStrip "*/x86/*.so"
//doNotStrip "*/arm64-v8a/*.so"
//doNotStrip "*/x86_64/*.so"
//doNotStrip "armeabi.so"
}
multiDexEnabled true
}
}
3)混淆
#oaid混淆
#oaid 不同的版本混淆代码不太一致,你注意你接入的oaid版本
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
#oaid混淆end
#************************** gromore 广告 start ***************************
## pangle 穿山甲原有的
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}
## pangle 插件新增 穿山甲插件化版本新增
-keep public class com.ss.android.**{*;}
-keeppackagenames com.bytedance.sdk.openadsdk.api
-keeppackagenames com.bytedance.embed_dr
-keeppackagenames com.bytedance.embedapplog
-keeppackagenames com.ss.android
//聚合混淆
-keep class bykvm*.**
-keep class com.bytedance.msdk.adapter.**{ public *; }
-keep class com.bytedance.msdk.api.** {
public *;
}
-keep class com.bytedance.msdk.base.TTBaseAd{*;}
-keep class com.bytedance.msdk.adapter.TTAbsAdLoaderAdapter{
public *;
protected <fields>;
}
# baidu sdk 不接入baidu sdk可以不引入
-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
# Admob 不接入admob sdk可以不引入
-keep class com.google.android.gms.ads.MobileAds {
public *;
}
#sigmob 不接入sigmob sdk可以不引入
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep class sun.misc.Unsafe { *; }
-dontwarn com.sigmob.**
-keep class com.sigmob.**.**{*;}
#oaid 不同的版本混淆代码不太一致,你注意你接入的oaid版本 ,不接入oaid可以不添加
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
#klevin 游可赢
-keep class com.tencent.tgpa.**{*;}
-keep class com.tencent.klevin.**{*;}
#Mintegral 不接入Mintegral sdk,可以不引入
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mbridge.** {*; }
-keep interface com.mbridge.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mbridge.**
-keep class **.R$* { public static final int mbridge*; }
#************************** gromore 广告 end ***************************
4)使用
开屏广告
var container: ViewGroup? = ... //开屏广告容器,一般为framelayout
val splashAdManage = SplashAdManage(this,"appId","adId","adn",container,object : SplashAdInterface{
override fun onAdShow() {}
override fun onAdOnClick() {}
override fun onAdSkip() {}
override fun onAdDismiss() {}
override fun onAdLoadFail(code: Int, msg: String?) {}
})
//加载开屏广告
splashAdManage.loadSpalshAd()
banner广告
var container: ViewGroup? = ... //banner广告容器,一般为framelayout
var refreshTime = 30 //banner刷新频率
var adWidth = ... //banner广告期望宽度,一般为屏幕宽度
var adHeight = 0 //banner广告期望高度,一般为0
val bannerManage = BannerManage(this,"adId",refreshTime,container,adWidth,adHeight,object : BannerInterface{
override fun onAdError(code: Int, msg: String?) {}
override fun onAdOpened() {}
override fun onAdClosed() {}
override fun onAdClicked() {}
override fun onAdShow() {}
})
//加载banner广告
bannerManage.loadBannerAd()
激励视频广告
val rewardManage = AdRewardManage(this,"adId",object : AdManageInterface{
override fun adShow() {}
override fun adClose(ecpm: String) {
//预加载下一次视频广告
rewardManage?.loadRewardAd()
}
override fun adClick() {}
override fun adReward(mIsHaveReward: Boolean) {}
override fun adError(code: Int, msg: String?) {}
})
//异步加载激励视频广告
rewardManage.loadRewardAd()
//播放激励视频广告
if(rewardManage.isReady == true){
rewardManage.showAd()
}
4、使用友盟
1)添加依赖
implementation 'com.inveno.library:umeng:1.0.0-SNAPSHOT'
2)混淆
#-----------------umeng start----------------------------
-keep class com.umeng.** {*;}
#//您如果使用了稳定性模块可以加入该混淆
-keep class com.uc.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
#//SDK 9.2.4及以上版本自带oaid采集模块,不再需要开发者再手动引用oaid库,所以可以不添加这些混淆
-keep class com.zui.** {*;}
-keep class com.miui.** {*;}
-keep class com.heytap.** {*;}
-keep class a.** {*;}
-keep class com.vivo.** {*;}
#-----------------umeng end----------------------------
3)初始化
UMengMnager.init(applicationContext,"appKey","channel")
4)使用
//通过友盟获取oaid,因为是异步,所以初始化后不会立即有值
UMengMnager.getOAID()
//上报事件
val params = hashMapOf<String,Any>()
UMengMnager.onEvent(context,"eventId",params)
5、使用network框架
1)添加依赖
implementation 'com.inveno.library:netword-java:1.0.5-SNAPSHOT'
implementation 'com.inveno.library:oaid:1.0.0-SNAPSHOT' //如果需要自己实现oaid的获取,则不需要依赖,若依赖了,则需要在assets文件夹下放入supplierconfig.json文件和对应的证书文件
2)在app的builde.grable文件下添加配置
android {
defaultConfig {
//省略其他...
ndk {
// 添加项目所需CPU类型的最小集
abiFilters "armeabi-v7a" //, "armeabi","x86"
}
multiDexEnabled true
}
}
3)混淆
-dontwarn android.content.**
-keep class android.content.**{ *;}
-dontwarn com.inveno.network.**
-keep class com.inveno.network.**{ *;}
-dontwarn com.inveno.network.http.**
-keep class com.inveno.network.http.**{ *;}
-dontwarn com.inveno.network.resp.**
-keep class com.inveno.network.resp.**{ *;}
-dontwarn com.inveno.encrypt.**
-keep class com.inveno.encrypt.**{ *;}
-dontwarn java.lang.String
-keep class java.lang.String{ *;}
4)在applicaiton类里初始化
class APP :Application() {
override fun onCreate() {
super.onCreate()
val httpBuilder = InvenoHttp.Builder()
httpBuilder.connectTimeout = 3000
httpBuilder.readTimeout = 3000
httpBuilder.writeTimeout = 3000
httpBuilder.isDebug = true //连接的是否是测试环境
httpBuilder.logEnable = true //是否查看请求日志,过滤关键字OkHttp
httpBuilder.middle_ground = 0 //0: 没接入中台 1: 接入中台
httpBuilder.channel = "inveno" //渠道号
httpBuilder.inviteCode = "" //邀请码
httpBuilder.oaidCertFile = "" //oaid安全联盟发布的证书,放在assets文件夹下,不依赖oaid则无须添加
httpBuilder.encryptType = InvenoEncryptType.TYPE_ONE //加密方式
//如果没有添加oaid依赖,则需要自己实现oaid的获取逻辑,否则会闪退
//httpBuilder.oaidProxy = object : InvenoOaidProxy{
// override fun getOaid(): String {
// return "*****"
// }
//}
//如果想实现自定义的公共参数请求,则自己维护,一般不需要添加
//httpBuilder.publicParamGenerator = object : InvenoPublicParamsGenerator{
// override fun paramsMap(uid: String, time: String): HashMap<String, Any> {
// val params = hashMapOf<String,Any>()
// params["key"] = "value"
// return params
// }
//}
//初始化
InvenoHttp.build(this,httpBuilder)
}
}
5)使用
//无账号登录
InvenoHttpHelper.requestLogin() { it: InvenoUser? ->
if(it == null){
//请求出错
return@requestLogin
}
//获取user的jwt
val jwt = it.user.jwt
// val jwt = InvenoUserManager.user?.jwt
//使用登录接口后,InvenoUserManager会维护一个成员变量user
//InvenoUserManager内有以下几个方法
//InvenoUserManager.restoreUser() 从缓存中回复用户数据,
//InvenoUserManager.clearUser() 清除用户数据
//InvenoUserManager.saveUser() 刷新用户数据,改方法在登录接口已自动刷新,无须调用者再次调用
}
//上报视频
InvenoHttpHelper.requestSeeAd()
网友评论