Compose] adMob 연결방법

3125 단어 composeandroidandroid

Compose를 이용하여 앱 개발을 하고, 광고를 넣으려고 하면 마주하는 첫번째 문제다.
아직AdMob에서는 정식적으로 compose를 지원하지 않기 때문에 다른방법을 사용해야 한다.

아래와 같이 AdvertView를 정의하여 사용하자

@Composable
fun AdvertView(modifier: Modifier = Modifier) {
    val isInEditMode = LocalInspectionMode.current
    if (isInEditMode) {
        Text(
            modifier = modifier
                .fillMaxWidth()
                .background(Color.Red)
                .padding(horizontal = 2.dp, vertical = 6.dp),
            textAlign = TextAlign.Center,
            color = Color.White,
            text = "Advert Here",
        )
    } else {
        AndroidView(
            modifier = modifier.fillMaxWidth(),
            factory = { context ->
                AdView(context).apply {
                    adSize = AdSize.BANNER
                    adUnitId = context.getString("배너id")
                    loadAd(AdRequest.Builder().build())
                }
            },
            update = {
                it.loadAd(AdRequest.Builder().build())
            }
        )

    }
}

그리고 onCreate 부분에 다음과 같이 사용해서 적용시켰다.

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

        loadAD()
        setContent {
            BaseApp(title = title.value, bodyContent = {
                MainView()
            })
        }
        MobileAds.initialize(this) { }

    }


    private fun loadAD() {
        val adRequest = AdRequest.Builder().build()
        InterstitialAd.load(
            this,
            getString("배너ID"),
            adRequest,
            object : InterstitialAdLoadCallback() {
                override fun onAdFailedToLoad(p0: LoadAdError) {
                    super.onAdFailedToLoad(p0)
                    mInterstitialAd = null
                }

                override fun onAdLoaded(p0: InterstitialAd) {
                    super.onAdLoaded(p0)
                    mInterstitialAd = p0
                    mInterstitialAd?.show(this@MainActivity)
                }
            })
    }

여기서 BaseApp은 다음과 같이 구성되어있다.

@Composable
fun BaseApp(
    title: String = "",
    bodyContent: @Composable () -> Unit
) {
    val scaffoldState = rememberScaffoldState(rememberDrawerState(DrawerValue.Closed))
    Scaffold(
        scaffoldState = scaffoldState,
        topBar = {
            TopAppBar(
                title = {
                    Text(
                        text = title,
                        color = MyGray,
                        fontFamily = Font.mapleStory,
                        textAlign = TextAlign.Center,
                        modifier = Modifier.fillMaxWidth()
                    )
                },
                backgroundColor = MyWhite
            )
        },
        drawerContent = { Text(text = "drawerContent") },
        bottomBar = { AdvertView() }
    ) { innerPadding ->
        Box(modifier = Modifier.padding(innerPadding)) {
            bodyContent()
        }
    }
}

이상입니다.

좋은 웹페이지 즐겨찾기