diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e6ae5dc9..4f482da7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,8 +24,8 @@ android { applicationId = "com.kuit.findu" minSdk = 28 targetSdk = 35 - versionCode = 14 - versionName = "1.0.13" + versionCode = 15 + versionName = "1.1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "GPT_KEY", properties["GPT_KEY"].toString()) @@ -53,7 +53,9 @@ android { buildTypes { release { isMinifyEnabled = false + signingConfig = signingConfigs.getByName("release") buildConfigField("String", "BASE_URL", properties["base.url.release"].toString()) + buildConfigField("String", "ADMOB_BANNER_ID", properties["ADMOB_BANNER_ID_RELEASE"].toString()) proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" @@ -64,7 +66,7 @@ android { isDebuggable = true versionNameSuffix = "-DEBUG" buildConfigField("String", "BASE_URL", properties["base.url.dev"].toString()) - + buildConfigField("String", "ADMOB_BANNER_ID", properties["ADMOB_BANNER_ID_DEBUG"].toString()) } } buildFeatures { @@ -169,4 +171,7 @@ dependencies { implementation(libs.firebase.analytics.ktx) implementation(libs.firebase.config.ktx) implementation(libs.firebase.crashlytics) + + // AdMob + implementation("com.google.android.gms:play-services-ads:23.1.0") } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 97f999fc..9a8a274a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -94,6 +94,10 @@ -dontwarn com.google.firebase.** -dontwarn com.google.android.gms.** +# ========== AdMob ========== +-keep class com.google.android.gms.ads.** { *; } +-dontwarn com.google.android.gms.ads.** + # ========== Jetpack Compose ========== -keep class androidx.compose.** { *; } -keep class androidx.compose.runtime.** { *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4f09ee84..7979c5fa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,11 @@ android:name="com.kakao.sdk.AppKey" android:value="${KAKAO_NATIVE_APP_KEY_MANIFEST}" /> + + + + val analytics = FirebaseAnalytics.getInstance(context) + + AdView(context).apply { + setAdSize(AdSize.BANNER) + adUnitId = AD_UNIT_ID + adListener = object : AdListener() { + override fun onAdClicked() { + analytics.logEvent(AnalyticsEvent.AD_CLICK, Bundle().apply { + putString(AnalyticsEvent.AD_LOCATION, adLocation) + }) + } + + override fun onAdImpression() { + analytics.logEvent(AnalyticsEvent.AD_IMPRESSION, Bundle().apply { + putString(AnalyticsEvent.AD_LOCATION, adLocation) + }) + } + + override fun onAdFailedToLoad(error: LoadAdError) { + Log.e("AdBanner", "광고 로드 실패: ${error.code} - ${error.message}") + } + + override fun onAdLoaded() { + Log.d("AdBanner", "광고 로드 성공") + } + } + loadAd(AdRequest.Builder().build()) + } + } + ) +} diff --git a/app/src/main/java/com/kuit/findu/presentation/ui/home/component/HomeWebLinkList.kt b/app/src/main/java/com/kuit/findu/presentation/ui/home/component/HomeWebLinkList.kt index 3d29e8ef..ca1aa026 100644 --- a/app/src/main/java/com/kuit/findu/presentation/ui/home/component/HomeWebLinkList.kt +++ b/app/src/main/java/com/kuit/findu/presentation/ui/home/component/HomeWebLinkList.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.kuit.findu.R import com.kuit.findu.presentation.ui.base.BaseVectorIcon +import com.kuit.findu.presentation.ui.common.AdBanner import com.kuit.findu.presentation.util.WebViewUrl.CENTER_URL import com.kuit.findu.presentation.util.WebViewUrl.PART_URL import com.kuit.findu.ui.theme.FindUTheme @@ -51,15 +52,9 @@ fun HomeWebLinkList(modifier: Modifier = Modifier) { buttonText = "종합유기견보호센터 바로가기", webUrl = CENTER_URL ) - Spacer(modifier = Modifier.height(60.dp)) - Text( - text = "서비스 관련 정보 \n" + - "문의처는 어쩌고 저쩌고 \n" + - "전화번호 00-10-3-20442", - style = FindUTheme.typography.captionRegular12, - color = FindUTheme.colors.gray5 - ) - + Spacer(modifier = Modifier.height(40.dp)) + AdBanner(adLocation = "home_web_link") + Spacer(modifier = Modifier.height(20.dp)) } } diff --git a/app/src/main/java/com/kuit/findu/presentation/ui/home/composeview/HomeScreen.kt b/app/src/main/java/com/kuit/findu/presentation/ui/home/composeview/HomeScreen.kt index 214686a4..7cbee8ad 100644 --- a/app/src/main/java/com/kuit/findu/presentation/ui/home/composeview/HomeScreen.kt +++ b/app/src/main/java/com/kuit/findu/presentation/ui/home/composeview/HomeScreen.kt @@ -38,6 +38,7 @@ import com.kuit.findu.presentation.ui.home.component.HomeReportedAnimalList import com.kuit.findu.presentation.ui.home.component.HomeTopBar import com.kuit.findu.presentation.ui.home.component.HomeWebLinkList import com.kuit.findu.presentation.ui.home.viewmodel.HomeUiState +import com.kuit.findu.presentation.ui.common.AdBanner import com.kuit.findu.ui.theme.FindUTheme import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.rememberPagerState @@ -131,6 +132,12 @@ fun HomeScreen( bannerList = bannerList, pagerState = pagerState ) + Spacer(modifier = Modifier.height(15.dp)) + + AdBanner( + modifier = Modifier.padding(horizontal = 20.dp), + adLocation = "home_screen" + ) Spacer(modifier = Modifier.height(30.dp)) } } diff --git a/app/src/main/java/com/kuit/findu/presentation/ui/my/MyFragment.kt b/app/src/main/java/com/kuit/findu/presentation/ui/my/MyFragment.kt index 1648b277..d5df7dab 100644 --- a/app/src/main/java/com/kuit/findu/presentation/ui/my/MyFragment.kt +++ b/app/src/main/java/com/kuit/findu/presentation/ui/my/MyFragment.kt @@ -30,9 +30,15 @@ import com.kuit.findu.presentation.ui.my.dialog.MyProfileImageDialog import com.kuit.findu.presentation.ui.my.dialog.MyWithdrawalDialog import com.kuit.findu.presentation.ui.my.model.ProfileImageType import com.kuit.findu.presentation.ui.my.viewmodel.MyViewModel +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdSize +import com.google.android.gms.ads.LoadAdError import com.google.firebase.Firebase +import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.remoteconfig.remoteConfig import com.google.firebase.remoteconfig.remoteConfigSettings +import com.kuit.findu.analytics.AnalyticsEvent import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch @@ -76,6 +82,30 @@ class MyFragment : Fragment() { super.onViewCreated(view, savedInstanceState) observeViewModel() + setupAdView() + } + + private fun setupAdView() { + val analytics = FirebaseAnalytics.getInstance(requireContext()) + + binding.adViewMy.adListener = object : AdListener() { + override fun onAdClicked() { + analytics.logEvent(AnalyticsEvent.AD_CLICK, android.os.Bundle().apply { + putString(AnalyticsEvent.AD_LOCATION, "my_page") + }) + } + + override fun onAdImpression() { + analytics.logEvent(AnalyticsEvent.AD_IMPRESSION, android.os.Bundle().apply { + putString(AnalyticsEvent.AD_LOCATION, "my_page") + }) + } + + override fun onAdFailedToLoad(error: LoadAdError) { + // 광고 로드 실패 시 처리 + } + } + binding.adViewMy.loadAd(AdRequest.Builder().build()) } private fun initListener() { diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml index a4810c31..05905c8f 100644 --- a/app/src/main/res/layout/fragment_my.xml +++ b/app/src/main/res/layout/fragment_my.xml @@ -462,6 +462,13 @@ +