ID 950058, SDK 2.15.0 버젼을 사용하는 안드로이드 입문자입니다.
너무 기초적인 질문이라 뭔가 부끄럽네요. 현재 노트북 상에 가상의 안드로이드 앱을 동작시켜, 카카오 로그인 및 나의 카카오톡 정보를 가져오는 것까지는 아래와 같은 코드를 통해 구현하였고, 결과 또한 잘 나오는 것을 확인하였습니다.
String uri = KAKAO_API_HOST + "/v2/user/me";
String method = "GET";
// 연결 객체 생성
System.out.println("Fn_get_kakko_myInfo");
try {
URL url = new URL(uri);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true); // 기본적으로 false로 되어있음
conn.setRequestMethod(method);
conn.setRequestProperty("Authorization", "Bearer " + AccessToken);
//conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
....이하 생략 ....
추가적인 작업을 위해 톡캘린더 목록 가져오기 동작을 수행하고자, 톡캘린더 사용 관련 권한을 동의한 뒤, 위의 작동되었던 코드를 기반으로 다음과 같이 url 주소 변경과 마지막 Content-type 부분을 주석 처리하였습니다.
String uri = KAKAO_API_HOST + "/v2/api/calendar/calendars";
String method = "GET";
System.out.println("Fn_get_kakao_calender");
try {
URL url = new URL(uri);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(method);
conn.setRequestProperty("Authorization", "Bearer " + AccessToken);
//conn.setRequestProperty("Accept-Charset", "UTF-8");
//conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
하지만, 해당 코드는 {“msg”:“Forbidden”,“code”:-403} 을 반환하며 에러를 출력하는 상태입니다.
혹시나 다른 필요 조건에 동의를 하지 않아 생기는 문제인지 파악하기 위해, 개발 사이트에서 제공하는 REST API를 통해 톡캘린더 목록 가져오기(/v2/api/calendar/calendars) 및 일정 목록 가져오기 (/v2/api/calendar/events) 테스트를 수행해 보았습니다. 이 테스트 상에서는 일정 목록 가져올 때 id, title, type, calendar_id, is_host 가 안 나오는 문제를 제외하고는, 모든 동작이 잘 작동하는 것을 확인했습니다.
혹시 {“msg”:“Forbidden”,“code”:-403} 문제를 해결하기 위한 조언을 구할 수 있을까요?
안녕하세요.
API호출까지의 구현코드 전체를 올려주시겠어요?
파라미터 전달이 잘못되어 오류가 발생한것으로 보입니다.
개발자 선생님. 고생이 많으십니다.
패킷 생성 및 송신 코드입니다.
문제점에 대한 고견 부탁드립니다.
public void Fn_get_kakao_calender(String AccessToken)
{
String uri = KAKAO_API_HOST + "/v2/api/calendar/calendars";
String method = "GET";
String result ="";
//String line ="";
System.out.println("Fn_get_kakao_calender");
try {
URL url = new URL(uri);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(method);
conn.setRequestProperty("Authorization", "Bearer " + AccessToken);
//conn.connect();
new Thread() {
int responseCode;
String result="";
String line = "";
BufferedReader br;
public void run() {
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
//StringBuilder sb = new StringBuilder();
//bw.write(sb.toString());
//bw.flush();
try {
conn.connect();
responseCode = conn.getResponseCode();//getResponseCode();
System.out.println("responseCode : " + responseCode);
System.out.println("result : " + result);
if (responseCode != 200) {
//InputStream stream = conn.getErrorStream();
br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
//InputStream stream = conn.getErrorStream();//br.toString();
while ((line = br.readLine()) != null) {
result += line;
}
System.out.println("error response body : " + result);
}
br.close();
}
catch (IOException e) {
//return e.getMessage();
}
}
}.start();
//httpCallService.Call(sb);
}catch (IOException e) {
//return e.getMessage();
}
}
코드 문제 없어보입니다.
확인 후 답변드리겠습니다.
안녕하세요.
해당 오류는 디벨로퍼스에서 톡캘린더 동의 항목을 비활성화 한 상태에서 API 요청하여 발생하였습니다.
현재는 활성화 하신것으로 확인되며, 이후 오류는 발생하지 않은것으로 확인됩니다.
친절한 답변 감사합니다. 그런데 지금도 똑같은 문제가 발생해서요 ㅠ.ㅠ. 개발자님의 환경에서는 작동되고 저의 환경에서 문제가 있다면, 개발 환경을 맞추거나 다른 방식으로 구현을 해야 할 것 같습니다. 현실적으로 개발자님은 입문자인 저보다는 훨씬 복잡한 환경에서 개발을 하고 계실 것 같아 환경을 맞추기는 어려울 것 같다고 판단이 됩니다. 혹시 다른 방식의 캘런더 정보를 가져오기 위한 구현 방식을 추천해 주실 수 있을까요?
오늘 발생한 오류는 만료된 토큰을 사용하였기 때문에 발생하였습니다.
토큰은 다음의 만료시간을 갖고 있습니다.
이해하기 | Kakao Developers 이해하기 - 참고: 토큰
어제 오류는 API 사용 중에 디벨로퍼스에서 해당 동의 항목을 비활성화 했기 때문으로
그동안 발생된 오류는 개발환경이 원인이 아니니 참고 부탁드립니다.
친절한 답변 감사합니다. 토큰 쪽에 대한 저의 이해력이 부족해서요. unlink 후 재 접속을 통해 얻은 접근 토큰의 경우, 만료 기간이 다음과 같이 확인이 되는 상황입니다.
accessTokenExpiresAt=Sat Aug 12 02:36:26
해당 토큰을 통해 내 프로필 정보를 불러올 경우에는 잘 호출이 되는데, 캘린더 정보는 여전히 {“msg”:“Forbidden”,“code”:-403} 문제가 발생을 해서요. 혹시 제가 토큰 쪽에 대한 개념 부족으로 인해 생긴 문제일까요?
사용하신 토큰을 확인 부탁드립니다.
오늘 사용하신 토큰은 어제 발급 받으셨고 만료된 토큰 입니다.
다시 접속하셨을 때, 발급 받은 접근토큰이 사용되지 않은것 같습니다.