파이어베이스를 기반으로한 테스트용 채팅 앱구현 Android Chatting Test App based on Firebase with Kotlin(2)

앞서 말한 것처럼 DirectTalk9를 참고하여 채팅방을 만들 것이다.

이하 [기반 앱] 이라고 지칭한 것은 DirectTalk9을 의미한다.

 

(1)을 요약하면, DirectTalk9를 일단 checkout해서 실행해본 뒤,

코틀린 프로젝트를 새로 생성하여 파이어베이스와 연결만 해둔 상태이다.

새로 생성한 코틀린 프로젝트에 위 코드를 분석하여 모듈들을 만들 예정이다.

 

일단 파이어베이스 로그인 부터 구현하기 위해 module:app의 디펜던시에 아래와 같이 파이어 베이스 auth를 implement해 주었다.

그리고 기반앱에서 Login Activity.java와 activity_login.xml 을 복사한뒤 코틀린 파일로 자동 변환하였다.

 

임플멘테이션을 한뒤,

로그인 액티비티 파일의 변환과정에서 FirebaseAuth가 빨간줄인데 alt+enter를 누르면 디펜던시를 추가할수 있다.

 

그러면 Firebase에서 제공하는 AuthResult도 import할 수 있다.

 

 

로그인 버튼 이벤트 콜벡부분은 onCreate로 옮긴뒤 return으로 되어있는 부분에 대해서는 아래와 같은 코드로 바꾸었다.

 

 

 

위 코드에서 onComplete 부분은 오버라이딩 되어야하므로 fun 앞에 override 키워드를 추가해주고, 

OnCompleteListener<AuthResult>() 부분에서는 constructor가 없으니 ()를 지워준다.

 

그러면 object를 람다형식으로 바꿔주라는 recommendation이 나오는데 이때 object 근처에 커서를 갖다대고 alt+enter를 누르면 람다형식으로 코드를 변환할 수 있다.

 

위와 같은 추천 레코멘데이션도 alt + enter로 변환해주고... 하면

 

아래는 그 결과이다.

 

 

여기 Util9은 조금 있다가 정리하도록하고, signupClick도 마찬가지 방법으로 정리해준다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  signupBtn.setOnClickListener {
            if (validateForm()) {
                val id = user_id!!.text.toString()
 
                FirebaseAuth.getInstance()
                    .createUserWithEmailAndPassword(id, user_pw!!.text.toString())
                    .addOnCompleteListener { task ->
                        if (task.isSuccessful) {
                            sharedPreferences.edit().putString("user_id", id).apply()
                            val uid = FirebaseAuth.getInstance().uid
                            val userModel = UserModel()
                            userModel.setUid(uid)
                            userModel.setUserid(id)
                            userModel.setUsernm(extractIDFromEmail(id))
                            userModel.setUsermsg("...")
 
                            val db = FirebaseFirestore.getInstance()
                            db.collection("users").document(uid!!)
                                .set(userModel)
                                .addOnSuccessListener {
                                    val intent =
                                        Intent(this@LoginActivity, MainActivity::class.java)
                                    startActivity(intent)
                                    finish()
                                    Log.e("로그인액티비티 버그체크","DocumentSnapshot added with ID: $uid")
                                }
                        } else {
                            Util9.showMessage(
                                applicationContext,
                                task.exception.getMessage()
                            )
                        }
                    }
            }
        }
 

 

위는 사인업 버튼 이벤트 콜벡 부분을 코틀린으로 바꾼 것이다.

 

이제 UserModel 부분과 Util9 부분을 가져와서 헬퍼메소드들을 구현해보자.

 

 

 

 코틀린은 Static Class 대신 Object를 사용해서 바로 singleton pattern을 만들 수 있으므로  

자동변환시 나오는 internal val instance = Util9() 이 부분은 삭제한다.

자동변환하면 아래 부분만 문제가 생기는데 이는 filesize가 null 허용이기 때문이다. 이를 처리해준다.

본인은 들어오는 Long? 변수를 Long으로 바꾸었다.

 

 

위 부분은 message로 바꿔주고 String? 을 String으로 바꿔주는 작업을 아래와 같이 해준다.

 

 

이제 남은 것은 UserModel()을 가져오는 것이다. 

 

 

코드를 보았더니 위와 같다. 이는 코틀린의 Dataclass로 접근자 get, set을 정의할 수 있으므로 아래와 같이 바꾸어주었다.

 

 

코드 자동변환만 해주면 위와 같이 알아서 잘 바꾸어주었기에... 널처리에 대한 고민만 잠시 하면되겠다.

 

저렇게 변환하고 login activity에 import 하면 

아래와 같은 문제가 다시 생긴다.

 

아래와 같이 필드 접근에 대해서는 코틀린 스타일로 바꿔주면된다.

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유