安卓接入Kwai广告源

官方文档:gKwai Network_Android SDK 接入说明 | Kwai Network_Android SDK Intergration Description - 轻雀文档

目录

一、新建一个Kotlin的安卓项目

二、环境配置

1.在应用级的build.gradle(app)导包

2、在gradle.propertie文件中新增配置

3、添加权限

三、具体使用

1.新建广告监听器

2.写一个简单的布局

[3.初始化sdk 和展示广告](#3.初始化sdk 和展示广告)


一、新建一个Kotlin的安卓项目
二、环境配置
1.在应用级的build.gradle(app)导包
Groovy 复制代码
//下面这两个包在新建项目的时候会自动导入
//    implementation(libs.androidx.appcompat)
//    implementation(libs.material)

    implementation("io.github.kwainetwork:adImpl:1.2.19")
    implementation("io.github.kwainetwork:adApi:1.2.19")
    implementation("androidx.media3:media3-exoplayer:1.0.0-alpha01")
    implementation("androidx.annotation:annotation:1.2.0")
    implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
2、在gradle.propertie文件中新增配置

主要是要使用AndroidX环境

Groovy 复制代码
## Android 插件会使用对应的 AndroidX 库而非支持库。| The Android plugin will use the corresponding AndroidX repository instead of the support repository.
android.useAndroidX=true
## Android 插件会通过重写现有第三方库的二进制文件,自动将这些库迁移为使用 AndroidX。| AndroidX。The Android plugin automatically migrates existing third-party repositories to use AndroidX by rewriting their binaries.
android.enableJetifier=true
3、添加权限

在App的AndroidManifest.xml文件中,添加如下权限

Groovy 复制代码
<!--联网权限--> 
<uses-permission android:name="android.permission.INTERNET" />
三、具体使用
1.新建广告监听器
Kotlin 复制代码
import android.util.Log
import com.kwai.network.sdk.constant.KwaiError
import com.kwai.network.sdk.loader.business.reward.interf.IKwaiRewardAdListener

/**
 * 这个是激励广告行为的回调 | This is an reward ad behavior callback 
 */
class RewardAdListener : IKwaiRewardAdListener {
    private val TAG = "RewardAdListener"
    override fun onAdShow() {
        Log.i(TAG, "onAdShow")
    }

    override fun onAdShowFailed(error: KwaiError) {
        Log.i(TAG, "onAdShowFailed code = ${error.code} msg = ${error.msg}")
    }

    override fun onAdClick() {
        Log.i(TAG, "onAdClick")
    }

    override fun onAdPlayComplete() {
        Log.i(TAG, "onAdPlayComplete")
    }

    override fun onRewardEarned() {
        // 可以在这里,通过mKwaiRewardAd拿到广告的价格,发放奖励 | It is possible to get the price of the ads through mKwaiRewardAd to give out rewards
        Log.i(TAG, "onAdEarned")
    }

    override fun onAdClose() {
        Log.i(TAG, "onAdClose")
    }
}
Kotlin 复制代码
import android.content.Context
import android.util.Log
import android.widget.Toast
import com.kwai.network.sdk.constant.KwaiError
import com.kwai.network.sdk.loader.business.reward.data.KwaiRewardAd
import com.kwai.network.sdk.loader.common.interf.AdLoadListener

/**
 * 这个回调,是广告加载成功或者失败的回调
 */
class RewardAdLoadListener(val context: Context, val successCallBack : (kwaiRewardAd: KwaiRewardAd)-> Unit) : AdLoadListener<KwaiRewardAd> {
    private val TAG = "RewardAdLoadListener"

    override fun onAdLoadStart(trackId: String?) {
        Log.i(TAG, "onAdLoadStart")
        Toast.makeText(context, "onAdLoadStart", Toast.LENGTH_SHORT).show()
    }

    override fun onAdLoadSuccess(trackId: String?, kwaiRewardAd: KwaiRewardAd) {
        val msg = "onAdLoaded: ${kwaiRewardAd.price}"
        Log.i(TAG, msg)
        successCallBack.invoke(kwaiRewardAd)
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }

    override fun onAdLoadFailed(trackId: String?, kwaiError: KwaiError) {
        val msg = "onAdLoadFailed code = ${kwaiError.code} msg = ${kwaiError.msg}"
        Log.i(TAG, msg)
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }
}
Kotlin 复制代码
import android.util.Log
import com.kwai.network.sdk.constant.KwaiError
import com.kwai.network.sdk.loader.business.interstitial.interf.IKwaiInterstitialAdListener

/**
 * 插屏广告页面状态监听 | Interstitial ads page status listening
 */
class InterstitialAdListener : IKwaiInterstitialAdListener {
    val TAG: String = "interstitial"
    override fun onAdShow() {
        Log.i(TAG, "onAdShow")
    }

    override fun onAdShowFailed(error: KwaiError) {
        Log.i(TAG, "onAdShowFailed code = ${error.code} msg = ${error.msg}")
    }

    override fun onAdClick() {
        Log.i(TAG, "onAdClick")
    }

    override fun onAdClose() {
        Log.i(TAG, "onAdClose")
    }

    override fun onAdPlayComplete() {
        Log.i(TAG, "onAdPlayComplete")
    }
}
Kotlin 复制代码
import android.content.Context
import android.util.Log
import android.widget.Toast
import com.kwai.network.sdk.constant.KwaiError
import com.kwai.network.sdk.loader.business.interstitial.data.KwaiInterstitialAd
import com.kwai.network.sdk.loader.common.interf.AdLoadListener

/**
 * 插屏广告加载监听
 */
class InterstitialAdLoadListener(val context: Context , val successCallBack : (kwaiInterstitialAd : KwaiInterstitialAd)-> Unit) : AdLoadListener<KwaiInterstitialAd> {
    val TAG: String = "interstitial"
    override fun onAdLoadStart(trackId: String?) {
        Log.i(TAG, "onAdLoadStart")
        Toast.makeText(context, "onAdLoadStart", Toast.LENGTH_SHORT).show()
    }

    override fun onAdLoadSuccess(trackId: String?, kwaiInterstitialAd: KwaiInterstitialAd) {
        val msg = "onAdLoaded: ${kwaiInterstitialAd.price}"
        Log.i(TAG, msg)
        successCallBack.invoke(kwaiInterstitialAd)
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }

    override fun onAdLoadFailed(trackId: String?, kwaiError: KwaiError) {
        val msg = "onAdLoadFailed code = ${kwaiError.code} msg = ${kwaiError.msg}"
        Log.i(TAG, msg)
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }
}
2.写一个简单的布局
XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="20dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center">

        <Button
            android:id="@+id/interBt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="插屏广告"/>
        <Button
            android:id="@+id/rewardedBt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="激励广告"/>

    </LinearLayout>

</FrameLayout>
3.初始化sdk 和展示广告

将下面代码中<< >>标注的参数换成自己的

Kotlin 复制代码
import android.app.Activity
import android.os.Bundle
import android.util.Log
import com.kwai.network.sdk.KwaiAdSDK
import com.kwai.network.sdk.api.KwaiInitCallback
import com.kwai.network.sdk.api.SdkConfig
import com.kwai.network.sdk.loader.business.interstitial.data.KwaiInterstitialAd
import com.kwai.network.sdk.loader.business.interstitial.data.KwaiInterstitialAdConfig
import com.kwai.network.sdk.loader.business.interstitial.data.KwaiInterstitialAdRequest
import com.kwai.network.sdk.loader.business.reward.data.KwaiRewardAd
import com.kwai.network.sdk.loader.business.reward.data.KwaiRewardAdConfig
import com.kwai.network.sdk.loader.business.reward.data.KwaiRewardAdRequest
import com.kwai.network.sdk.loader.common.interf.IKwaiAdLoader

class KwaiActivity : Activity() {

    private var mKwaiRewardAd: KwaiRewardAd? = null
    private var mKwaiRewardAdAdLoader: IKwaiAdLoader<KwaiRewardAdRequest?>? = null

    private var mKwaiInterstitialAd: KwaiInterstitialAd? = null
    private var mKwaiInterstitialAdLoader: IKwaiAdLoader<KwaiInterstitialAdRequest?>? = null


    val binding by lazy { ActivityKwaiBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        initKwaiSDK()

        binding.backImg.setOnClickListener {
            finish()
        }

        binding.interBt.setOnClickListener {
            //展示插屏广告
            if (mKwaiInterstitialAd != null && mKwaiInterstitialAd!!.isReady ){
                mKwaiInterstitialAd!!.show(this)
            }
        }
        binding.rewardedBt.setOnClickListener {
            //展示激励广告
            if (mKwaiRewardAd != null && mKwaiRewardAd!!.isReady ){
                mKwaiRewardAd!!.show(this)
            }
        }
    }

    fun initKwaiSDK() {
        val config = SdkConfig.Builder()
            .appId("<< appid >>")
            .token("<< token >>")
            .setInitCallback(object : KwaiInitCallback {
                override fun onSuccess() {
                    Log.d("Kwai", "kwai init success")
                    loadRewardAd()
                    loadInterstitialAd()
                }

                override fun onFail(code: Int, msg: String?) {
                    Log.d("Kwai", "kwai init fail")
                }

            })
            .build()
        KwaiAdSDK.init(this, config)
    }

    //加载激励广告
    private fun loadRewardAd() {
        val loaderManager = KwaiAdSDK.getKwaiAdLoaderManager()
        if (loaderManager != null) {
            mKwaiRewardAdAdLoader = loaderManager.buildRewardAdLoader(
                KwaiRewardAdConfig.Builder(RewardAdLoadListener(this){
                    mKwaiRewardAd = it
                })
                    .withKwaiRewardAdListener(RewardAdListener())
                    .build()
            )
            // 开始发起请求 | Starting a request
            val kwaiRewardAdRequest = KwaiRewardAdRequest("<< 激励广告id >>")
            mKwaiRewardAdAdLoader!!.loadAd(kwaiRewardAdRequest)
        }
    }


    //加载插屏广告
    private fun loadInterstitialAd() {

        val loaderManager = KwaiAdSDK.getKwaiAdLoaderManager()
        if (loaderManager != null) {
            mKwaiInterstitialAdLoader = loaderManager.buildInterstitialAdLoader(
                KwaiInterstitialAdConfig.Builder(InterstitialAdLoadListener(this){
                    mKwaiInterstitialAd = it
                })
                    .withKwaiInterstitialAdListener(InterstitialAdListener())
                    .build()
            )
            // 开始发起请求 | Starting a request
            val kwaiInterstitialAdRequest = KwaiInterstitialAdRequest("<< 插屏广告id >>")
            mKwaiInterstitialAdLoader!!.loadAd(kwaiInterstitialAdRequest)
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        if (mKwaiRewardAdAdLoader != null){
            mKwaiRewardAdAdLoader?.release()
            mKwaiRewardAdAdLoader = null
        }
        if (mKwaiInterstitialAdLoader != null){
            mKwaiInterstitialAdLoader?.release()
            mKwaiInterstitialAdLoader = null
        }
    }
}
相关推荐
2501_916013743 小时前
iOS 混淆与 App Store 审核兼容性 避免被拒的策略与实战流程(iOS 混淆、ipa 加固、上架合规)
android·ios·小程序·https·uni-app·iphone·webview
程序员江同学4 小时前
Kotlin 技术月报 | 2025 年 9 月
android·kotlin
码农的小菜园4 小时前
探究ContentProvider(一)
android
时光少年6 小时前
Compose AnnotatedString实现Html样式解析
android·前端
hnlgzb7 小时前
安卓中,kotlin如何写app界面?
android·开发语言·kotlin
jzlhll1237 小时前
deepseek kotlin flow快生产者和慢消费者解决策略
android·kotlin
火柴就是我7 小时前
Android 事件分发之动态的决定某个View来处理事件
android
一直向钱7 小时前
FileProvider 配置必须针对 Android 7.0+(API 24+)做兼容
android
zh_xuan7 小时前
Android 消息循环机制
android