-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
부산대 Android_이지은 6주차 2단계 #59
base: jieunyume
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지난 6주동안 수고 많으셨어요 지은님! 1주차부터 지금까지 주차를 거듭하면서 안드로이드에 더욱 많은 관심이 생겼다고 하니 제가 뭔가 모를 뿌듯함을 느끼게 됩니다. ㅎㅎ
멘토링 때 말씀드렸던 것처럼 사이드 프로젝트와 best practices, 공식문서 등을 통해서 학습하신다면 더욱 더 성장하실 수 있을 것 같습니다 :)
파이어베이스 Remote Config를 설정하는 부분에서 MVVM을 잘 지켰는지 확인 부탁드립니다.
remote config 를 직접적으로 넘기기 보다는 isOnService 자체를 구독하는 편이 좋을 것 같아요. Observer pattern 을 사용하시는 것에 조금 더 익숙해지시면 와닿을 것 같네요!
Splash Screen 라이브러리를 사용하려다가 서버 에러메세지 TextView를 띄우기가 복잡하여서 SplashActivity 를 새로 만들었습니다. Splash Screen 라이브러리를 사용하면서 Splash 화면을 Custom할 수 있는 방법이 혹시 있는지 궁금합니다.
이 문서를 확인해보시면 좋을 것 같네요 👍
저는 이 상수들을 혹시나 보안과 조금이라도 관련있을까봐 local.properties에 저장해두고 BuildConfig 로 가져와서 사용했는데, 로컬 말고 strings.xml 파일에 넣어서 사용해도 되는 친구들일까요?
local properties 에서 관리해도 좋고, strings.xml 에서 관리되어도 좋아요. 해당 key value 는 flavor 에 따라 변경될 일도 없기 때문에 어디에서 관리되든 괜찮습니다 :)
@Singleton | ||
@Provides | ||
fun provideFirebaseRemoteConfig(): FirebaseRemoteConfig { | ||
val remoteConfig = Firebase.remoteConfig | ||
return initRemoteConfig(remoteConfig) | ||
} | ||
|
||
fun initRemoteConfig(remoteConfig: FirebaseRemoteConfig): FirebaseRemoteConfig { | ||
val configSettings = remoteConfigSettings { | ||
minimumFetchIntervalInSeconds = 0 // 바로바로 가져옴 | ||
} | ||
remoteConfig.setConfigSettingsAsync(configSettings) | ||
remoteConfig.fetchAndActivate() | ||
.addOnCompleteListener { | ||
if (it.isSuccessful) { | ||
Log.d("jieun", "Successful ${it.result}") | ||
} else { | ||
Log.d("jieun", "Failed ${it.result}") | ||
} | ||
}.addOnFailureListener { | ||
Log.d("jieun", "Exception ${it.message}") | ||
} | ||
return remoteConfig | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
apply 나 also 를 적절하게 사용하면 좋습니다!
@Singleton | |
@Provides | |
fun provideFirebaseRemoteConfig(): FirebaseRemoteConfig { | |
val remoteConfig = Firebase.remoteConfig | |
return initRemoteConfig(remoteConfig) | |
} | |
fun initRemoteConfig(remoteConfig: FirebaseRemoteConfig): FirebaseRemoteConfig { | |
val configSettings = remoteConfigSettings { | |
minimumFetchIntervalInSeconds = 0 // 바로바로 가져옴 | |
} | |
remoteConfig.setConfigSettingsAsync(configSettings) | |
remoteConfig.fetchAndActivate() | |
.addOnCompleteListener { | |
if (it.isSuccessful) { | |
Log.d("jieun", "Successful ${it.result}") | |
} else { | |
Log.d("jieun", "Failed ${it.result}") | |
} | |
}.addOnFailureListener { | |
Log.d("jieun", "Exception ${it.message}") | |
} | |
return remoteConfig | |
} | |
@Singleton | |
@Provides | |
fun provideFirebaseRemoteConfig(): FirebaseRemoteConfig { | |
return Firebase.remoteConfig.apply { | |
initRemoteConfig(this) | |
} | |
} | |
fun initRemoteConfig(remoteConfig: FirebaseRemoteConfig) { | |
val configSettings = remoteConfigSettings { | |
minimumFetchIntervalInSeconds = 0 // 바로바로 가져옴 | |
} | |
remoteConfig.setConfigSettingsAsync(configSettings) | |
remoteConfig.fetchAndActivate() | |
.addOnCompleteListener { | |
if (it.isSuccessful) { | |
Log.d("jieun", "Successful ${it.result}") | |
} else { | |
Log.d("jieun", "Failed ${it.result}") | |
} | |
}.addOnFailureListener { | |
Log.d("jieun", "Exception ${it.message}") | |
} | |
} |
Handler(Looper.getMainLooper()).postDelayed({ | ||
// 일정 시간이 지나면 MapActivity로 이동 | ||
val intent = Intent(this, MapActivity::class.java) | ||
startActivity(intent) | ||
finish() | ||
|
||
}, 1000) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
coroutine 도 사용할 수 있으니, coroutine 을 통해서 delay 하는 것이 어떨까요?!
fun getRemoteConfig(): RemoteConfig { | ||
return RemoteConfig( | ||
serviceState = firebaseRemoteConfig.getString(BuildConfig.SERVICE_STATE), | ||
serviceMessage = firebaseRemoteConfig.getString(BuildConfig.SERVICE_MESSAGE) | ||
) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
첫 실행시 firebase remote config 가 default 값으로 처리되거나 빈값으로 내려올 것 같아요. remote config fetch 를 해오는 메소드를 추가해보면 어떨까요?
val remoteConfigLiveData: LiveData<RemoteConfig> get() = _remoteConfigLiveData | ||
|
||
init { | ||
_remoteConfigLiveData.value = remoteConfigRepository.getRemoteConfig() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 때 FirebaseRemoteConfig 가 초기화 되어있지 않다면 무조건 빈 값으로 내려올 거에요. 그렇게 되면 isOnService 가 false 를 내려보내줄 수 있어요.
private val _remoteConfigLiveData = MutableLiveData<RemoteConfig>() | ||
val remoteConfigLiveData: LiveData<RemoteConfig> get() = _remoteConfigLiveData |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
coroutine 도 사용하시니, LiveData 대신 StateFlow 를 사용해보시는 것은 어떨까요?
실행 화면
백그라운드 알림
6.-.mp4
포그라운드 알림
6.-.mp4
어려웠던 점
중점적으로 봐주셨으면 하는 부분
저는 이 상수들을 혹시나 보안과 조금이라도 관련있을까봐 local.properties에 저장해두고 BuildConfig 로 가져와서 사용했는데, 로컬 말고 strings.xml 파일에 넣어서 사용해도 되는 친구들일까요?