网络请求-network
<h3>1、添加依赖</h3>
<pre><code>implementation 'com.inveno.library:network-java:1.6.5-SNAPSHOT'
//注意,新版本的框架将加密框架剥离了,所以需要单独引用
implementation 'com.inveno.library:encrypt:1.0.1-SNAPSHOT' //加密框架
//如果自己已实现oaid的获取,则不需要依赖,若依赖了,则需要在assets文件夹下放入supplierconfig.json文件和对应的证书文件
implementation 'com.inveno.library:oaid:1.0.1-SNAPSHOT'</code></pre>
<h3>2、在app的builde.grable文件下添加配置</h3>
<pre><code>android {
defaultConfig {
//省略其他...
ndk {
// 添加项目所需CPU类型的最小集
abiFilters "armeabi-v7a" //, "armeabi","x86"
}
multiDexEnabled true
}
}</code></pre>
<h3>3、混淆</h3>
<pre><code>#inveno请求参数加密start
-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{ *;}
#inveno请求参数加密end
#oaid混淆-----start
# sdk
-keep class com.bun.miitmdid.** { *; }
# asus
-keep class com.asus.msa.SupplementaryDID.** { *; }
-keep class com.asus.msa.sdid.** { *; }
# freeme
-keep class com.android.creator.** { *; }
-keep class com.android.msasdk.** { *; }
# huawei
-keep class com.huawei.hms.ads.identifier.** { *; }
#-keep class com.uodis.opendevice.aidl.** { *; }
# lenovo
-keep class com.zui.deviceidservice.** { *; }
-keep class com.zui.opendeviceidlibrary.** { *; }
# meizu
-keep class com.meizu.flyme.openidsdk.** { *; }
# nubia
-keep class com.bun.miitmdid.provider.nubia.NubiaIdentityImpl
# oppo
-keep class com.heytap.openid.** { *; }
# samsung
-keep class com.samsung.android.deviceidservice.** { *; }
# vivo
-keep class com.vivo.identifier.** { *; }
# xiaomi
-keep class com.bun.miitmdid.provider.xiaomi.IdentifierManager
# zte
-keep class com.bun.lib.** { *; }
# coolpad
-keep class com.coolpad.deviceidsupport.** { *; }
#oaid混淆-------------end</code></pre>
<h3>4、在applicaiton类里初始化</h3>
<pre><code>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.checkProxy = true //是否检测代理,默认为true
httpBuilder.middle_ground = 1 //0: 没接入中台 1: 接入中台
httpBuilder.channel = "inveno" //渠道号
httpBuilder.inviteCode = "" //邀请码
httpBuilder.oaidCertFile = "" //oaid安全联盟发布的证书,放在assets文件夹下,不依赖oaid则无须添加
httpBuilder.encryptType = InvenoEncryptType.TYPE_ONE //使用第几个tk密钥进行加密
//InvenoEncryptType.TYPE_ONE = "acy7lsgrrni6sj5ofn4i7khck6gih8a5"
//InvenoEncryptType.TYPE_TWO = "nkrholrfp97go57f3ukjpyjcou47h0yt"
//InvenoEncryptType.TYPE_THREE = "093a964e515d2732067cb247ae101494"
//如果没有添加oaid依赖,则需要自己实现oaid的获取逻辑,否则会闪退
//httpBuilder.oaidProxy = object : InvenoOaidProxy{
// override fun getOaid(): String {
// return "*****"
// }
//}
//如果添加了oaid依赖,则在异步获取到oaid时,会回调以下方法
//httpBuilder.oaidCallBack = object : InvenoOaidCallBack{
// override fun onOaid(oaid: String?) {
// //do something...
// }
//}
//初始化
InvenoHttp.build(this,httpBuilder)
}
}</code></pre>
<h3>5、使用</h3>
<blockquote>
<p>如需使用带加载弹窗的请求,
将InvenoHttpHelper替换成InvenoHttpHelperWithProgress即可</p>
</blockquote>
<pre><code>//上报事件(仅用作统计,须登录成功后调用)
InvenoHttpHelper.requestPostEvent("事件id","事件名称") //上报自定义事件
InvenoHttpHelper.requestPostActiveEvent() //上报激活事件
InvenoHttpHelper.requestPostKeyEvent() //上报关键事件
InvenoHttpHelper.requestPostOpenApp() //上报打开app事件
//通用post请求,get请求同理
val url = "/diamond/v1/user/login" //相对请求路径,须以“/”开头
//val url = "https://diamond.inveno.com/diamond/v1/user/login" //或者绝对路径
//无参请求,注意,泛型T需要传入接口正常响应的解析类,否则无法正常解析
InvenoHttpHelper.post(url,object: InvenoApiCallBack<T>() { //或者get请求:InvenoHttpHelper.get()
override fun onSuccess(t: T?) {}
override fun onApiFail(code: Int, desc: String?) {}
})
//有传参请求
val params = hashMapOf<String,Any>()
params["key1"] = "value1"
params["key2"] = "value2"
//注意,泛型T需要传入接口正常响应的解析类,否则无法正常解析
InvenoHttpHelper.post(url,params,object: InvenoApiCallBack<T>() {
override fun onSuccess(t: T?) {}
override fun onApiFail(code: Int, desc: String?) {}
})
//无账号登录
val userInfo = InvenoUserManager.restoreUser() //先从本地缓存恢复用户数据
//InvenoUserManager.clearUser() 退出账号需要清除用户数据
if (userInfo == null) { //如果本地没有缓存数据,则再执行登录请求
InvenoHttpHelper.requestLogin() { it: InvenoUser.User? ->
if(it == null){
//请求出错
return@requestLogin
}
}
}
//上报激励视频
val ecpm = ...//通过广告框架获取
InvenoHttpHelper.requestSeeAd(ecpm) //带ecpm
//上报插屏视屏
val ecpm = ...//通过广告框架获取
val eventType = ...// 1:展示 3:点击
InvenoHttpHelperWithProgress.requestSeeTableAd(ecpm,eventType)
//绑定微信
//以下数据通过友盟框架的UMShareHepler.requestWXUserInfo()方法获取
val openId = "" //必填参数
val nick = "" //可选参数
val headUrl = "" //可选参数
InvenoHttpHelper.requestBindWechat(openId,nick,headUrl) { it: Any? ->
}
//提现
val mid = "" //通过提现列表获取
InvenoHttpHelper.requestWithDraw(mid) { it: InvenoWithDrawResult? ->
}
//获取提现列表
InvenoHttpHelper.requestWithDrawList { it: InvenoWithDrawListResult? ->
val ingotList = it?.ingot //元宝提现列表
val coinList = it?.coin //红包提现列表
}
//获取当前积分
val scoreType = "" //积分类型
InvenoHttpHelper.requestIntegral(scoreType) { it: Int? ->
//it:相应积分数量
}
//上报每日登录
InvenoHttpHelper.reqeustEveryLogin { it: Int? ->
//it:连续登录天数
}
//通过ecpm获取积分奖励
val ecpm = ... //通过视频sdk获取
InvenoHttpHelper.requestIntegralByEcpm(ecpm){ it:Map<String,Int>? ->
val hbqType = "hbq" //注意,项目对应的红包券积分类型,不同项目不一样
val ybType = "yb" //注意,项目对应的元宝券积分类型,不同项目不一样
val hbq = it?.get(hbqType) ?: 0 //可能为null,null则取0
val yb = it?.get(ybType) ?: 0 //可能为null,null则取0
}
//上报行为给自己服务器
val eventDesc = "行为描述"
val eventValue = 1 //行为值,默认1即可
val eventType = 1 //行为类型,1:快手激活 143:快手关键行为 0:头条激活 25:头条关键行为
InvenoHttpHelper.requestPostEvent(eventDesc,eventValue,eventType) //快手上报
InvenoHttpHelper.requestPostTTEvent(eventDesc,eventValue,eventType) //头条上报
//获取版本更新数据
InvenoHttpHelper.requestCheckUpdate { it: InvenoCheckUpdateResult? ->
//do something....
}
//获取提现控制配置
InvenoHttpHelperWithProgress.requestWithDrawControlConfig { it:Boolean? ->
it?.let {
if(it){
//允许提现
}else{
//不允许提现
}
}
}</code></pre>
<h3>6、根据后台配置,动态上报关键行为</h3>
<p>1)在application里初始化</p>
<pre><code>class APP :Application() {
override fun onCreate() {
super.onCreate()
//...
InvenoKeyEventManager.init(this)
}
}</code></pre>
<p>2)设置关键行为触发上报的回调</p>
<pre><code>InvenoKeyEventManager.setOnPostKeyEventListener { it: Int ->
//当满足上报关键行为的时机时,会回调该方法,且只回调一次,此时需要手动上报关键行为
//因为每个项目上报关键行为的业务可能都不一样,所以需要自己定义关键行为的上报
//it=1快手上报,=2头条上报,=3多牛上报
}</code></pre>
<p>3)请求后台关键行为的配置</p>
<pre><code>//配置会因为包名、渠道号的不同而不同
var channel = "渠道号"
InvenoHttpHelper.requestKeyEventData(channel) { it: InvenoKeyEventConfigResult? ->
//空方法即可
}</code></pre>
<p>4)以下方法请在对应地方调用</p>
<pre><code>//InvenoKeyEventManager内部会根据插屏、激励、全屏的关闭次数、
//提现和提现点击的次数、当前游戏角色的等级、关卡以及roi的值来判断是否要上报关键行为
//所以需要在各个对应的地方执行以下方法
var roi = ecpm / 1000 //roi一般为对应广告的ecpm除以1000,按产品的意思来定,如果不走roi,则设置为0即可
InvenoKeyEventManager.onTableClose(roi) //在插屏广告关闭时调用
InvenoKeyEventManager.onRewardVideoClose(roi) //在激励视频关闭时调用
InvenoKeyEventManager.onFullVideoClose(roi) //在全屏视频关闭时调用
InvenoKeyEventManager.onWithDraw() //在提现成功时调用
InvenoKeyEventManager.onWithDrawClick() //在提现点击时调用
var playerLevel = 11
InvenoKeyEventManager.setPlayerLevel(playerLevel) //更新用户等级
var level = 3
InvenoKeyEventManager.setLevel(level) //更新关卡</code></pre>
<h3>更新日志</h3>
<h6>1.4.0</h6>
<p>添加检测代理功能</p>
<h6>1.3.5</h6>
<p>剔除微信sdk</p>
<h6>1.2.2</h6>
<p>添加自定义api方法</p>
<h6>1.2.0</h6>
<p>头部添加Authorization(jwt)</p>
<h6>1.1.9</h6>
<p>添加关键行为动态配置管理类InvenoKeyEventManager</p>
<h6>1.1.7</h6>
<p>添加通用get请求
InvenoHttpHelper.get()</p>
<h6>1.1.6</h6>
<p>添加通用post请求
InvenoHttpHelper.post()</p>
<h6>1.1.5</h6>
<p>添加第三个tk密钥</p>
<h6>1.1.4</h6>
<p>添加更新接口
添加oaid获取回调</p>
<h6>1.1.2</h6>
<p>添加头条上报接口</p>
<h6>1.1.1</h6>
<p>优化日志输出</p>
<h6>1.1.0</h6>
<p>添加上报行为接口</p>
<h6>1.0.9</h6>
<p>剥离微信sdk,改成可选依赖</p>
<h6>1.0.8</h6>
<p>整合微信sdk</p>