1. 강의 중에서, 내가 선택한 유저가 나를 좋아요 했는지 알아보기 위한 로직을 작성하는 부분이 있었다. firebase를 이용하기 위해 ValueEventListener 내의 onDataChange()를 오버라이드 하는 내용이었는데 처음에 강사 분은 이렇게 작성하셨다.
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (dataModel in dataSnapshot.children) {
val likeUserKey = dataModel.key.toString()
if(likeUserKey.equals(uid)) {
Toast.makeText(this@MyLikeListActivity, "매칭이 되었습니다.", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this@MyLikeListActivity, "매칭이 되지 않았습니다.", Toast.LENGTH_LONG).show()
}
}
}
이렇게 작성하자 좋아요 기록이 없는 상대에 대해 Toast 메시지가 뜨지 않는 버그가 있었고, 강사 분은 다음과 같이 디버깅했다.
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if(dataSnapshot.children.count() == 0) {
Toast.makeText(this@MyLikeListActivity, "매칭이 되지 않았습니다.", Toast.LENGTH_LONG).show()
} else {
for (dataModel in dataSnapshot.children) {
val likeUserKey = dataModel.key.toString()
if(likeUserKey.equals(uid)) {
Toast.makeText(this@MyLikeListActivity, "매칭이 되었습니다.", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this@MyLikeListActivity, "매칭이 되지 않았습니다.", Toast.LENGTH_LONG).show()
}
}
}
}
나도 이 이전에 미리 혼자 디버깅을 해보았는데, 나와는 접근 방식이 좀 다른 것 같았다.
저런 식으로 처리하게 되면, for 루프를 도는 내내 uid와 likeUserKey의 비교가 일어나고 올바르지 않은 Toast 메시지가 계속 작성될 것 같다.
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
var check = false
for (dataModel in dataSnapshot.children){
val likeUserKey = dataModel.key.toString()
if(likeUserKey.equals(myUid)){
Toast.makeText(this@MyLikeListActivity, "매칭이 되었습니다.", Toast.LENGTH_SHORT).show()
check = true
break
}
}
if(!check){
Toast.makeText(this@MyLikeListActivity, "매칭이 되지 않았습니다.", Toast.LENGTH_SHORT).show()
}
}
나는 위와 같이 작성했다. 플래그를 이용하는 고전적인 해결 방법인데, 아무래도 이렇게 해야 for 루프 내내 myUid와 일치하는 값을 찾기 전까지 매칭이 되지 않았다는 Toast 메시지가 뜨는 등의 버그가 없을 거 같다.
2. 생각보다 FCM을 이용한 메시지가 도달하는 시간이 많이 느리다. 특히 기기 실행 후 처음 받는 메시지에 대한 지연시간이 꽤나 길다. 어떤 임의의 핸드셰이킹 과정이 있거나 디바이스가 푸쉬를 받을 수 있는 상태인지 확인하는 텀이 긴 것 같다.
파이어베이스가 편의성을 정말 많이 제공해주는 도구이긴 하지만, 결국에는 서버가 완전히 입맛대로 동작하게 하려면 직접 짜는 방법 밖에 없나 보다.
나중에 혼자 프로젝트를 할 때 여유가 되면 django나 php로 간단한 서버를 직접 짜서 돌려볼까싶다. 아니면 지금부터 스프링을 좀 병행해야 하나..
'Dev > 안드로이드' 카테고리의 다른 글
[안드로이드 짤막공부] 23.08.21 (0) | 2023.08.22 |
---|---|
[안드로이드 짤막공부] 23.08.01 (0) | 2023.08.01 |
[안드로이드 짤막공부] 23.07.20 (0) | 2023.07.21 |
[안드로이드 짤막 공부] 23.07.17 (0) | 2023.07.18 |
[안드로이드 짤막 공부] 23.07.16 (1) | 2023.07.17 |