美文网首页
inveno-library使用示例

inveno-library使用示例

作者: ChasenZhang | 来源:发表于2021-09-06 16:16 被阅读0次

代码实例语言: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()

相关文章

网友评论

      本文标题:inveno-library使用示例

      本文链接:https://www.haomeiwen.com/subject/ytnewltx.html