Реклама добавляется достаточно просто и практически одинаково как в случае с google, так и с yandex. Но есть небольшие нюансы.
Yandex реклама
Добавляем зависимость в build.gradle.kts
implementation("com.yandex.android:mobileads:7.0.1")
Создаем отдельную Composable функцию.
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import com.yandex.mobile.ads.banner.BannerAdSize
import com.yandex.mobile.ads.banner.BannerAdView
import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.common.AdSize
@Composable
fun YandexBanner(
bannerId: Int,
modifier: Modifier = Modifier
) {
AndroidView(
modifier = modifier,
factory = {context ->
BannerAdView(context).apply {
setAdUnitId(context.getString(bannerId))
setAdSize(BannerAdSize.stickySize(context, 300))
val adRequest = AdRequest.Builder().build()
loadAd(adRequest)
}
})
}
Здесь я передаю ID баннера, который будет прописан в strings.xml и modifier для того, чтобы управлять расположением рекламы. В моем случае это будет нижняя часть экрана.
Далее вызываю данную Composable функцию внутри контейнера Box в нужном мне экране.
YandexBanner(bannerId = R.string.yandex_banner_1, modifier = Modifier.align(Alignment.BottomCenter))
Также нужно создать отдельный класс и унаследоваться от класса Application. Обычно этот класс всегда у меня есть, так как я использую Dagger в качестве DI (dependency injection).
import android.app.Application
import com.yandex.mobile.ads.common.MobileAds
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class MainApplication: Application() {
override fun onCreate() {
super.onCreate()
MobileAds.initialize(this) {}
}
}
Здесь вызывает override метода onCreate и инициализацию рекламы.
В качестве идентификатора можно использовать тестовый идентификатор из документации яндекса.
Google реклама.
Здесь практически тоже самое, только нужно добавить разрешение в androidManifest и там же указать идентификатор приложения в AdMob, идентификатор самого баннера будет другой.
Разрешение в AndroidManifest
<uses-permission android:name="com.google.android.gms.permission.AD_ID"></uses-permission>
Также в блок application добавляем следующее
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-ХХХ"/>
Зависимости в build.gradle.kts
implementation("com.google.android.gms:play-services-ads:23.0.0")
Создаем Composable функцию
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
@Composable
fun GoogleAdBanner(
bannerId: Int,
modifier: Modifier = Modifier
) {
AndroidView(
modifier = modifier,
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = context.getString(bannerId)
val adRequest = AdRequest.Builder().build()
loadAd(adRequest)
}
})
}
Тут все в целом почти также, как и у яндекс.
Вызываем внутри контейнера Box
GoogleAdBanner(bannerId = R.string.ads_banner_1, modifier = Modifier.align(Alignment.BottomCenter))
Класс MainApplication (название может быть любым)
import android.app.Application
import com.google.android.gms.ads.MobileAds
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class MainApplication: Application() {
override fun onCreate() {
super.onCreate()
MobileAds.initialize(this) { }
}
}
Также важно добавить в AndroidManifest указание использования нового класса
android:name=".MainApplication"
Теперь мы можем в разных экранах вызывать данные Composable функции для показа рекламы.