diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 48da04aaa..0511cc74f 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: | diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1337bab20..d87d8bc4d 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 } } @@ -238,6 +250,9 @@ dependencies { // 현재 위치 정보 implementation(libs.play.services.location) + // PostHog + implementation(libs.posthog.android) + } kapt { diff --git a/app/src/main/java/com/eatssu/android/App.kt b/app/src/main/java/com/eatssu/android/App.kt index 118d63d22..25adc89ff 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,41 @@ 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.screenshot = true + if (BuildConfig.DEBUG) { + sessionReplayConfig.maskAllTextInputs = false + sessionReplayConfig.maskAllImages = false + } + } + + + // Setup PostHog with the given Context and Config + PostHogAndroid.setup(this, config) + } + override val workManagerConfiguration: Configuration get() = Configuration.Builder() .setWorkerFactory(workerFactory) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 253683fd2..d8b71fc56 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" }