【ADEasy】一套全平臺的廣告聚合SDK快速集成框架

中文 https://gitee.com/tjbaobao/ADEasy

English https://gitee.com/tjbaobao/ADEasy/blob/master/README-EN.md

ADEasy(測試版)-集成說明

QQ交流羣(425219113)


一套全平臺的廣告聚合SDK快速集成框架。

ADEasy使用了插件自動集成技術,只需要簡單控制各個平臺的開關,就能實現各平臺接入。並且對於未接入的廣告,不會有冗餘的代碼。

當然,ADEasy本身也有足夠的優點。

  • 統一接口。化繁爲簡,化難爲易。系統再複雜,但接口很簡實,助你快速上手。
  • 權重系統。可動態根據權重來分配廣告位,有效提高收益。
  • 線程調度系統。全局可控調整廣告加載隊列,避免一窩蜂加載,不僅有效提高性能,還避免了多餘的加載數。
  • 控制體系統。讓你輕鬆實現對廣告的極致控制。
  • 分級日誌系統。從簡至繁,可選需要打印的日誌,幫助你快速定位問題。

目前支持的廣告平臺:

adMob(banner,interstitial,video,interstitialVideo)

Unity(banner,interstitial,video,interstitialVideo)

Mi(banner,interstitial,video)

Yomob(interstitial,video,interstitialVideo)

GDT(騰訊優量匯)(banner2.0,插屏2.0,激勵視頻)

Facebook(banner,interstitial,video)

ByteDance(穿山甲)(banner,interstitial,video,interstitialVideo(全屏視頻))

Vungle(banner,interstitial,video,interstitialVideo)

下一步打算支持的廣告平臺:

Baidu

IronSource

使用步驟

  • Step1 接入自動集成插件到build.gradle(project)

buildscript {
     repositories {
        ...
         maven { url 'https://raw.githubusercontent.com/TJHello/publicLib/master'}
     }
      dependencies {
        ...
        classpath "com.TJHello.plugins:ADEasy:3.1.1303-t10"
      }
}

allprojects {
     repositories {
        ...
        maven { url 'https://raw.githubusercontent.com/TJHello/publicLib/master'}
     }
}

....
apply plugin: 'ad-easy'

ADEasyExt{
    adSwitch = true  //廣告總開關
    inChina = true //必須-國內true-國外false
    debug = true //該開關關聯廣告debug開關,release版會自動設置爲false
    //以下參數選擇性填寫,默認false
    //adMobId = "ca-app-pub-755515620*****~*****61045" //adMob的id,接入admob必填,並且更改成正確的id,否則admob會閃退。
    //adMob = true //admob開關
    adYomob = true //yomob開關
    adUnity = true //unity開關
    adMi = true //mi廣告開關
    adGdt = true //騰訊優量匯(廣點通)開關
    adFacebook = true//Facebook開關
    adByteDance = false//ByteDance(穿山甲)開關
    adVungle = false//Vungle開關
    //umeng = ['key'] //是否讓ADEasy託管友盟,['key','deviceType(可選,默認1)','pushSecret(可選,默認null)']
    //abTest = true //ABTest開關 https://github.com/TJHello/ABTest
    //exclude = ['xxxx'] //例外掉某個包
}

android {
    ...
    defaultConfig {
        ...
        //當方法數超限了
        multiDexEnabled true
    }
    
    //支持java8,可以使用一些便捷的語法糖
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    //方法數超限
    implementation 'com.android.support:multidex:1.0.3'
}

class TJApplication : Application(),ADEasyApplicationImp{

    override fun onCreate() {
        super.onCreate()
        ADEasy.setDebug(true)
        ADEasy.channel = ADChannel.Order//關聯友盟渠道與某些廣告平臺的渠道
        ADEasy.toOfflineMode()//離線模式
        ADEasyLog.addFilterType(
            ADEasyLog.TYPE_HANDLER_BASE,
            ADEasyLog.TYPE_ADEASY_DETAILED_STEPS,
            ADEasyLog.TYPE_TOOLS_UMENG
        )
        ADEasy.init(this,this)
    }

    //是否去廣告
    override fun isRemoveAd(): Boolean {
        return false
    }

        //創建廣告配置
    override fun createADAppConfig(group: String): ADAppConfig? {
        when(group){
            ADInfo.GROUP_ADMOB->{
                return ADAppConfig.createAdmob()
                     .initWeight(10)
                     .addParameter("ca-app-pub-3940256099942544/6300978111",ADInfo.TYPE_BANNER)//測試id
                     .addParameter("ca-app-pub-3940256099942544/1033173712",ADInfo.TYPE_INTERSTITIAL)
                     .addParameter("ca-app-pub-3940256099942544/5224354917",ADInfo.TYPE_VIDEO,10)
                     //允許添加多個同類型,不同code的Parameter(Banner暫不支持該特性)
                //   .addParameter("ca-app-pub-394025609994***/**354917",ADInfo.TYPE_VIDEO,10)
            }
        }
        return null
    }

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        //解決方法數超限問題
        MultiDex.install(base)
    }
}
abstract class AppActivity : AppCompatActivity(),ADEasyActivityImp{
    protected val adEasy by lazy { ADEasy.getInstance(this,this) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        adEasy.isAutoShowInterstitial(true)
        onInitValue(savedInstanceState)
        onInitView()
        adEasy.onCreate()
        onLoadData()
    }

    override fun onStart() {
        super.onStart()
        adEasy.onStart()
    }

    override fun onPause() {
        super.onPause()
        adEasy.onPause()
    }

    override fun onResume() {
        super.onResume()
        adEasy.onResume()
    }

    override fun onStop() {
        super.onStop()
        adEasy.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
        adEasy.onDestroy()
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        adEasy.onActivityResult(requestCode,resultCode,data)
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        adEasy.onRequestPermissionsResult(requestCode,permissions,grantResults)
    }

    protected abstract fun onInitValue(savedInstanceState: Bundle?)

    protected abstract fun onInitView()

    protected abstract fun onLoadData()

    override fun isActivityFinish(): Boolean {
        return isFinishing
    }
    
}

示例(TestActivity.kt)(TestActivity.java)


class TestActivity : AppActivity() {

    override fun onInitValue(savedInstanceState: Bundle?) {
        adEasy.isAutoShowBanner(true)
    }

    override fun onInitView() {
        setContentView(R.layout.test_activity_layout)
        btShowVideo.setOnClickListener {
            adEasy.showVideo{adInfo, isReward ->
               Toast.makeText(this,"Close Video :$isReward", Toast.LENGTH_LONG).show()
            }
        }
        btShowInterstitialVideo.setOnClickListener {
            adEasy.showInterstitialVideo {
                Toast.makeText(this,"Close InterstitialVideo",Toast.LENGTH_LONG).show()
            }
        }
        btShowInterstitial.setOnClickListener {
            adEasy.showInterstitial {
                Toast.makeText(this,"Close Interstitial",Toast.LENGTH_LONG).show()
            }
        }

        btShowBanner.setOnClickListener {
            adEasy.showBanner()
        }

        btHideBanner.setOnClickListener {
            adEasy.hideBanner()
        }
    }

    override fun onLoadData() {

    }

    override fun onCreateBanner(): ViewGroup? {
        return bannerLayout
    }

    //退出應用時請調用 ADEasy.exitApp(context)

}

adEasy API說明

boolean hasBanner() //是否有banner
boolean hasInterstitial() //是否有插屏廣告
boolean hasVideo() //是否有激勵視頻
boolean showBanner() //顯示banner
boolean showInterstitial() //顯示插屏
boolean showInterstitialVideo() //顯示插屏視頻
boolean showVideo() //顯示激勵視頻
boolean hideBanner() //隱藏banner

void hangLifeUp() //掛起生命週期,用於彈起隱私協議等場景,需要在adEasy.onCreate前調用
void hangLifeDown() //放下掛起的生命週期,繼續執行
void notShowInterstitialOnce() //忽略一次插屏顯示請求,用於第一次進入首頁不要顯示插屏的場景,需要在adEasy.onCreate前調用
void isAutoShowBanner() //當前頁面是否自動顯示Banner,需要在adEasy.onCreate前調用
void isAutoShowInterstitial()//當前頁面是否自動顯示插屏,需要在adEasy.onCreate前調用
void closeAD() //關閉當前頁面的廣告功能,需要在adEasy.,需要在adEasy.onCreate前調用

其他

加QQ羣諮詢(425219113)

ADEasy版本說明

例:1.0.1001-a01

1:自動化插件版本號[0-99]

0:廣告SDK版本更新號[0-999]

1001->主程序版本號

1:框架性修改[0-9]

0:功能性修改[0-99]

01:小修改,bug修復[0-99]

a01->測試版本號

a:alpha測試(可以嘗試性使用)

b:bate測試(經過了初步真實環境驗證)

t:內部測試

SDK版本對應

x.1.xxxx

Yomob:1.8.7
MI:3.0.0
Unity:3.3.0
ByteDance:2.9.5.0
Admob:19.0.1
GDTSDK:4.190.1060
Vungle:6.5.2
Facebook:5.8.0

x.0.xxxx

Yomob:1.8.5
MI:2.5.0
Unity:3.3.0
ByteDance:2.8.0
Admob:18.3.0
GDTSDK:4.110.980
Vungle:6.5.2
Facebook:5.6.0

主程序更新日誌

1303-t10 更新時間2020-05-20(情人節)

1、新增廣告加載線程調度功能
2、新增在線配置功能
3、新增日誌打印分級分類功能
4、新增自動化託管友盟的功能
5、新增支持ABTest的功能
6、修復若干bug,大量優化

0.9.xxxx 更新時間:2020-04-09

該命名方式已經遺棄,不再維護
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章