728x90
부제: kotlin 알못이 chatGPT와 copilot만으로 프로그램을 하나 만들기
네이버 아이디로 로그인(네아로)
- 네이버 카페에 글을 올리기 위해서는 우선 로그인을 진행해서 accessToken을 받아와야 한다.
- 이 코드도 네이버 api에 따라할 수 있는 가이드가 있다.
- 네이버 아이디로 로그인을 구현하는 자세한 과정은 다른 블로그에도 나오니 다루지는 않겠다.
- 네이버 아이디로 로그인을 하려면 우선 네이버 개발자센터에 앱을 등록해야 한다.
- 등록하고, 코드를 다음과 같이 적었는데,
- 일단 initialize를 위해서는 client_id, client_secret, client_name이 필요하다. 이 변수들은 따로 github에 올리면 안되는 내용들이기 때문에 properties에 저장해 놓았다.
- 그 다음 네이버에서 받아온 코드를 잘 넣고, accessToken, refreshToken, 그리고 accessToken의 만료시간을 체크하기 위해 expireTime을 sharedPreference에 저장한다.
NaverLogin.kt
class NaverLogin(private val context: Context) {
fun login() {
NaverIdLoginSDK.initialize(context,
BuildConfig.OAUTH_CLIENT_ID,
BuildConfig.OAUTH_CLIENT_SECRET,
BuildConfig.OAUTH_CLIENT_NAME
)
val oauthLoginCallback = object : OAuthLoginCallback {
@RequiresApi(Build.VERSION_CODES.O)
override fun onSuccess() {
Log.d("test", "AccessToken : " + NaverIdLoginSDK.getAccessToken())
Log.d("test", "client id : " + BuildConfig.OAUTH_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())
// SharedPreferences에 AccessToken과 RefreshToken 저장
Utils(context).saveTokenAndTime(
NaverIdLoginSDK.getAccessToken(),
NaverIdLoginSDK.getRefreshToken(),
NaverIdLoginSDK.getExpiresAt()
)
Log.d("test", "SharedPreferences에 토큰 저장 성공")
}
override fun onFailure(httpStatus: Int, message: String) {
val errorCode = NaverIdLoginSDK.getLastErrorCode().code
val errorDescription = NaverIdLoginSDK.getLastErrorDescription()
Log.e("test", "$httpStatus $message")
Log.e("test", "$errorCode $errorDescription")
}
override fun onError(errorCode: Int, message: String) {
onFailure(errorCode, message)
}
}
NaverIdLoginSDK.authenticate(context, oauthLoginCallback)
}
}
Utils.kt
class Utils(private val context: Context) {
private val accessToken: String = "Access_Token"
private val refreshToken: String = "Refresh_Token"
fun saveTokenAndTime(accessToken: String?, refreshToken: String?, expireTime: Long) {
setAccessToken(accessToken)
setRefreshToken(refreshToken)
setExpireTime(expireTime)
}
private fun setAccessToken(value: String?) {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putString(this.accessToken, value)
editor.apply()
}
fun getAccessToken(): String {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
return sharedPreferences.getString(accessToken, "").toString()
}
private fun setRefreshToken(value: String?) {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putString(this.refreshToken, value)
editor.apply()
}
fun getRefreshToken(): String {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
return sharedPreferences.getString(refreshToken, "").toString()
}
private fun setExpireTime(value: Long) {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putLong("ExpireTime", value)
editor.apply()
}
fun getExpireTime(): Long {
val sharedPreferences = context.getSharedPreferences("NaverLogin", Context.MODE_PRIVATE)
return sharedPreferences.getLong("ExpireTime", 0)
}
참고
https://developers.naver.com/docs/common/openapiguide/errorcode.md
728x90
'진행중' 카테고리의 다른 글
[프로젝트] 지역 공공 포스터를 포스팅해보자. 4) chatGPT api에 prompt와 이미지를 전송해서 답변을 받아내기 (0) | 2024.04.09 |
---|---|
[프로젝트] 지역 공공 포스터를 포스팅해보자. 3) 갤러리에서 이미지를 불러오기 (0) | 2024.04.09 |
[프로젝트] 지역 공공 포스터를 포스팅해보자. 1) 프로젝트 동기 및 초기 실험 과정 (5) | 2024.04.07 |
[프로젝트 냠냠] 개발 노트3. AISW 개발자 양성과정 및 프로젝트 후기 (1) | 2024.03.02 |
[프로젝트 냠냠] 개발 노트2-3. weekly calendar, 식단 관리(localStorage), 추천 기능 (0) | 2024.03.02 |