From 4d87544b7b7b214a449abc741f88cac9602f4c06 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 26 Mar 2025 16:37:49 +0900 Subject: [PATCH] =?UTF-8?q?pid=EB=A5=BC=20=EC=8B=AC=EC=96=B4=EB=86=93?= =?UTF-8?q?=EC=9D=80=20=EA=B4=91=EA=B3=A0=EB=A5=BC=20=ED=83=80=EA=B3=A0=20?= =?UTF-8?q?=EB=93=A4=EC=96=B4=EC=98=A8=20=EA=B2=BD=EC=9A=B0=20=ED=95=AD?= =?UTF-8?q?=EC=83=81=20AppLaunch=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=ED=95=98=EB=8A=94=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/app/SodaLiveApp.kt | 2 ++ .../kr/co/vividnext/sodalive/common/Constants.kt | 1 + .../sodalive/common/SharedPreferenceManager.kt | 6 ++++++ .../main/java/kr/co/vividnext/sodalive/di/AppDI.kt | 6 +++++- .../kr/co/vividnext/sodalive/main/MainActivity.kt | 13 +++++++++++-- .../kr/co/vividnext/sodalive/main/MainViewModel.kt | 11 +++++++++++ .../co/vividnext/sodalive/tracking/AdTrackingApi.kt | 11 +++++++++++ .../sodalive/tracking/AdTrackingAppLaunchRequest.kt | 9 +++++++++ .../sodalive/tracking/AdTrackingRepository.kt | 5 +++++ 9 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingApi.kt create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingAppLaunchRequest.kt create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingRepository.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt index a0061f2..61cfc9d 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt @@ -71,6 +71,8 @@ class SodaLiveApp : Application() { AppsFlyerLib.getInstance().subscribeForDeepLink { deepLinkResult -> when (deepLinkResult.status) { DeepLinkResult.Status.FOUND -> { + SharedPreferenceManager.alreadyTrackingAppLaunch = false + val deepLink = deepLinkResult.deepLink SharedPreferenceManager.marketingLinkValue = deepLink?.getStringValue( "deep_link_value" diff --git a/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt b/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt index c07a364..d2e7d13 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt @@ -26,6 +26,7 @@ object Constants { const val PREF_MARKETING_UTM_CAMPAIGN = "pref_marketing_utm_campaign" const val PREF_MARKETING_LINK_VALUE = "pref_marketing_link_value" const val PREF_MARKETING_LINK_VALUE_ID = "pref_marketing_link_value_id" + const val PREF_ALREADY_TRACKING_APP_LAUNCH = "pref_already_tracking_app_launch" const val EXTRA_CAN = "extra_can" const val EXTRA_DATA = "extra_data" diff --git a/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt b/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt index 267fc56..660fd53 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/common/SharedPreferenceManager.kt @@ -210,4 +210,10 @@ object SharedPreferenceManager { set(value) { sharedPreferences[Constants.PREF_MARKETING_LINK_VALUE_ID] = value } + + var alreadyTrackingAppLaunch: Boolean + get() = sharedPreferences[Constants.PREF_ALREADY_TRACKING_APP_LAUNCH, true] + set(value) { + sharedPreferences[Constants.PREF_ALREADY_TRACKING_APP_LAUNCH] = value + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 3f81e1a..f713617 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -150,6 +150,8 @@ import kr.co.vividnext.sodalive.settings.signout.SignOutViewModel import kr.co.vividnext.sodalive.settings.terms.TermsApi import kr.co.vividnext.sodalive.settings.terms.TermsRepository import kr.co.vividnext.sodalive.settings.terms.TermsViewModel +import kr.co.vividnext.sodalive.tracking.AdTrackingApi +import kr.co.vividnext.sodalive.tracking.AdTrackingRepository import kr.co.vividnext.sodalive.user.UserApi import kr.co.vividnext.sodalive.user.UserRepository import kr.co.vividnext.sodalive.user.UserViewModel @@ -226,6 +228,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { single { ApiBuilder().build(get(), CategoryApi::class.java) } single { ApiBuilder().build(get(), PlaylistApi::class.java) } single { ApiBuilder().build(get(), AuditionApi::class.java) } + single { ApiBuilder().build(get(), AdTrackingApi::class.java) } } private val viewModelModule = module { @@ -233,7 +236,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { SignUpViewModel(get()) } viewModel { TermsViewModel(get()) } viewModel { FindPasswordViewModel(get()) } - viewModel { MainViewModel(get(), get(), get(), get()) } + viewModel { MainViewModel(get(), get(), get(), get(), get()) } viewModel { LiveViewModel(get(), get(), get(), get()) } viewModel { MyPageViewModel(get(), get()) } viewModel { CanStatusViewModel(get()) } @@ -359,6 +362,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { factory { AudioContentMainTabReplayRepository(get()) } factory { AudioContentMainTabFreeRepository(get()) } factory { OriginalAudioDramaContentAllRepository(get()) } + factory { AdTrackingRepository(get()) } } private val moduleList = listOf( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt index 677d6fc..dcb7021 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt @@ -202,6 +202,16 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl checkPermissions() + handler.postDelayed({ + val alreadyTrackingAppLaunch = SharedPreferenceManager.alreadyTrackingAppLaunch + val pid = SharedPreferenceManager.marketingPid + + if (!alreadyTrackingAppLaunch && pid.isNotBlank()) { + SharedPreferenceManager.alreadyTrackingAppLaunch = true + viewModel.adTrackingAppLaunch(pid = pid) + } + }, 1000) + if ( SharedPreferenceManager.token.isNotBlank() && SharedPreferenceManager.token.length > 10 @@ -219,7 +229,7 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl deInitMiniPlayer() } - handler.postDelayed({ executeDeeplink(intent) }, 500) + handler.postDelayed({ executeDeeplink(intent) }, 1000) } onBackPressedDispatcher.addCallback { @@ -338,7 +348,6 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl val deepLinkValueId = SharedPreferenceManager.marketingLinkValueId if (deepLinkValue.isNotBlank() && deepLinkValueId > 0) { - updatePidAndGaid() when (deepLinkValue) { "series" -> { startActivity( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/main/MainViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/main/MainViewModel.kt index 8f7953c..31f335b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/main/MainViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/main/MainViewModel.kt @@ -16,6 +16,7 @@ import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.settings.event.EventItem import kr.co.vividnext.sodalive.settings.event.EventRepository import kr.co.vividnext.sodalive.settings.notification.UpdateNotificationSettingRequest +import kr.co.vividnext.sodalive.tracking.AdTrackingRepository import kr.co.vividnext.sodalive.tracking.FirebaseTracking import kr.co.vividnext.sodalive.tracking.NotiflyClient import kr.co.vividnext.sodalive.user.UserRepository @@ -27,6 +28,7 @@ import java.util.concurrent.Executors class MainViewModel( private val userRepository: UserRepository, private val eventRepository: EventRepository, + private val adTrackingRepository: AdTrackingRepository, private val audioContentRepository: AudioContentRepository, private val playbackTrackingRepository: PlaybackTrackingRepository ) : BaseViewModel() { @@ -222,4 +224,13 @@ class MainViewModel( } } } + + fun adTrackingAppLaunch(pid: String) { + compositeDisposable.add( + adTrackingRepository.appLaunch(pid) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({}, {}) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingApi.kt new file mode 100644 index 0000000..f0a4541 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingApi.kt @@ -0,0 +1,11 @@ +package kr.co.vividnext.sodalive.tracking + +import io.reactivex.rxjava3.core.Single +import kr.co.vividnext.sodalive.common.ApiResponse +import retrofit2.http.Body +import retrofit2.http.POST + +interface AdTrackingApi { + @POST("/ad-tracking/app-launch") + fun appLaunch(@Body request: AdTrackingAppLaunchRequest): Single> +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingAppLaunchRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingAppLaunchRequest.kt new file mode 100644 index 0000000..b9895f3 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingAppLaunchRequest.kt @@ -0,0 +1,9 @@ +package kr.co.vividnext.sodalive.tracking + +import androidx.annotation.Keep +import com.google.gson.annotations.SerializedName + +@Keep +data class AdTrackingAppLaunchRequest( + @SerializedName("pid") val pid: String +) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingRepository.kt new file mode 100644 index 0000000..8d62f2a --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/tracking/AdTrackingRepository.kt @@ -0,0 +1,5 @@ +package kr.co.vividnext.sodalive.tracking + +class AdTrackingRepository(private val api: AdTrackingApi) { + fun appLaunch(pid: String) = api.appLaunch(request = AdTrackingAppLaunchRequest(pid = pid)) +}