[Android/Kotlin] FCM 이용해 푸쉬알림 받기 (2-2 /3)

hyomin·2022년 3월 3일
0

Android

목록 보기
3/9

이전 포스팅과 다른 점은 fcm token을 서버로 보내는 것이 아니라 Firebase DB에 저장한다

    private var mFirebaseDatabase: FirebaseDatabase? = null
    private var mDatabaseReference: DatabaseReference? = null
    private var mChildEventListener: ChildEventListener? = null

    private fun initFirebaseDatabase() {
        mFirebaseDatabase = FirebaseDatabase.getInstance()
        mDatabaseReference = mFirebaseDatabase?.getReference("users") //DB에서 users를 참조한다
        mChildEventListener = object : ChildEventListener {
            override fun onChildAdded(dataSnapshot: DataSnapshot, s: String?) {
                // child 내에 있는 데이터만큼 반복합니다.
            }
            override fun onChildChanged(dataSnapshot: DataSnapshot, s: String?) {
                Log.e("Firebase","child changed: ${dataSnapshot.key} / ${s} ")
            }
            override fun onChildRemoved(dataSnapshot: DataSnapshot) {
            }
            override fun onChildMoved(dataSnapshot: DataSnapshot, s: String?) {}
            override fun onCancelled(databaseError: DatabaseError) {}
        }
        mDatabaseReference?.addChildEventListener( mChildEventListener!!)
    }
    
   fun moveMainPage(user: FirebaseUser?){
        if( user!= null){
            startActivity(Intent(this, MainActivity::class.java))
            finish()
        }else{
            initFirebaseDatabase() //파이어베이스 DB 초기화 함수 추가됨
            firbaseSignIn()
        }
    }
    
    
      fun updateProfile(){
        mAuth = FirebaseAuth.getInstance()
        val user =  mAuth?.currentUser
        if(user != null) {
             FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener {
                       task-> if(!task.isSuccessful){
                            Log.w(ApplicationClass.TAG,"FetchingFCM registration token failed", task.exception)
                            return@OnCompleteListener
                            }
                            val token = task.result
                            val msg = getString(R.string.msg_token_fmt, token)
                           
                            //fcmTokenService.setFcmTokenView(this)
                           // fcmTokenService.postFcmToken(getUserIdx(),token) //서버로 Token 전송
                       
                         val mFireDatabase =  FirebaseDatabase.getInstance(Firebase.app)
                                      mFireDatabase.getReference("users")
                                     .child(email.substring(0, email.indexOf('@')))
                                     .setValue(userData)         //child 를 추가해주면된다
                       
                })  
             
            }
      }

이렇게 하면 Realtime DB 에 이런 구조로 저장된다.
email을 full 로 ex) example@gmail.com 이렇게 저장할 수 없다.
@기호가 들어갈 수 없기 때문에 SubString을 이용하 email ID 만 저장했다. 본 프로젝트에서는 구글 연동 로그인만 이용하기 때문에 문제가 없으나 여러 소셜 로그인을 이용한다면, 다른 추가적인 방법이 필요하다.

데이터가 Update 되면 초록색으로 바뀌는 걸 실시간으로 확인할 수 있고, 서버에서 SDK를 이용한다면 연동해서 접근이 가능하니 직접 서버로 보내는 방법을 사용하지 않는다면 이렇게 DB를 공유하는 방법도 좋을 듯 하다!

profile
🌱

0개의 댓글