Skip to content

Commit 121afa8

Browse files
authored
feat: admob 구현 작업 진행 (#22)
* build: adbmob 연결 의존성 추가 * build: Replace google service class path * build: secret gradle plugin 추가 * build: admob 적용 * build: secret gradle plugin 설정 추가 * feat: initialize MobileAds * feat: 광고 표시 컴포넌트 추가 * feat: admob 설정 추가 * feat: admob 광고 추가 * feat: categoryScreen Admob 추가
1 parent a49835f commit 121afa8

File tree

9 files changed

+144
-6
lines changed

9 files changed

+144
-6
lines changed

.gitignore

+2-2
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ obj/
223223
.idea/jarRepositories.xml
224224
.idea/navEditor.xml
225225

226-
keystore
226+
app/keystore
227227
*.pepk
228228

229229
# Legacy Eclipse project files
@@ -259,4 +259,4 @@ fabric.properties
259259

260260
!/gradle/wrapper/gradle-wrapper.jar
261261

262-
# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin,java,macos,windows
262+
# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin,java,macos,windows

app/build.gradle.kts

+30
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
import java.util.Properties
2+
13
plugins {
24
alias(libs.plugins.com.android.application)
35
alias(libs.plugins.org.jetbrains.kotlin.android)
46
alias(libs.plugins.kotlin.kapt)
57
alias(libs.plugins.dagger.hilt)
68
alias(libs.plugins.kotlinx.serialization)
9+
alias(libs.plugins.google.services)
10+
alias(libs.plugins.secrets.gradle.plugin)
711
}
812

913
android {
@@ -23,13 +27,38 @@ android {
2327
}
2428
}
2529

30+
val properties = Properties()
31+
properties.load(project.rootProject.file("local.properties").inputStream())
32+
33+
signingConfigs {
34+
create("release") {
35+
storeFile = file(properties["keystore_path"].toString())
36+
storePassword = properties["store_password"].toString()
37+
keyAlias = properties["key_alias"].toString()
38+
keyPassword = properties["key_password"].toString()
39+
}
40+
}
41+
2642
buildTypes {
43+
debug {
44+
resValue(
45+
"string",
46+
"AD_MOB_BANNER_UNIT_ID",
47+
"ca-app-pub-3940256099942544/9214589741"
48+
)
49+
}
2750
release {
51+
resValue(
52+
"string",
53+
"AD_MOB_BANNER_UNIT_ID",
54+
properties["AD_MOB_BANNER_UNIT_ID"] as String? ?: "Default"
55+
)
2856
isMinifyEnabled = false
2957
proguardFiles(
3058
getDefaultProguardFile("proguard-android-optimize.txt"),
3159
"proguard-rules.pro"
3260
)
61+
signingConfig = signingConfigs.getByName("release")
3362
}
3463
}
3564
compileOptions {
@@ -67,6 +96,7 @@ dependencies {
6796
implementation(libs.hilt.android)
6897
implementation(libs.hilt.plugin)
6998
implementation(libs.compose.hilt.navigation)
99+
implementation(libs.play.services.ads)
70100
kapt(libs.hilt.kapt)
71101
implementation(libs.kotlin.serialization.json)
72102

app/src/main/AndroidManifest.xml

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
android:supportsRtl="true"
1414
android:theme="@style/Theme.Packie"
1515
tools:targetApi="33">
16+
17+
<meta-data
18+
android:name="com.google.android.gms.ads.APPLICATION_ID"
19+
android:value="${AD_MOB_APP_ID}"/>
1620
<activity
1721
android:name=".MainActivity"
1822
android:exported="true"
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package org.care.packie
22

33
import android.app.Application
4+
import com.google.android.gms.ads.MobileAds
45
import dagger.hilt.android.HiltAndroidApp
56

67
@HiltAndroidApp
78
class PackieApplication : Application() {
89
override fun onCreate() {
910
super.onCreate()
11+
initializeMobileAds()
12+
}
13+
14+
private fun initializeMobileAds() {
15+
MobileAds.initialize(this)
1016
}
1117
}

app/src/main/java/org/care/packie/feature/category/CategoryScreen.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import me.onebone.toolbar.rememberCollapsingToolbarScaffoldState
3232
import org.care.packie.R
3333
import org.care.packie.ui.DoneDialogType
3434
import org.care.packie.ui.TextFieldDialogType
35+
import org.care.packie.ui.component.ads.BannersAds
3536
import org.care.packie.ui.component.category.Category
3637
import org.care.packie.ui.component.category.SettingPopupMenu
3738
import org.care.packie.ui.component.common.PackieButton
@@ -42,7 +43,7 @@ import org.care.packie.ui.theme.PackieTheme
4243

4344
// private const val MIN_CATEGORY_SIZE = 4
4445
private const val MIN_SPACER_SIZE = 4
45-
private const val MAX_SPACER_SIZE = 80
46+
private const val MAX_SPACER_SIZE = 70
4647

4748
@Composable
4849
fun CategoryScreen(
@@ -150,7 +151,11 @@ fun CategoryScreen(
150151
) {
151152
Text(text = stringResource(id = R.string.packing_category_button))
152153
}
153-
Spacer(modifier = Modifier.size(44.dp))
154+
Spacer(modifier = Modifier.size(4.dp))
155+
BannersAds(
156+
modifier = Modifier.fillMaxWidth()
157+
.height(50.dp)
158+
)
154159
}
155160

156161
AnimatedVisibility(

app/src/main/java/org/care/packie/feature/stuffs/StuffsStickyBottom.kt

+14-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ package org.care.packie.feature.stuffs
33
import androidx.compose.foundation.layout.Column
44
import androidx.compose.foundation.layout.Spacer
55
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.height
67
import androidx.compose.foundation.layout.size
78
import androidx.compose.material3.Text
89
import androidx.compose.runtime.Composable
910
import androidx.compose.ui.Modifier
1011
import androidx.compose.ui.res.stringResource
12+
import androidx.compose.ui.tooling.preview.Preview
1113
import androidx.compose.ui.unit.dp
1214
import org.care.packie.R
15+
import org.care.packie.ui.component.ads.BannersAds
1316
import org.care.packie.ui.component.common.PackieButton
1417

1518
@Composable
@@ -37,5 +40,15 @@ fun StuffsStickyBottom(
3740
}
3841
)
3942
}
40-
Spacer(modifier = Modifier.size(44.dp))
43+
Spacer(modifier = Modifier.size(4.dp))
44+
BannersAds(
45+
modifier = Modifier.fillMaxWidth()
46+
.height(50.dp)
47+
)
48+
}
49+
50+
@Preview
51+
@Composable
52+
fun StuffsStickyBottomPreview() {
53+
StuffsStickyBottom(isEditMode = false)
4154
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.care.packie.ui.component.ads
2+
3+
import android.util.Log
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.height
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.foundation.layout.width
9+
import androidx.compose.material3.Text
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.remember
12+
import androidx.compose.ui.Modifier
13+
import androidx.compose.ui.graphics.Color
14+
import androidx.compose.ui.platform.LocalInspectionMode
15+
import androidx.compose.ui.res.stringResource
16+
import androidx.compose.ui.text.style.TextAlign
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import androidx.compose.ui.unit.dp
19+
import androidx.compose.ui.viewinterop.AndroidView
20+
import com.google.android.gms.ads.AdListener
21+
import com.google.android.gms.ads.AdRequest
22+
import com.google.android.gms.ads.AdSize
23+
import com.google.android.gms.ads.AdView
24+
import org.care.packie.R
25+
import org.care.packie.ui.theme.PackieTheme
26+
27+
@Composable
28+
private fun rememberAdRequest() = remember {
29+
AdRequest.Builder()
30+
.build()
31+
}
32+
@Composable
33+
fun BannersAds(
34+
modifier: Modifier = Modifier,
35+
adRequest: AdRequest = rememberAdRequest()
36+
) {
37+
val adId = stringResource(id = R.string.AD_MOB_BANNER_UNIT_ID)
38+
if (LocalInspectionMode.current) {
39+
Text(
40+
modifier = modifier
41+
.height(50.dp)
42+
.background(Color.Red),
43+
textAlign = TextAlign.Center,
44+
color = Color.White,
45+
text = "Advert Here",
46+
)
47+
} else {
48+
AndroidView(
49+
modifier = modifier,
50+
factory = { context ->
51+
AdView(context).apply {
52+
setAdSize(AdSize.BANNER)
53+
adUnitId = adId
54+
loadAd(adRequest)
55+
}
56+
},
57+
update = {
58+
it.loadAd(adRequest)
59+
}
60+
)
61+
}
62+
}
63+
64+
@Preview
65+
@Composable
66+
fun BannersAdsPreview() {
67+
PackieTheme {
68+
BannersAds(
69+
modifier = Modifier.fillMaxWidth()
70+
)
71+
}
72+
}

build.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ plugins {
55
alias(libs.plugins.kotlin.kapt) apply false
66
alias(libs.plugins.dagger.hilt) apply false
77
alias(libs.plugins.kotlinx.serialization) apply false
8+
alias(libs.plugins.google.services) apply false
9+
alias(libs.plugins.secrets.gradle.plugin) apply false
810
}
911
true // Needed to make the Suppress annotation work for the plugins block

gradle/libs.versions.toml

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[versions]
22
agp = "8.1.2"
3+
google-services = "4.4.1"
34
kotlin = "1.8.10"
45
core-ktx = "1.12.0"
56
junit = "4.13.2"
@@ -14,9 +15,12 @@ security = "1.1.0-alpha06"
1415
dagger-hilt = "2.48.1"
1516
dagger-hilt-navigation-compose = "1.0.0"
1617
kotlin-serialization-json = "1.6.1"
18+
play-services-ads = "23.0.0"
19+
secrets-gradle-plugin = "2.0.1"
1720

1821
[libraries]
1922
core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" }
23+
google-services = { module = "com.google.gms:google-services", version.ref = "google-services" }
2024
junit = { group = "junit", name = "junit", version.ref = "junit" }
2125
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" }
2226
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" }
@@ -38,13 +42,15 @@ hilt-kapt = { module = "com.google.dagger:hilt-compiler", version.ref = "dagger-
3842
hilt-plugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "dagger-hilt" }
3943
compose-hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "dagger-hilt-navigation-compose" }
4044
kotlin-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization-json"}
45+
play-services-ads = { group = "com.google.android.gms", name = "play-services-ads", version.ref = "play-services-ads" }
4146

4247
[plugins]
4348
com-android-application = { id = "com.android.application", version.ref = "agp" }
4449
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
4550
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
4651
dagger-hilt = { id = "com.google.dagger.hilt.android", version.ref = "dagger-hilt" }
4752
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin"}
48-
53+
secrets-gradle-plugin = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref ="secrets-gradle-plugin"}
54+
google-services = { id = "com.google.gms.google-services", version.ref ="google-services"}
4955
[bundles]
5056

0 commit comments

Comments
 (0)