From e6b856ccf3602be4e3f1208bfc20eccb444a378a Mon Sep 17 00:00:00 2001 From: PeraSite Date: Mon, 15 Dec 2025 18:03:38 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20PostHog=20Android=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 3 +++ gradle/libs.versions.toml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1337bab2..5cdade06 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -238,6 +238,9 @@ dependencies { // 현재 위치 정보 implementation(libs.play.services.location) + // PostHog + implementation(libs.posthog.android) + } kapt { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 253683fd..d8b71fc5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -59,6 +59,7 @@ ossLicensesPlugin = "0.10.6" glanceAppwidget = "1.1.1" glanceAppwidgetPreview = "1.1.1" glancePreview = "1.1.1" +posthog = "3.+" [libraries] @@ -155,6 +156,7 @@ map-sdk = { module = "com.naver.maps:map-sdk", version.ref = "mapSdk" } naver-map-compose = { module = "io.github.fornewid:naver-map-compose", version.ref = "naverMapCompose" } naver-map-location = { module = "io.github.fornewid:naver-map-location", version.ref = "naverMapLocation" } play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "playServicesLocation" } +posthog-android = { group = "com.posthog", name = "posthog-android", version.ref = "posthog" } [plugins] android-application = { id = "com.android.application", version.ref = "android" } From 6b51c4a1e5f5992468f23b9f56587ee6bfc68c6d Mon Sep 17 00:00:00 2001 From: PeraSite Date: Mon, 15 Dec 2025 19:53:38 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20PostHog=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 12 ++++++++++ app/src/main/java/com/eatssu/android/App.kt | 26 ++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5cdade06..d87d8bc4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -59,6 +59,12 @@ android { buildConfigField("String", "NAVER_MAPS_CLIENT_ID", "\"$naverMapsClientID\"") manifestPlaceholders["NAVER_MAPS_CLIENT_ID"] = naverMapsClientID + val postHogApiKey: String = p.getProperty("POSTHOG_API_KEY") + buildConfigField("String", "POSTHOG_API_KEY", "\"$postHogApiKey\"") + + val postHogHost: String = p.getProperty("POSTHOG_HOST") + buildConfigField("String", "POSTHOG_HOST", "\"$postHogHost\"") + isShrinkResources = true isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") @@ -82,6 +88,12 @@ android { buildConfigField("String", "NAVER_MAPS_CLIENT_ID", "\"$naverMapsClientID\"") manifestPlaceholders["NAVER_MAPS_CLIENT_ID"] = naverMapsClientID + val postHogApiKey: String = p.getProperty("POSTHOG_API_KEY") + buildConfigField("String", "POSTHOG_API_KEY", "\"$postHogApiKey\"") + + val postHogHost: String = p.getProperty("POSTHOG_HOST") + buildConfigField("String", "POSTHOG_HOST", "\"$postHogHost\"") + isMinifyEnabled = false } } diff --git a/app/src/main/java/com/eatssu/android/App.kt b/app/src/main/java/com/eatssu/android/App.kt index 118d63d2..59ae1411 100644 --- a/app/src/main/java/com/eatssu/android/App.kt +++ b/app/src/main/java/com/eatssu/android/App.kt @@ -11,6 +11,8 @@ import com.google.firebase.analytics.ktx.analytics import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.ktx.Firebase import com.kakao.sdk.common.KakaoSdk +import com.posthog.android.PostHogAndroid +import com.posthog.android.PostHogAndroidConfig import dagger.hilt.android.HiltAndroidApp import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -35,7 +37,7 @@ class App : Application(), Configuration.Provider { super.onCreate() FirebaseApp.initializeApp(this) - KakaoSdk.init(this,BuildConfig.KAKAO_NATIVE_APP_KEY) + KakaoSdk.init(this, BuildConfig.KAKAO_NATIVE_APP_KEY) if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) @@ -47,21 +49,39 @@ class App : Application(), Configuration.Provider { } collectTokenState() + setupPostHog() } /** 토큰 상태를 application에서 감지하여 TokenEventBus에 전달 */ - private fun collectTokenState(){ + private fun collectTokenState() { appScope.launch { TokenStateManager.state.collect { state -> if (state == TokenState.EXPIRED) { TokenEventBus.notifyTokenExpired() - } else if(state == TokenState.ERROR) { + } else if (state == TokenState.ERROR) { TokenEventBus.notifyServerError() } } } } + private fun setupPostHog() { + // Create a PostHog Config with the given API key and host + val config = PostHogAndroidConfig( + apiKey = BuildConfig.POSTHOG_API_KEY, + host = BuildConfig.POSTHOG_HOST, + ).apply { + sessionReplay = true + sessionReplayConfig.maskAllTextInputs = false + sessionReplayConfig.maskAllImages = false + sessionReplayConfig.screenshot = true + } + + + // Setup PostHog with the given Context and Config + PostHogAndroid.setup(this, config) + } + override val workManagerConfiguration: Configuration get() = Configuration.Builder() .setWorkerFactory(workerFactory) From 7d3deb60db1eaa56cd400087b43dfcbaa6dcfce9 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 23 Dec 2025 09:23:38 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20PostHog=20=EA=B4=80=EB=A0=A8=20loca?= =?UTF-8?q?l=20properties=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 48da04aa..0511cc74 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -40,12 +40,16 @@ jobs: PROD_BASE_URL: ${{ secrets.PROD_BASE_URL }} KAKAO_APP_KEY: ${{ secrets.KAKAO_NATIVE_APP_KEY }} NAVER_MAPS_CLIENT_ID: ${{ secrets.NAVER_MAPS_CLIENT_ID }} + POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }} + POSTHOG_HOST: ${{ secrets.POSTHOG_HOST }} run: | echo DEV_BASE_URL=\"$DEV_BASE_URL\" >> local.properties echo PROD_BASE_URL=\"$PROD_BASE_URL\" >> local.properties echo KAKAO_NATIVE_APP_KEY=$KAKAO_NATIVE_APP_KEY >> local.properties echo NAVER_MAPS_CLIENT_ID=$NAVER_MAPS_CLIENT_ID >> local.properties + echo POSTHOG_API_KEY=$POSTHOG_API_KEY >> local.properties + echo POSTHOG_HOST=$POSTHOG_HOST >> local.properties - name: Generate google-services.json run: | From 08a082f73a211599625ded0422c3aa3b8fb42bf3 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Tue, 23 Dec 2025 09:25:11 +0900 Subject: [PATCH 4/4] =?UTF-8?q?chore:=20Debug=20=EB=AA=A8=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=EB=A7=8C=20=EB=A7=88=EC=8A=A4=ED=82=B9=20?= =?UTF-8?q?=EB=81=84=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/eatssu/android/App.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/App.kt b/app/src/main/java/com/eatssu/android/App.kt index 59ae1411..25adc89f 100644 --- a/app/src/main/java/com/eatssu/android/App.kt +++ b/app/src/main/java/com/eatssu/android/App.kt @@ -72,9 +72,11 @@ class App : Application(), Configuration.Provider { host = BuildConfig.POSTHOG_HOST, ).apply { sessionReplay = true - sessionReplayConfig.maskAllTextInputs = false - sessionReplayConfig.maskAllImages = false sessionReplayConfig.screenshot = true + if (BuildConfig.DEBUG) { + sessionReplayConfig.maskAllTextInputs = false + sessionReplayConfig.maskAllImages = false + } }