Skip to content

Commit d685d0c

Browse files
authored
Merge pull request #63 from YAPP-Github/feature/firebase
[Feat/#62] Firebase Analytics, Crashlytics 설정
2 parents ba27448 + 92f3451 commit d685d0c

File tree

30 files changed

+433
-31
lines changed

30 files changed

+433
-31
lines changed

.github/workflows/pull-request-ci.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ jobs:
3636
distribution: 'temurin'
3737
cache: gradle
3838

39+
- name: Restore google-services.json
40+
env:
41+
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
42+
run: echo $GOOGLE_SERVICES_JSON | base64 --decode > ./app/google-services.json
43+
3944
- name: Add Local Properties
4045
env:
4146
KAKAO_REST_API_KEY_RELEASE: ${{ secrets.KAKAO_REST_API_KEY_RELEASE }}

.github/workflows/push-ci.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ jobs:
3434
distribution: 'temurin'
3535
cache: gradle
3636

37+
- name: Restore google-services.json
38+
env:
39+
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
40+
run: echo $GOOGLE_SERVICES_JSON | base64 --decode > ./app/google-services.json
41+
3742
- name: Add Local Properties
3843
env:
3944
KAKAO_REST_API_KEY_RELEASE: ${{ secrets.KAKAO_REST_API_KEY_RELEASE }}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ output.json
4444

4545
# Google Services (e.g. APIs or Firebase)
4646
# google-services.json
47+
**/google-services.json
4748

4849
# Freeline
4950
freeline.py
@@ -156,4 +157,4 @@ fabric.properties
156157

157158
!/gradle/wrapper/gradle-wrapper.jar
158159

159-
# End of https://www.toptal.com/developers/gitignore/api/androidstudio,android
160+
# End of https://www.toptal.com/developers/gitignore/api/androidstudio,android

app/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import java.util.TimeZone
55
plugins {
66
alias(libs.plugins.breake.android.application)
77
id("com.google.android.gms.oss-licenses-plugin")
8+
alias(libs.plugins.google.services)
9+
alias(libs.plugins.firebase.crashlytics)
810
alias(libs.plugins.baselineprofile)
911
alias(libs.plugins.roborazzi.plugin)
1012
}
@@ -58,6 +60,11 @@ dependencies {
5860
implementation(projects.presentation.main)
5961
implementation(projects.presentation.home)
6062
implementation(projects.overlay.main)
63+
64+
implementation(platform(libs.firebase.bom))
65+
implementation(libs.firebase.analytics)
66+
implementation(libs.firebase.crashlytics)
67+
6168
implementation(libs.androidx.profileinstaller)
6269
testImplementation(projects.core.testing)
6370
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.yapp.breake.di
2+
3+
import android.content.Context
4+
import com.google.firebase.analytics.FirebaseAnalytics
5+
import dagger.Module
6+
import dagger.Provides
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.android.qualifiers.ApplicationContext
9+
import dagger.hilt.components.SingletonComponent
10+
import javax.inject.Singleton
11+
12+
@Module
13+
@InstallIn(SingletonComponent::class)
14+
object FirebaseModule {
15+
16+
@Provides
17+
@Singleton
18+
fun provideFirebaseAnalytics(@ApplicationContext context: Context): FirebaseAnalytics {
19+
return FirebaseAnalytics.getInstance(context)
20+
}
21+
}

build-logic/src/main/kotlin/breake.android.feature.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import com.yapp.breake.configureFirebase
12
import com.yapp.breake.libs
23
import com.yapp.breake.configureHiltAndroid
34
import com.yapp.breake.configureRoborazzi
@@ -15,6 +16,7 @@ android {
1516

1617
configureHiltAndroid()
1718
configureRoborazzi()
19+
configureFirebase()
1820

1921
dependencies {
2022
implementation(project(":domain"))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.yapp.breake
2+
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.dependencies
5+
6+
internal fun Project.configureFirebase() {
7+
val libs = extensions.libs
8+
dependencies {
9+
"implementation"(platform(libs.findLibrary("firebase.bom").get()))
10+
"implementation"(libs.findLibrary("firebase.analytics").get())
11+
"implementation"(libs.findLibrary("firebase.crashlytics").get())
12+
}
13+
}

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ plugins {
2323
alias(libs.plugins.verify.detekt) apply false
2424
alias(libs.plugins.compose.compiler) apply false
2525
alias(libs.plugins.android.test) apply false
26+
alias(libs.plugins.google.services) apply false
27+
alias(libs.plugins.firebase.crashlytics) apply false
2628
alias(libs.plugins.baselineprofile) apply false
2729
alias(libs.plugins.roborazzi.plugin) apply false
2830
}

core/detection/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ dependencies {
1414
implementation(projects.core.util)
1515
implementation(projects.core.common)
1616
implementation(projects.core.model)
17+
18+
implementation(platform(libs.firebase.bom))
19+
implementation(libs.firebase.analytics)
20+
implementation(libs.firebase.crashlytics)
1721
}

core/detection/src/main/java/com/yapp/breake/core/detection/AppLaunchDetectionService.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.yapp.breake.core.detection
33
import android.accessibilityservice.AccessibilityService
44
import android.accessibilityservice.AccessibilityServiceInfo
55
import android.view.accessibility.AccessibilityEvent
6+
import com.google.firebase.analytics.FirebaseAnalytics
7+
import com.google.firebase.analytics.logEvent
68
import com.yapp.breake.core.model.app.AppGroupState
79
import com.yapp.breake.core.util.OverlayLauncher
810
import com.yapp.breake.core.util.getAppNameFromPackage
@@ -21,6 +23,9 @@ class AppLaunchDetectionService : AccessibilityService() {
2123
@Inject
2224
lateinit var findAppGroupUsecase: FindAppGroupUseCase
2325

26+
@Inject
27+
lateinit var firebaseAnalytics: FirebaseAnalytics
28+
2429
private val serviceJob = SupervisorJob()
2530
private val serviceScope = CoroutineScope(Dispatchers.Main + serviceJob)
2631

@@ -52,18 +57,37 @@ class AppLaunchDetectionService : AccessibilityService() {
5257
Timber.i("앱 그룹: ${appGroup.name}, 상태: $it")
5358
}
5459

60+
val appName = getAppNameFromPackage(packageName) ?: packageName
61+
5562
when (blockingState) {
5663
AppGroupState.NeedSetting, AppGroupState.Blocking -> {
5764
OverlayLauncher.startOverlay(
5865
context = applicationContext,
5966
appGroup = appGroup,
60-
appName = getAppNameFromPackage(packageName),
67+
appName = appName,
6168
appGroupState = blockingState,
6269
)
70+
firebaseAnalytics.run {
71+
if (blockingState == AppGroupState.Blocking) {
72+
logEvent("app_launch_detected") {
73+
param("app_group_state", "blocking")
74+
param("app_name", appName)
75+
}
76+
} else {
77+
logEvent("app_launch_detected") {
78+
param("app_group_state", "need_setting")
79+
param("app_name", appName)
80+
}
81+
}
82+
}
6383
}
6484

6585
AppGroupState.Using -> {
6686
Timber.i("$packageName 앱은 사용 상태입니다. 아무 작업도 하지 않습니다.")
87+
firebaseAnalytics.logEvent("app_launch_detected") {
88+
param("app_group_state", "using")
89+
param("app_name", appName)
90+
}
6791
}
6892

6993
else -> {}

0 commit comments

Comments
 (0)