[Android / Kotlin] SNS 로그인 api | Naver

Happy Jiwon·2023년 2월 1일
1

Kotlin

목록 보기
3/6
post-thumbnail

저번에 카카오 로그인 연동에 대해 알아봤는데, 오늘은 네이버 아이디 로그인 연동을 해 볼 예정이다!
줄여서 '네아로'라고 불린다 ㅎ.ㅎ....

개발가이드 바로가기


Naver Developers에 접속하러 가기!

위 링크에 접속하면 다음과 같은 화면이 나타나는데, Application을 등록해준다!

다운로드 URL
앱 다운로드 가능한 URL, 없으면 https://www.naver.com 이런식으로 입력해도 가능하다.

모두 입력했으면 등록하기 눌러준다.


요구사항

네아로 SDK를 사용하기 위한 환경 설정은 다음과 같다.

  • SDK : Android API 21 이상
  • JDK : 11 이상
  • IDE : Android Studio

JDK 8 버전의 경우 별도의 artifact 의존


라이브러리 구성

프로젝트는 다음의 두 모듈로 구성되어 있다.

  • Nid-OAuth : 네아로 SDK
  • Samples : 네아로 SDK를 사용하는 예제 프로젝트

🤔 네아로 SDK ?
Github 바로가기 | 네아로 다운 가이드 문서


개발 환경 설정하기

✅ 방법 1) Maven repository 사용하기

gradle(:app) jdk 추가

// groovy
implementation 'com.navercorp.nid:oauth:5.3.0' // jdk 11
implementation 'com.navercorp.nid:oauth-jdk8:5.3.0' // jdk 8

네아로 SDK에서 사용하는 라이브러리 필요에 따라 exclude

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.6.10'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.security:security-crypto:1.1.0-alpha03'
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.moshi:moshi-kotlin:1.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1'
implementation 'com.airbnb.android:lottie:3.1.0'

나는 공통된 부분을 제외한 나머지 라이브러리를 적용시켜줬다.


✅ 방법 2) Gradle 에서 설정

oauth-5.3.0.aar 파일 > Android 프로젝트의 libs에 복사하기

1) 다운로드 링크 에서 'com.navercorp.nid:oauth:5.3.0' 검색

🖐🏻 링크 들어가기 전,
링크를 들어가면 아래 화면과 같이 자동으로 검색창에 문구가 적혀져 나온다. 따로 검색할 필요 없이 바로 검색 버튼을 클릭하자!

2) 파일 다운로드
aar 파일을 다운로드 한다.

3) Android libs 파일에 붙여넣기
다운로드 받은 파일을 복사하여 Android 프로젝트의 libs 아래에 붙여넣어준다.

💡 libs 파일 위치 찾기
안드로이드 기본 레이아웃을 기준으로 좌측 상단 부분에 프로젝트(Project)탭이 존재한다.
프로젝트 탭을 선택하면 app 아래에 libs 파일이 존재한다.

4) build.gradle 추가
다운로드 완료 후 파일을 안드로이드 스튜디오에 잘 넣었다면 build.gradle에 아래와 같이 추가해주어야 한다.

# groovy
dependencies {
  implementation files('libs/oauth-5.3.0.aar')
}

✅ 방법 3) Android Studio 프로젝트 설정

  1. [file]-[project structure] 실행 (맥북 기준 : command + ;)

  2. 좌측 상단의 + 버튼 클릭

  3. jar/aar 모듈 추가 선택

  4. 다운받은 oauth-5.3.0.aar 선택

  5. 위 과정 생략 시, build.gradle 아래와 같이 추가

🖐🏻 잠깐,
파일 선택할 때 위와 같이 경로를 직접 입력해준다.

위 과정을 완료하면 다음과 같은 dependency가 자동으로 추가된다.

위 과정 대신, build.gradle에 다음과 같이 추가해준다.

implementation files('libs/oauth-5.3.0.aar')

초기화

네아로 SDK를 어플리케이션에 적용하려면 다음과 같은 코드를 추가하여 네아로 객체를 초기화 해야한다.

NaverIdLoginSDK.initialize(context, {OAUTH_CLIENT_ID}, {OAUTH_CLIENT_SECRET}, {OAUTH_CLIENT_NAME})
- OAUTH_CLIENT_ID: 애플리케이션 등록 후 발급받은 클라이언트 아이디
- OAUTH_CLIENT_SECRET: 애플리케이션 등록 후 발급받은 클라이언트 시크릿
- OAUTH_CLIENT_NAME: 네이버 앱의 로그인 화면에 표시할 애플리케이션 이름. 모바일 웹의 로그인 화면을 사용할 때는 서버에 저장된 애플리케이션 이름이 표시된다.

💡 참고
NaverIdLoginSDK.initialize() 메서드가 여러 번 실행되어도 기존에 저장된 접근 토큰(access token)과 갱신 토큰(refresh token)은 삭제되지 않는다.
기존에 저장된 접근 토큰과 갱신 토큰을 삭제하려면 NaverIdLoginSDK.logout() 메서드나 NidOAuthLogin().callDeleteTokenApi() 메서드를 호출한다.


클라이언트 아이디, 시크릿, 어플리케이션 이름 찾기

  • 먼저 좌측 상단에 메뉴바를 클릭하면 메뉴 선택을 할 수 있다.
    Application메뉴 탭에서 내 어플리케이션을 들어간다.

  • 위 사진에 나와있는 내 애플리케이션에 들어가면, 내가 등록해놓은 어플리케이션을 볼 수 있는데 한 번 클릭해보자!

  • 다음과 같이 등록된 애플리케이션에 대한 ClientID와 Client Secret이 보인다.


로그인

로그인 구현 방법에는 2가지가 있다.
1) NidOAuthLoginButton 객체 사용
2) NaverIdLoginSDK.authenticate() 메서드 실행

나는 두 번째 방법으로 로그인을 구현하였다.

로그인 구현 방법 바로가기

✅ 1) NidOAuthLoginButton 객체 사용

NidOAuthLoginButton 객체 사용
1. Layout 파일에 NidOAuthLoginButton 객체를 추가
2. 작성이 끝나면 로그인 창을 실행할 ActivityResultLauncher나 로그인 후에 실행될 OAuthLoginCallback 객체를 등록하는 코드를 추가
<com.navercorp.nid.oauth.view.NidOAuthLoginButton
	android:id="@+id/buttonOAuthLoginImg"
	android:layout_width="wrap_content"
	android:layout_height="50dp" />
binding.buttonOAuthLoginImg.setOAuthLogin(launcher)
// OR
binding.buttonOAuthLoginImg.setOAuthLogin(oauthLoginCallback)

🖐🏻 주의할 점
NidOAuthLoginButton 객체를 이용할 때, 네이버 로그인 버튼의 디자인은 반드시 네이버 로그인 버튼 사용 가이드를 따라야 한다.
네이버 로그인 버튼 사용 가이드


✅ 2) NaverIdLoginSDK.authenticate() 메서드 실행

val oauthLoginCallback = object : OAuthLoginCallback {
	override fun onSuccess() {
		Log.d("test", "AccessToken : " + NaverIdLoginSDK.getAccessToken())
		Log.d("test", "client id : " + getString(R.string.naver_client_id))
		Log.d("test", "ReFreshToken : " + NaverIdLoginSDK.getRefreshToken())
		Log.d("test", "Expires : " + NaverIdLoginSDK.getExpiresAt().toString())
		Log.d("test", "TokenType : " + NaverIdLoginSDK.getTokenType())
		Log.d("test", "State : " + NaverIdLoginSDK.getState().toString())
	}


	override fun onFailure(httpStatus: Int, message: String) {
		val errorCode = NaverIdLoginSDK.getLastErrorCode().code
		val errorDescription = NaverIdLoginSDK.getLastErrorDescription()
		Log.e("test", "$errorCode $errorDescription")
	}
	override fun onError(errorCode: Int, message: String) {
		onFailure(errorCode, message)
		}
	}

	NaverIdLoginSDK.authenticate(this, oauthLoginCallback)
}

접근 토큰 갱신 관련 주의사항
접근토큰은 일정 시간 (1시간)이 지나면 만료됨
때문에 -> callRefreshAccessTokenApi()을 호출해 access token을 갱신해줘야함
callRefreshAccessTokenApi 성공 시
-> 매개변수로 넣은 OAuthLoginCallback 객체의 onSuccess() 메소드 안에서 NaverIdLoginSDK.getAccessToken()을 호출하면 access token을 얻을 수 있음


로그아웃

애플리케이션에서 로그아웃할 때 간단하게 NaverIdLoginSDK.logout() 메서드를 호출해주면 된다!


끗..!!
마무리..
복잡하게 글을 쓴 느낌이라 아쉽다. 언제쯤 깔끔하게 글을 잘 쓸 수 있을까 ㅜㅜ

profile
공부가 조은 안드로이드 개발자

0개의 댓글