Skip to content

Commit 2e0f841

Browse files
authored
hotfix: 토큰 401 에러 해결 (#563)
* hotfix: 뷰모델에 error 및 강제업데이트 프로퍼티 추가 * fix: 스플래시 내 로직 수정(자동 로그인, 강제업데이트, 401 에러) * build: 1.0.9 버전 업데이트 * build: 버전코드 수정 ( 9 -> 10011 )
1 parent 4d13842 commit 2e0f841

File tree

3 files changed

+87
-38
lines changed

3 files changed

+87
-38
lines changed

app/build.gradle.kts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,29 @@ android {
1818
applicationId = "com.into.websoso"
1919
minSdk = 30
2020
targetSdk = 34
21-
versionCode = 10008
22-
versionName = "1.0.8"
23-
24-
buildConfigField("String", "BASE_URL", gradleLocalProperties(rootDir).getProperty("base.url"))
25-
buildConfigField("String", "S3_BASE_URL", gradleLocalProperties(rootDir).getProperty("s3.url"))
26-
buildConfigField("String", "KAKAO_APP_KEY", gradleLocalProperties(rootDir).getProperty("kakao.app.key"))
27-
buildConfigField("String", "AMPLITUDE_KEY", gradleLocalProperties(rootDir).getProperty("amplitude.key"))
21+
versionCode = 10011
22+
versionName = "1.0.9"
23+
24+
buildConfigField(
25+
"String",
26+
"BASE_URL",
27+
gradleLocalProperties(rootDir).getProperty("base.url")
28+
)
29+
buildConfigField(
30+
"String",
31+
"S3_BASE_URL",
32+
gradleLocalProperties(rootDir).getProperty("s3.url")
33+
)
34+
buildConfigField(
35+
"String",
36+
"KAKAO_APP_KEY",
37+
gradleLocalProperties(rootDir).getProperty("kakao.app.key")
38+
)
39+
buildConfigField(
40+
"String",
41+
"AMPLITUDE_KEY",
42+
gradleLocalProperties(rootDir).getProperty("amplitude.key")
43+
)
2844

2945
manifestPlaceholders["kakaoAppKey"] = gradleLocalProperties(rootDir)
3046
.getProperty("kakao.app.key").replace("\"", "")

app/src/main/java/com/into/websoso/ui/splash/SplashActivity.kt

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.into.websoso.databinding.ActivityLoginBinding
99
import com.into.websoso.ui.login.LoginActivity
1010
import com.into.websoso.ui.main.MainActivity
1111
import com.into.websoso.ui.splash.dialog.MinimumVersionDialogFragment
12+
import com.kakao.sdk.user.UserApiClient
1213
import dagger.hilt.android.AndroidEntryPoint
1314
import kotlinx.coroutines.delay
1415
import kotlinx.coroutines.launch
@@ -21,27 +22,42 @@ class SplashActivity : BaseActivity<ActivityLoginBinding>(R.layout.activity_spla
2122
super.onCreate(savedInstanceState)
2223

2324
setupObserver()
24-
splashViewModel.autoLogin()
2525
}
2626

2727
private fun setupObserver() {
28+
splashViewModel.isUpdateRequired.observe(this) { isUpdateRequired ->
29+
if (isUpdateRequired) {
30+
showMinimumVersionDialog()
31+
return@observe
32+
}
33+
splashViewModel.updateMyProfile()
34+
}
35+
36+
splashViewModel.error.observe(this) { isError ->
37+
if (isError) {
38+
UserApiClient.instance.logout {
39+
startActivity(LoginActivity.getIntent(this))
40+
}
41+
}
42+
}
43+
2844
splashViewModel.isAutoLogin.observe(this) { isAutoLogin ->
2945
lifecycleScope.launch {
3046
delay(1000L)
31-
splashViewModel.updateMinimumVersion { isUpdateRequired ->
32-
if (isUpdateRequired) {
33-
showMinimumVersionDialog()
34-
} else {
35-
when (isAutoLogin) {
36-
true -> navigateToMainActivity()
37-
false -> navigateToLoginActivity()
38-
}
39-
}
47+
when (isAutoLogin) {
48+
true -> navigateToMainActivity()
49+
false -> navigateToLoginActivity()
4050
}
4151
}
4252
}
4353
}
4454

55+
private fun showMinimumVersionDialog() {
56+
val dialog = MinimumVersionDialogFragment.newInstance()
57+
dialog.isCancelable = false
58+
dialog.show(supportFragmentManager, MINIMUM_VERSION_TAG)
59+
}
60+
4561
private fun navigateToMainActivity() {
4662
startActivity(MainActivity.getIntent(this, true))
4763
finish()
@@ -52,12 +68,6 @@ class SplashActivity : BaseActivity<ActivityLoginBinding>(R.layout.activity_spla
5268
finish()
5369
}
5470

55-
private fun showMinimumVersionDialog() {
56-
val dialog = MinimumVersionDialogFragment.newInstance()
57-
dialog.isCancelable = false
58-
dialog.show(supportFragmentManager, MINIMUM_VERSION_TAG)
59-
}
60-
6171
companion object {
6272
private const val MINIMUM_VERSION_TAG = "MinimumVersionDialog"
6373
}

app/src/main/java/com/into/websoso/ui/splash/SplashViewModel.kt

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
77
import com.into.websoso.data.repository.AuthRepository
8+
import com.into.websoso.data.repository.UserRepository
89
import com.into.websoso.data.repository.VersionRepository
910
import dagger.hilt.android.lifecycle.HiltViewModel
1011
import kotlinx.coroutines.launch
@@ -14,12 +15,46 @@ import javax.inject.Inject
1415
class SplashViewModel @Inject constructor(
1516
private val authRepository: AuthRepository,
1617
private val versionRepository: VersionRepository,
18+
private val userRepository: UserRepository,
1719
) : ViewModel() {
20+
private val _isUpdateRequired: MutableLiveData<Boolean> = MutableLiveData()
21+
val isUpdateRequired: LiveData<Boolean> get() = _isUpdateRequired
1822

19-
private var _isAutoLogin = MutableLiveData(false)
23+
private var _isAutoLogin: MutableLiveData<Boolean> = MutableLiveData()
2024
val isAutoLogin: LiveData<Boolean> get() = _isAutoLogin
2125

22-
fun autoLogin() {
26+
private var _error: MutableLiveData<Boolean> = MutableLiveData(false)
27+
val error: LiveData<Boolean> get() = _error
28+
29+
init {
30+
checkAndUpdateVersion()
31+
}
32+
33+
private fun checkAndUpdateVersion() {
34+
viewModelScope.launch {
35+
runCatching {
36+
versionRepository.isUpdateRequired()
37+
}.onSuccess { isRequired ->
38+
_isUpdateRequired.value = isRequired
39+
}
40+
}
41+
}
42+
43+
// 토큰 만료 확인용 - 추후 로직 수정 필요
44+
fun updateMyProfile() {
45+
viewModelScope.launch {
46+
runCatching {
47+
userRepository.fetchMyProfile()
48+
}.onSuccess {
49+
autoLogin()
50+
}.onFailure {
51+
authRepository.clearTokens()
52+
_error.value = true
53+
}
54+
}
55+
}
56+
57+
private fun autoLogin() {
2358
viewModelScope.launch {
2459
if (authRepository.isAutoLogin) {
2560
runCatching {
@@ -34,16 +69,4 @@ class SplashViewModel @Inject constructor(
3469
}
3570
}
3671
}
37-
38-
fun updateMinimumVersion(onUpdateRequired: (Boolean) -> Unit) {
39-
viewModelScope.launch {
40-
runCatching {
41-
versionRepository.isUpdateRequired()
42-
}.onSuccess { isUpdateRequired ->
43-
onUpdateRequired(isUpdateRequired)
44-
}.onFailure {
45-
onUpdateRequired(false)
46-
}
47-
}
48-
}
49-
}
72+
}

0 commit comments

Comments
 (0)