* 아래 링크에서 로그인 기능을 완성하고 이 작업을 따라해주세요!
[Android Studio/JAVA]SNS 로그인 구현(1) - 네이버
1. Naver Developer에서 네이버 로그인 연동 API 개발 신청을 한다. 네이버 아이디로 로그인 - INTRO 환영합니다 네아로의 올바른 적용방법을 알아볼까요? 네이버 아이디로 로그인을 통해 신규 회원을
anovice-dp.tistory.com
* 아래 링크도 네이버 API를 XML과 JSON으로 파싱함 (검색 - 쇼핑)
[프로젝트/Android]너의 사료가 보여 #02 API 파싱(xml)
- 이전글 - 2020/12/17 - [프로젝트/Android]너의 사료가 보여 - oven 2020/12/19 - [프로젝트/Android]너의 사료가 보여 #01 화면 구현(스플래시, 화면이동, 액션바) 1. 우선 API 등록 후 키 값을 이용해 주소..
anovice-dp.tistory.com
[프로젝트/Android]너의 사료가 보여 #06 API 파싱(json/네이버 검색-쇼핑)
- 이전글 - 2020/12/17 - [프로젝트/Android]너의 사료가 보여 - oven 2020/12/19 - [프로젝트/Android]너의 사료가 보여 #01 화면 구현(스플래시, 화면이동, 액션바) 2021/02/03 - [프로젝트/Android]너의 사료..
anovice-dp.tistory.com
* Naver Developers
블로그 - Search API
블로그 NAVER Developers - 검색 API 블로그 검색 개발가이드 검색 > 블로그 네이버 블로그 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출할 때 HTTP Header에 애플리케이션
developers.naver.com
1. 로그인이 완료되어 id값과 pw값이 일치한다는 토큰을 얻어오고 토큰와 유저정보를 받아올 주소를 이용해 값을 추출한다.
btnNaverLogin.setOAuthLoginHandler(mOAuthLoginHandler); // 네이버 핸들러 연결
private OAuthLoginHandler mOAuthLoginHandler = new OAuthLoginHandler() {
@Override
public void run(boolean success) {
if (success) {
new Thread(new Runnable() {
@Override
public void run() {
String accessToken = mOAuthLoginModule.getAccessToken(mContext);
String header = "Bearer " + accessToken;
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("Authorization", header);
String apiURL = "https://openapi.naver.com/v1/nid/me"; //엑세스 토큰으로 유저정보를 받아올 주소
String responseBody = get(apiURL,requestHeaders);
Log.d("responseBody 확인 ",responseBody); //주소로 얻은 유저정보 (제이슨)
NaverUserInfo(responseBody);
login_state = "n";
new Thread()
{
public void run()
{
Message msg = btnInVisibleHandler.obtainMessage();
btnInVisibleHandler.sendMessage(msg);
txtLoginState.setText("네이버 : " + login_name);
}
}.start();
}
}).start();
} else {
String errorCode = mOAuthLoginModule.getLastErrorCode(mContext).getCode();
String errorDesc = mOAuthLoginModule.getLastErrorDesc(mContext);
Toast.makeText(mContext, "errorCode:" + errorCode + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
}
}
};
2. 위에서 얻어온 유저 정보를 NaverUserInfo 메서드를 만들어 매개변수로 보낸다. 이 메서드에서는 get() 메서드로 키 값을 이용해 밸류를 가져온다.
private void NaverUserInfo(String msg){
JSONParser jsonParser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject) jsonParser.parse(msg);
String resultcode = jsonObject.get("resultcode").toString();
Log.d("resultcode 확인 ",resultcode);
String message = jsonObject.get("message").toString();
Log.d("message 확인 ",message);
if(resultcode.equals("00")){
if(message.equals("success")){
JSONObject naverJson = (JSONObject) jsonObject.get("response");
login_name = naverJson.get("name").toString();
Log.d("이름 확인 ",login_name);
}
}
else{
//Toast.makeText(getApplicationContext(),"로그인 오류가 발생했습니다.",Toast.LENGTH_SHORT).show();
}
}
catch (ParseException e) {
e.printStackTrace();
}
}
private static String get(String apiUrl, Map<String, String> requestHeaders){
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestMethod("GET");
for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
con.setRequestProperty(header.getKey(), header.getValue());
}
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
return readBody(con.getInputStream());
} else { // 에러 발생
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
}
3. get() 메서드에서는 HttpURLConnection() 메서드를 통해 url과 연결된다.
private static HttpURLConnection connect(String apiUrl){
try {
java.net.URL url = new URL(apiUrl);
return (HttpURLConnection)url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
}
4. get() 메서드에서는 readBody() 메서드를 통해 데이터들을 읽어온다.
private static String readBody(InputStream body){
InputStreamReader streamReader = new InputStreamReader(body);
try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
'Android > 튜토리얼 및 가이드' 카테고리의 다른 글
[Android/SDK연동]친구(나)에게 카카오링크 메시지 보내기 (0) | 2021.05.14 |
---|---|
[Android/SDK연동]SNS 로그인 구현(6) - 카카오톡 로그인 SDK V2 (0) | 2021.05.14 |
[Android/SDK연동]SNS 로그인 구현(4) - 페이스북 (0) | 2021.05.12 |
[Android/SDK연동]SNS 로그인 구현(2) - 카카오톡 sdk v1 (0) | 2021.05.11 |
[Android/SDK연동]SNS 로그인 구현(1) - 네이버 (0) | 2021.05.10 |