기본 개발자사이트에서 등록하는 과정은
https://onedaycodeing.tistory.com/121
해당 게시글을 참조해주세요. (해당글은 자바로 작성된 예제입니다 코드부분은 이쪽 게시물을 봐주세요)
우선 검수가 끝나야 정식 서비스가 가능하지만
개발 과정에서는 맴버관리를 통해 테스트 아이디를 등록 할 수 있습니다.
https://developers.naver.com/main/
네이버 개발자 사이트에서 로그인을 하신 후
내 애플리케이션에 들어가셔서
왼쪽에 등록해둔 애플리케이션 리스트가있습니다.
클릭해보시면
맴버관리라는 탭이 보입니다.
여기서 테스트에 진행 할 네이버 아이디를 등록해주시면 검수전에는 개발로 테스트가 가능합니다.
----------------------------------------------------------------------------------------------------------------------
여기까지 완료하신 분은 이제 소스코드를 참조할게요.
implementation 'com.naver.nid:naveridlogin-android-sdk:4.2.6'
그래들에 의존성 추가 해주시구요.
저는 NaverLogin 이라는 클래스를 우선 하나 만들었습니다.
class NaverLogin {
fun get(apiUrl: String, requestHeaders: Map<String, String>): String? {
val con: HttpURLConnection = connect(apiUrl)
return try {
con.setRequestMethod("GET")
for ((key, value) in requestHeaders) {
con.setRequestProperty(key, value)
}
val responseCode: Int = con.getResponseCode()
if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
readBody(con.getInputStream())
} else { // 에러 발생
readBody(con.getErrorStream())
}
} catch (e: IOException) {
throw RuntimeException("API 요청과 응답 실패", e)
} finally {
con.disconnect()
}
}
fun connect(apiUrl: String): HttpURLConnection {
return try {
val url: URL = URL(apiUrl)
url.openConnection() as HttpURLConnection
} catch (e: MalformedURLException) {
throw RuntimeException("API URL이 잘못되었습니다. : $apiUrl", e)
} catch (e: IOException) {
throw RuntimeException("연결이 실패했습니다. : $apiUrl", e)
}
}
fun readBody(body: InputStream): String? {
val streamReader = InputStreamReader(body)
try {
BufferedReader(streamReader).use { lineReader ->
val responseBody = StringBuilder()
var line: String?
while (lineReader.readLine().also { line = it } != null) {
responseBody.append(line)
}
return responseBody.toString()
}
} catch (e: IOException) {
throw RuntimeException("API 응답을 읽는데 실패했습니다.", e)
}
}
}
네이버와 통신하기위한 기본 셋팅입니다.
그리고 xml에
<com.nhn.android.naverlogin.ui.view.OAuthLoginButton
android:id="@+id/buttonOAuthLoginImg"
android:src="@mipmap/login_na1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.nhn.android.naverlogin.ui.view.OAuthLoginButton>
네이버 버튼을 만들었습니다.
src는 제가 사용했던 네이버 아이디 로그인하기 이미지 입니다. 필요하신 이미지로 쓰시면 될것같습니다. (없어도되요!)
이제 로그인 진행 할 부분에서
fun naverLogin() {
var mOAuthLoginButton: OAuthLoginButton? = null
mOAuthLoginButton = findViewById(R.id.buttonOAuthLoginImg)
var mOAuthLoginInstance = OAuthLogin.getInstance()
mOAuthLoginInstance.init(this, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME)
val mOAuthLoginHandler: OAuthLoginHandler = object : OAuthLoginHandler() {
override fun run(success: Boolean) {
if(success){
val accessToken = mOAuthLoginInstance.getAccessToken(applicationContext)
Thread {
val header = "Bearer $accessToken"
val requestHeaders: MutableMap<String, String> = HashMap()
requestHeaders["Authorization"] = header
val apiURL = "https://openapi.naver.com/v1/nid/me" //엑세스 토큰으로 유저정보를 받아올 주소
val responseBody: String = NaverLogin().get(apiURL, requestHeaders).toString()
Log.d(TAG, responseBody) //주소로 얻은 유저정보 (제이슨)
naverLoginParser(responseBody)
}.start()
}
else {
val errorCode = mOAuthLoginInstance.getLastErrorCode(getApplicationContext()).getCode();
val errorDesc = mOAuthLoginInstance.getLastErrorDesc(getApplicationContext());
Toast.makeText(getApplicationContext(), "errorCode:" + errorCode + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
}
}
}
mOAuthLoginButton!!.setOAuthLoginHandler(mOAuthLoginHandler)
}
이렇게 셋팅해주시면 됩니다.
Client ID , Client Secret 값은 네이버 개발자 사이트에서 확인 가능합니다! (개요 탭에 있으니 참고하시면 됩니다)
그리고 해당 함수를 onCreate 시작 시 호출해주세요.
그리고 naverLoginParser에서 에러나시는 분들은
fun naverLoginParser(msg: String) {
val jsonParser = JSONParser()
val jsonObject = jsonParser.parse(msg) as org.json.simple.JSONObject
val resultCode = jsonObject.get("resultcode").toString()
val message = jsonObject.get("message").toString()
val resultJson = jsonParser.parse(jsonObject.get("response").toString()) as org.json.simple.JSONObject
if (resultCode == "00") {
if (message == "success") {
val email = resultJson.get("email").toString()
val id = resultJson.get("id").toString()
val nickName = resultJson.get("nickname").toString()
val birthday = resultJson.get("birthday").toString()
val birthyear = resultJson.get("birthyear").toString()
val profile = resultJson.get("profile_image").toString()
Log.d(TAG, id)
Log.d(TAG, nickName)
Log.d(TAG, birthday)
Log.d(TAG, email)
Log.d(TAG, birthyear)
Log.d(TAG, profile)
}
else{
Toast.makeText(applicationContext,"네이버 로그인에 실패했습니다.",Toast.LENGTH_SHORT).show()
}
}
else {
Toast.makeText(applicationContext,"네이버 로그인에 실패했습니다.",Toast.LENGTH_SHORT).show()
}
}
여기 함수가 있습니다!
로그아웃 같은경우에는
mOAuthLoginInstance.logout(applicationContext)
해당 코드로 가능하니 참고하시면 됩니다.
자 여기서 빌드를 딱 하면 이제 안드로이드(android)12를 타겟팅 하시는 분들은 에러가 납니다.
그 이유는
https://onedaycodeing.tistory.com/158
해당 이슈 때문인데요 네이버쪽에 이게 안되있습니다 ㅠㅠ
메니페스트에
<activity android:name="com.nhn.android.naverlogin.ui.OAuthCustomTabActivity"
android:exported="true">
이렇게 따로 등록을 해주셔야합니다... 이렇게 해주시면 빌드까지 성공입니다.
ㄱ ㅏ ㄱ 푸시
ㅗ o ㅗ 푸시 :D
'Android' 카테고리의 다른 글
안드로이드 코틀린 SMS(문자) 인증번호 자동입력 BroadcastReceiver (0) | 2022.01.19 |
---|---|
안드로이드 코틀린(Kotlin) 멀티파트(Multipart)를 이용하여 웹으로 사진 전송 (0) | 2022.01.17 |
안드로이드 Notification 클릭 시 원하는 곳으로 이동 중복실행 방지 및 포그라운드 중 바로이동 안드로이드12 이슈대응까지 (0) | 2021.12.08 |
안드로이드 12 PendingIntent 이슈 및 대응 (0) | 2021.12.06 |
안드로이드 12 타겟팅 시 필수 메니페스트 설정 (0) | 2021.12.06 |
댓글