Skip to content

Commit dc95f59

Browse files
authored
feat: 스토어 최신 버전 체크 로직 구현 (#33)
* feat: 앱 최신 버전 관련 remote config 로직 구현 * feat: 최신 버전 여부 체크 후 스토어 연결 다이얼로그 표시 로직 구현 * feat: 스토어 연결 다이얼로그 취소 가능하도록 수정
1 parent 678b4ee commit dc95f59

File tree

5 files changed

+57
-1
lines changed

5 files changed

+57
-1
lines changed

app/src/main/java/com/woozoo/menumonya/MainActivity.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.woozoo.menumonya
22

33
import android.Manifest
4+
import android.content.ActivityNotFoundException
45
import android.content.Intent
56
import android.content.Intent.ACTION_VIEW
67
import android.content.pm.PackageManager
@@ -139,6 +140,22 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
139140
binding.loadingView.visibility = View.GONE
140141
}
141142
}
143+
is Event.ShowUpdateDialog -> {
144+
AlertDialog.Builder(this).apply {
145+
setMessage(resources.getString(R.string.latest_app_version_update_message))
146+
setCancelable(true)
147+
setPositiveButton("확인") { dialog, _ ->
148+
try {
149+
startActivity(Intent(ACTION_VIEW,
150+
Uri.parse(resources.getString(R.string.google_play_store_link))))
151+
} catch (e: ActivityNotFoundException) {
152+
startActivity(Intent(ACTION_VIEW,
153+
Uri.parse(resources.getString(R.string.google_play_store_link_web))))
154+
}
155+
dialog.dismiss()
156+
}
157+
}.create().show()
158+
}
142159
}
143160

144161
override fun onStart() {
@@ -149,6 +166,8 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
149166
override fun onResume() {
150167
super.onResume()
151168
binding.naverMap.onResume()
169+
170+
viewModel.checkLatestAppVersion()
152171
}
153172

154173
override fun onPause() {

app/src/main/java/com/woozoo/menumonya/MainViewModel.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.woozoo.menumonya.Constants.Companion.MAP_MIN_ZOOM
2121
import com.woozoo.menumonya.model.Restaurant
2222
import com.woozoo.menumonya.repository.FireStoreRepository.getRestaurantInLocation
2323
import com.woozoo.menumonya.repository.RemoteConfigRepository.getFeedbackUrlConfig
24+
import com.woozoo.menumonya.repository.RemoteConfigRepository.getLatestAppVersionConfig
2425
import com.woozoo.menumonya.util.LocationUtils.Companion.requestLocationUpdateOnce
2526
import com.woozoo.menumonya.util.PermissionUtils.Companion.isGpsPermissionAllowed
2627
import com.woozoo.menumonya.util.PermissionUtils.Companion.isLocationPermissionAllowed
@@ -201,6 +202,15 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
201202
}
202203
}
203204

205+
fun checkLatestAppVersion() {
206+
val latestAppVersion = getLatestAppVersionConfig()
207+
val currentAppVersion = BuildConfig.VERSION_CODE
208+
209+
if (latestAppVersion.toInt() > currentAppVersion) {
210+
showUpdateDialog()
211+
}
212+
}
213+
204214
fun getFeedbackUrl(): String {
205215
return getFeedbackUrlConfig()
206216
}
@@ -232,6 +242,10 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
232242
event(Event.ShowLoading(visibility))
233243
}
234244

245+
private fun showUpdateDialog() {
246+
event(Event.ShowUpdateDialog(""))
247+
}
248+
235249
sealed class Event {
236250
/**
237251
* MainActivity에 전달할 이벤트를 이곳에 정
@@ -245,5 +259,6 @@ class MainViewModel(application: Application): AndroidViewModel(Application()) {
245259
data class ShowGpsPermissionAlert(val data: String): Event()
246260
data class MoveToCurrentLocation(val data: String): Event()
247261
data class ShowLoading(val visibility: Boolean): Event()
262+
data class ShowUpdateDialog(val data: String): Event()
248263
}
249264
}

app/src/main/java/com/woozoo/menumonya/repository/RemoteConfigRepository.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,14 @@ object RemoteConfigRepository {
6969

7070
return remoteConfig.getString("REPORT_MENU_URL")
7171
}
72+
73+
fun getLatestAppVersionConfig(): Long {
74+
val remoteConfig = FirebaseRemoteConfig.getInstance()
75+
76+
return if (BuildConfig.DEBUG) {
77+
remoteConfig.getLong("LATEST_APP_VERSION_AOS_DEV")
78+
} else {
79+
remoteConfig.getLong("LATEST_APP_VERSION_AOS_PROD")
80+
}
81+
}
7282
}

app/src/main/res/values/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<resources>
1+
<resources xmlns:tools="http://schemas.android.com/tools">
22
<string name="app_name">메뉴머냐</string>
33
<string name="app_name_debug">[개발] 메뉴머냐</string>
44

@@ -12,4 +12,8 @@
1212
<string name="location_permission_dialog_description">편리한 뷔페 검색을 위해 위치 서비스 사용에 동의 하시겠습니까?</string>
1313
<string name="location_permission_denied_toast">위치 권한을 허용해주세요</string>
1414
<string name="location_permission_denied_forever_toast">[설정 > 애플리케이션 > 메뉴머냐]에서 위치 권한을 허용해주세요</string>
15+
16+
<string name="latest_app_version_update_message">안정적인 서비스 이용을 위해 앱을 업데이트 해주세요.</string>
17+
<string name="google_play_store_link">market://details?id=com.woozoo.menumonya</string>
18+
<string name="google_play_store_link_web">https://play.google.com/store/apps/details?id=com.woozoo.menumonya</string>
1519
</resources>

app/src/main/res/xml/remote_config_defaults.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,13 @@
2828
<key>REPORT_MENU_URL</key>
2929
<value>https://open.kakao.com/o/gKPs3pif</value>
3030
</entry>
31+
<entry>
32+
<key>LATEST_APP_VERSION_AOS_DEV</key>
33+
<value>1</value>
34+
</entry>
35+
<entry>
36+
<key>LATEST_APP_VERSION_AOS_PROD</key>
37+
<value>1</value>
38+
</entry>
3139

3240
</defaults>

0 commit comments

Comments
 (0)