inveno-library使用示例

代碼實例語言:kotlin

添加私服倉庫訪問賬號

在項目根目錄的build.gradle文件添加以下節(jié)點,其中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?) {}
  })
//異步預(yù)加載激勵視頻
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() {}
  })
//異步預(yù)加載全屏or插屏廣告
fullVideoTopOnManage.loadFullVideo()
//播放全屏or插屏廣告
if(fullVideoTopOnManage.isReady == true){
  fullVideoTopOnManage.show()
}

信息流廣告

val infoAdView: View? = null    //banner廣告
val container: View? = null       //顯示banner廣告的容器

//如果之前有了預(yù)加載的信息流廣告則直接顯示
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為自適應(yīng)高度
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)在對應(yīng)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()
        //快手統(tǒng)計次留
        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) {
        //預(yù)加載下一次視頻廣告
        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.** {*;}

#//您如果使用了穩(wěn)定性模塊可以加入該混淆
-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采集模塊,不再需要開發(fā)者再手動引用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'    //如果需要自己實現(xiàn)oaid的獲取,則不需要依賴,若依賴了,則需要在assets文件夾下放入supplierconfig.json文件和對應(yīng)的證書文件

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          //連接的是否是測試環(huán)境
        httpBuilder.logEnable = true        //是否查看請求日志,過濾關(guān)鍵字OkHttp
        httpBuilder.middle_ground = 0       //0: 沒接入中臺 1: 接入中臺
        httpBuilder.channel = "inveno"            //渠道號
        httpBuilder.inviteCode = ""         //邀請碼
        httpBuilder.oaidCertFile = ""        //oaid安全聯(lián)盟發(fā)布的證書,放在assets文件夾下,不依賴oaid則無須添加
        httpBuilder.encryptType = InvenoEncryptType.TYPE_ONE        //加密方式

        //如果沒有添加oaid依賴,則需要自己實現(xiàn)oaid的獲取邏輯,否則會閃退
        //httpBuilder.oaidProxy = object : InvenoOaidProxy{
        //    override fun getOaid(): String {
        //        return "*****"
        //    }
        //}
        //如果想實現(xiàn)自定義的公共參數(shù)請求,則自己維護(hù),一般不需要添加
        //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會維護(hù)一個成員變量user
    //InvenoUserManager內(nèi)有以下幾個方法
    //InvenoUserManager.restoreUser()   從緩存中回復(fù)用戶數(shù)據(jù),
    //InvenoUserManager.clearUser()     清除用戶數(shù)據(jù)
    //InvenoUserManager.saveUser()      刷新用戶數(shù)據(jù),改方法在登錄接口已自動刷新,無須調(diào)用者再次調(diào)用
}

//上報視頻
InvenoHttpHelper.requestSeeAd()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容