Skip to content

[FEAT] 애드몹 배너를 삽입합니다. #214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/workflows/android_cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,17 @@ jobs:
env:
BASE_URL: ${{ secrets.BASE_URL }}
AMPLITUDE_API_KEY: ${{ secrets.AMPLITUDE_API_KEY }}
ADMOB_APP_ID_DEBUG: ${{ secrets.ADMOB_APP_ID_DEBUG }}
ADMOB_APP_ID_RELEASE: ${{ secrets.ADMOB_APP_ID_RELEASE }}
ADMOB_AD_UNIT_ID_DEBUG: ${{ secrets.ADMOB_AD_UNIT_ID_DEBUG }}
ADMOB_AD_UNIT_ID_RELEASE: ${{ secrets.ADMOB_AD_UNIT_ID_RELEASE }}
run: |
echo -e "baseUrl=$BASE_URL\namplitudeApiKey=$AMPLITUDE_API_KEY" >> local.properties
echo -e "baseUrl=$BASE_URL" > local.properties
echo -e "amplitudeApiKey=$AMPLITUDE_API_KEY" >> local.properties
echo -e "admobAppIdDebug=$ADMOB_APP_ID_DEBUG" >> local.properties
echo -e "admobAppIdRelease=$ADMOB_APP_ID_RELEASE" >> local.properties
echo -e "admobAdUnitIdDebug=$ADMOB_AD_UNIT_ID_DEBUG" >> local.properties
echo -e "admobAdUnitIdRelease=$ADMOB_AD_UNIT_ID_RELEASE" >> local.properties

# 7. Debug Local Properties Check
- name: Debug Local Properties
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/android_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,17 @@ jobs:
env:
BASE_URL: ${{ secrets.BASE_URL }}
AMPLITUDE_API_KEY: ${{ secrets.AMPLITUDE_API_KEY }}
ADMOB_APP_ID_DEBUG: ${{ secrets.ADMOB_APP_ID_DEBUG }}
ADMOB_APP_ID_RELEASE: ${{ secrets.ADMOB_APP_ID_RELEASE }}
ADMOB_AD_UNIT_ID_DEBUG: ${{ secrets.ADMOB_AD_UNIT_ID_DEBUG }}
ADMOB_AD_UNIT_ID_RELEASE: ${{ secrets.ADMOB_AD_UNIT_ID_RELEASE }}
run: |
echo -e "baseUrl=$BASE_URL\namplitudeApiKey=$AMPLITUDE_API_KEY" >> local.properties
echo -e "baseUrl=$BASE_URL" > local.properties
echo -e "amplitudeApiKey=$AMPLITUDE_API_KEY" >> local.properties
echo -e "admobAppIdDebug=$ADMOB_APP_ID_DEBUG" >> local.properties
echo -e "admobAppIdRelease=$ADMOB_APP_ID_RELEASE" >> local.properties
echo -e "admobAdUnitIdDebug=$ADMOB_AD_UNIT_ID_DEBUG" >> local.properties
echo -e "admobAdUnitIdRelease=$ADMOB_AD_UNIT_ID_RELEASE" >> local.properties

# Debug Local Properties Check
- name: Debug Local Properties
Expand Down
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,5 @@ dependencies {
implementation(projects.feature.navigator)
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
implementation(libs.play.services.ads)
}
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
android:usesCleartextTraffic="true"
tools:targetApi="31">

<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="@string/admob_app_id" />

<activity
android:name="com.yapp.navigator.MainActivity"
android:windowSoftInputMode="adjustResize"
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/yapp/orbit/OrbitApplication.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.yapp.orbit

import android.app.Application
import com.google.android.gms.ads.MobileAds
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class OrbitApplication : Application() {
override fun onCreate() {
super.onCreate()
MobileAds.initialize(this)
}
}
18 changes: 18 additions & 0 deletions build-logic/src/main/java/com/yapp/convention/Extension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,24 @@ internal fun CommonExtension<*, *, *, *, *, *>.addBuildConfigFields(project: Pro
}
}

internal fun CommonExtension<*, *, *, *, *, *>.addResValues(project: Project) {
val admobAppIdDebug = project.getLocalProperty("admobAppIdDebug", "")
val admobAppIdRelease = project.getLocalProperty("admobAppIdRelease", "")
val admobAdUnitIdDebug = project.getLocalProperty("admobAdUnitIdDebug", "")
val admobAdUnitIdRelease = project.getLocalProperty("admobAdUnitIdRelease", "")

buildTypes {
getByName("debug") {
resValue("string", "admob_app_id", admobAppIdDebug)
resValue("string", "admob_ad_unit_id", admobAdUnitIdDebug)
}
getByName("release") {
resValue("string", "admob_app_id", admobAppIdRelease)
resValue("string", "admob_ad_unit_id", admobAdUnitIdRelease)
}
}
}

internal fun Project.getLocalProperty(key: String, defaultValue: String? = null): String {
val propertiesFile = rootProject.file("local.properties")
if (propertiesFile.exists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ internal fun Project.configureKotlinAndroid() {
}

addBuildConfigFields(project)
addResValues(project)
}

configureKotlin()
Expand Down
1 change: 1 addition & 0 deletions core/ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ dependencies {
implementation(libs.orbit.compose)
implementation(libs.orbit.viewmodel)
implementation(libs.lottie.compose)
implementation(libs.play.services.ads)
}
3 changes: 1 addition & 2 deletions core/ui/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<manifest>
</manifest>
34 changes: 34 additions & 0 deletions core/ui/src/main/java/com/yapp/ui/component/banner/AdsBanner.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.yapp.ui.component.banner

import android.annotation.SuppressLint
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
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
import core.ui.R

@SuppressLint("MissingPermission")
@Composable
fun AdsBanner(
modifier: Modifier = Modifier,
) {
val adUnitId = stringResource(id = R.string.admob_ad_unit_id)

AndroidView(
modifier = modifier.fillMaxWidth(),
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
this.adUnitId = adUnitId
loadAd(AdRequest.Builder().build())
}
},
update = { adView ->
adView.loadAd(AdRequest.Builder().build())
},
)
}
1 change: 1 addition & 0 deletions feature/alarm-interaction/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ dependencies {
implementation(libs.androidx.material.android)
implementation(libs.androidx.annotation)
implementation(libs.gson)
implementation(libs.play.services.ads)
}
1 change: 0 additions & 1 deletion feature/alarm-interaction/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Icon
Expand All @@ -30,6 +31,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.yapp.common.navigation.OrbitNavigator
import com.yapp.designsystem.theme.OrbitTheme
import com.yapp.ui.component.banner.AdsBanner
import com.yapp.ui.component.button.OrbitButton
import com.yapp.ui.component.lottie.LottieAnimation
import com.yapp.ui.utils.heightForScreenPercentage
Expand Down Expand Up @@ -121,61 +123,65 @@ private fun AlarmActionContent(
onSnoozeClick: () -> Unit,
onDismissClick: () -> Unit,
) {
Column(
modifier = Modifier
.fillMaxSize()
.background(
color = Color(0xFF496381),
),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Spacer(
modifier = Modifier.heightForScreenPercentage(
0.17f,
),
)
Box(modifier = Modifier.statusBarsPadding()) {
Column(
modifier = Modifier
.fillMaxSize()
.background(
color = Color(0xFF496381),
),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Spacer(
modifier = Modifier.heightForScreenPercentage(
0.17f,
),
)

AlarmTime(
isAm = isAm,
hour = hour,
minute = minute,
todayDate = todayDate,
)
AlarmTime(
isAm = isAm,
hour = hour,
minute = minute,
todayDate = todayDate,
)

Spacer(modifier = Modifier.height(102.dp))
Spacer(modifier = Modifier.height(102.dp))

Icon(
painter = painterResource(id = core.designsystem.R.drawable.ic_alarm_action_character),
tint = Color(0xFF07203E),
contentDescription = "Alarm Action Character",
)
Icon(
painter = painterResource(id = core.designsystem.R.drawable.ic_alarm_action_character),
tint = Color(0xFF07203E),
contentDescription = "Alarm Action Character",
)

Spacer(modifier = Modifier.height(56.dp))
Spacer(modifier = Modifier.height(56.dp))

if (snoozeEnabled && snoozeCount != 0) {
AlarmSnoozeButton(
snoozeInterval = snoozeInterval,
snoozeCount = snoozeCount,
onSnoozeClick = onSnoozeClick,
if (snoozeEnabled && snoozeCount != 0) {
AlarmSnoozeButton(
snoozeInterval = snoozeInterval,
snoozeCount = snoozeCount,
onSnoozeClick = onSnoozeClick,
)
} else {
Spacer(modifier = Modifier.height(54.dp))
}

Spacer(modifier = Modifier.weight(1f))

OrbitButton(
label = stringResource(id = R.string.alarm_off_btn),
enabled = true,
modifier = Modifier
.padding(
start = 40.dp,
end = 40.dp,
bottom = 48.dp,
)
.height(62.dp),
onClick = onDismissClick,
)
} else {
Spacer(modifier = Modifier.height(54.dp))
}

Spacer(modifier = Modifier.weight(1f))

OrbitButton(
label = stringResource(id = R.string.alarm_off_btn),
enabled = true,
modifier = Modifier
.padding(
start = 40.dp,
end = 40.dp,
bottom = 48.dp,
)
.height(62.dp),
onClick = onDismissClick,
)
AdsBanner()
}
}

Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ gson = "2.11.0"

# Google Libraries Versions
google-service = "4.4.2"
playServicesAd = "24.2.0"
firebase-bom = "33.1.1"
firebase-app-distribution = "5.1.0"
firebase-crashlytics = "3.0.3"
Expand Down Expand Up @@ -179,6 +180,8 @@ androidx-material-android = { group = "androidx.compose.material", name = "mater

amplitude-analytics = { group = "com.amplitude", name = "analytics-android", version.ref = "amplitude" }

play-services-ads = { group = "com.google.android.gms", name = "play-services-ads", version.ref = "playServicesAd" }

[plugins]
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
Expand Down