pid를 심어놓은 광고를 타고 들어온 경우 항상 AppLaunch 이벤트를 실행하는 코드 추가
This commit is contained in:
		| @@ -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" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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 | ||||
|         } | ||||
| } | ||||
|   | ||||
| @@ -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( | ||||
|   | ||||
| @@ -202,6 +202,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>(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>(ActivityMainBinding::infl | ||||
|                 deInitMiniPlayer() | ||||
|             } | ||||
|  | ||||
|             handler.postDelayed({ executeDeeplink(intent) }, 500) | ||||
|             handler.postDelayed({ executeDeeplink(intent) }, 1000) | ||||
|         } | ||||
|  | ||||
|         onBackPressedDispatcher.addCallback { | ||||
| @@ -338,7 +348,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl | ||||
|         val deepLinkValueId = SharedPreferenceManager.marketingLinkValueId | ||||
|  | ||||
|         if (deepLinkValue.isNotBlank() && deepLinkValueId > 0) { | ||||
|             updatePidAndGaid() | ||||
|             when (deepLinkValue) { | ||||
|                 "series" -> { | ||||
|                     startActivity( | ||||
|   | ||||
| @@ -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({}, {}) | ||||
|         ) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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<ApiResponse<Any>> | ||||
| } | ||||
| @@ -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 | ||||
| ) | ||||
| @@ -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)) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user