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)) +}