Android平台admob广告接入和封装,android接入广告
/*** 一个id对应一个广告仓库,仓库会自动进行广告的预加载(个数preloadCount),并向外提供广告内容** id默认是测试广告*/class NativeAdRepository constructor(private var id: String = caapppub3940256099942544/2247696110, private var preloadCount: Int = 1) { /** * 已加载的广告列表 */ var adList = LinkedListUnifiedNativeAd() /** * 是否正在进行广告加载 */ var isLoading = false /** * 正在加载的广告个数 */ var loadingCount = 0 var loadListenerList = ArrayListNativeAdLoadListener() /** * 进行广告加载 */ fun loadAds(context: Context) { if (isLoading adList.size = preloadCount) { Log.w(admobManager.TAG, $id NativeAd dont need load) return } isLoading = true //开始加载 val request = AdRequest.Builder().build() val adLoader = AdLoader.Builder(context, id).forUnifiedNativeAd {//广告加载完成 adList.offer(it) for(listener in loadListenerList) { listener.onLoaded() } onAdLoaded() }.withAdListener(object : AdListener() { override fun onAdFailedToLoad(errorCode: Int) { onAdLoaded() Log.w(admobManager.TAG, $id NativeAd load failed, errorCode = $errorCode) } }).build() //开始加载 loadingCount = preloadCount adList.size adLoader.loadAds(request, loadingCount) } /** * 一个广告加载完成时调用 */ private fun onAdLoaded() { //更新正在加载的广告个数 loadingCount //所有广告加载完成,状态更新成未在加载中 if (loadingCount = 0) { isLoading = false //一般广告加载成功,收到一次通知即可,所以将所有监听器在这里进行移除 if(adList.size 0) { loadListenerList.clear() } } } /** * 是否已经有广告加载完成 */ fun isReady(context: Context): Boolean { return adList.isNotEmpty() } /** * 获取加载好的原生广告 */ fun getAd(context: Context): UnifiedNativeAd { var ad = adList.poll() //广告被取走后,需要重新加载广告,保证池子里面有一定数量的预加载广告 loadAds(context) return ad } /** * 设置预加载个数 */ fun setPreloadCount(value: Int) { preloadCount = value } /** * 添加广告加载监听器。