[Kotlin] 네이버 로그인 (파베쪽 미완)

호우·2022년 7월 27일
0

코틀린

목록 보기
6/8

이 포스팅은 네이버 소셜 로그인 구현을 위한 부분이다. 여기도 카카오쪽과 동일하게 자체 로그인은 되나 로그인 정보를 파이어베이스에 넣는 것이 깔끔하지 않다.

네이버 개발자센터에서 소셜 로그인 관련 부분 서치.
우선은 네아로SDK를 애플리케이션에 적용하려면 아래 코드로 객체를 초기화해야

NaverIdLoginSDK.initialize(context, {OAUTH_CLIENT_ID}, {OAUTH_CLIENT_SECRET}, {OAUTH_CLIENT_NAME})

OAUTH_CLIENT_ID(애플리케이션 등록 후 발급받은 클라이언트 ID)와 OAUTH_CLIENT_SECRET(애플리케이션 등록 후 발급받은 클라이언트 시크릿)은 개발자 센터에서 체크해서 string.xml에 넣어두자.

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)

        resourceInit()

        auth = Firebase.auth
        NaverIdLoginSDK.initialize(this@LoginActivity, getString(R.string.naver_client_id), getString(R.string.naver_client_secret),"Town Rental")
    }

resourceInit() 코드

private fun resourceInit(){
        var db = FirebaseFirestore.getInstance()
        var mAuth = FirebaseAuth.getInstance()
        KakaoSdk.init(this@LoginActivity, "97106805191ef5a0ee3b4954d43b2616")
        //var callback = KakaoSessionCallback()
        //Session.getCurrentSession().addCallback(KakaoSessionCallback())
        googleSignIn
    }
  • 네이버 로그인 버튼을 눌렀을 때 실행되는 함수 startNaverLogin()
binding.buttonNaverLogin.setOnClickListener {
            startNaverLogin()
        }

로그인하는 방법은 두 가지가 있는데
1. NidOAuthLoginButton 객체로 네이버 로그인 버튼을 레이아웃에 추가
2. NaverIdLoginSDK.authenticate() 메서드 직접 실행
로그인 버튼을 눌렀을 때 로그인을 실행하는 함수.

private fun startNaverLogin(){
        val profileCallback = object : NidProfileCallback<NidProfileResponse>{
            override fun onSuccess(result: NidProfileResponse) {
                var db = FirebaseFirestore.getInstance()
                //var response: NidProfileResponse ?= null
                var naverToken: String? = NaverIdLoginSDK.getAccessToken()

                FirebaseApp.initializeApp(baseContext)

                val userId = result?.profile?.id
                Toast.makeText(baseContext, "ID : ${userId}", Toast.LENGTH_SHORT).show()

                var data = hashMapOf(
                    "token" to naverToken
                )

                Toast.makeText(this@LoginActivity, "네이버 로그인 성공", Toast.LENGTH_SHORT).show()
                db.collection("Users").document(userId.toString()).get().addOnCompleteListener{ task->
                    var document: DocumentSnapshot = task.getResult()
                    if(document.exists()){
                        var userInfo = UserInfo()

                        userInfo?.uid = userId
                        fbFirestore?.collection("Users")?.document(userId.toString())?.update(userInfo)
                    } else{
        
                    }
                }
                db.collection("Tokens").document(userId.toString()).set(data)
                finish()
            }

            override fun onFailure(httpStatus: Int, message: String) {
                val errorCode = NaverIdLoginSDK.getLastErrorCode().code
                val errorDescription = NaverIdLoginSDK.getLastErrorDescription()
                Toast.makeText(this@LoginActivity, "errorCode: ${errorCode}\n" +
                "errorDescription: ${errorDescription}", Toast.LENGTH_SHORT).show()
            }

            override fun onError(errorCode: Int, message: String) {
                onFailure(errorCode, message)
            }
        }

로그인에 성공하면 접근 토큰 정보를 얻어올 수 있다.

NaverIdLoginSDK.getAccessToken()

로그인에 실패했다면 NaverIdLoginSDK.getLastErrorCode() 메서드나 NaverIdLoginSDK.getLastErrorDescription() 으로 실패 이유와 에러 코드 얻을 수 있다.

  • 로그아웃
NaverIdLoginSDK.logout()
  • 프로필 가져오는 방법
NidOAuthLogin().callProfileApi(nidProfileCallback)
profile
뉴비 프로그래머

0개의 댓글