안드안드개발자
10
2020-09-07 19:25:33 작성 2020-09-07 21:12:50 수정됨
7
285

안드로이드 api개발 도움좀 주세요 ㅜㅜ


안녕하세요. 현재 안드로이드 공부를 하고 있는 학생입니다.

kotlin과 retrofit을 이용해서 네이버 api 연결 테스트를 해보고 있는데, 계속 인증실패하는 문구가 나오네요

ㅠㅠ

api key와 secret key는 몇번이나 확인을 해봐서 맞는데,권한 설정도 되있구요. 아래와 같은 문제가 발생하는 이유가 뭘까요? 몇시간째 구글링해보고 있는데, 해결이 안되네요. 도와주세요 ㅠㅠ

Response{protocol=h2, code=200, message=, url=https://openapi.naver.com/v1/search/news.json?query=%ED%85%8C%EC%8A%A4%ED%8A%B8}

{"errorMessage": "Not Exist Client ID : Authentication failed. (인증에 실패했습니다.)","errorCode": "024"}



코드는 다음과 같습니다.

data class


data class ResultGetSearchNews(
var lastBuildDate: String = "",
var total: Int = 0,
var start: Int = 0,
var display: Int = 0,
var items: List<Items>
)

data class Items(
var title: String = "",
var originallink: String = "",
var link: String = "",
var description: String = "",
var pubDate: String = ""
)
interface
interface NaverAPI {
@GET("v1/search/news.json")
fun getSearchNews(
@Header("X-Naver-Client-Id") clientId: String,
@Header("X-Naver-Client-Secret") clientSecret: String,
@Query("query") query: String,
@Query("display") display: Int? = null,
@Query("start") start: Int? = null
): Call<ResultGetSearchNews>
}
MainActivity
class MainActivity : AppCompatActivity() {
private val TAG = "apiLog"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val CLIENT_ID = "api키"
val CLIENT_SECRET = "시크릿키"
val retrofit = Retrofit.Builder()
.baseUrl("https://openapi.naver.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(NaverAPI::class.java)
val callGetSearchNews = api.getSearchNews(CLIENT_ID, CLIENT_SECRET, "테스트")

callGetSearchNews.enqueue(object : Callback<ResultGetSearchNews> {
override fun onResponse(
call: Call<ResultGetSearchNews>,
response: Response<ResultGetSearchNews>
) {
Log.d(TAG, "성공 : ${response.raw()}")
resultText.setText(response.toString())
}

override fun onFailure(call: Call<ResultGetSearchNews>, t: Throwable) {
Log.d(TAG, "실패 : $t")
}
})
}
}
0
  • 답변 7

  • 성일
    574
    2020-09-07 19:39:44

    올려주신 "문제"의 코드는 200, 즉 정상 결과 리턴입니다.

  • 안드안드개발자
    10
    2020-09-07 19:58:50

    넵 200으로 정상적인 리턴이 뜨는데 내용에는 인증실패라고 나와서요 

  • OkkyActivity
    389
    2020-09-07 20:57:59 작성 2020-09-07 20:58:37 수정됨



    @Headers({"X-Naver-Client-Id: myid", "X-Naver-Client-Secret: mypw"})
    @GET("/...")
    fun get.....

    이런식으로는 혹시 동작하나요?


  • 안드안드개발자
    10
    2020-09-07 21:03:15 작성 2020-09-07 21:12:01 수정됨

    그 방식도 구글링해서 해봤는데 

    "Unexpected tokens (use ';' to separate expressions on the same line)"라는 신택스 에러가 발생하더라구요 

    //////////////////

    우드로이드님이 말씀하신 

    @Headers({"X-Naver-Client-Id: myid", "X-Naver-Client-Secret: mypw"})

    코드에서 {}부분을 제거해서 해보니 신택스 에러발생은 해결되었습니다.

    하지만 여전히 인증실패가 나오네요 ㅠㅠ

  • OkkyActivity
    389
    2020-09-07 21:12:45

    음..헤더를 저런식으로 사용해본적이 없어서 문서보고 말씀드렸는데 아닌가보네요..


    근데 보통의 경우 헤더 추가를 질문자님이나 제가 말한 방식처럼 추가하는 경우는 거의 없고,

    https://stackoverflow.com/questions/32963394/how-to-use-interceptor-to-add-headers-in-retrofit-2-0


    이런 방식처럼 retrofit instance 를 만들때 interceptor 에 헤더 묶음을 추가해서 사용하는 경우가 99.9% 일 거니까 이 방식으로도 한번 시도해보시구여..


    이런 말씀을 드리는 이유가.. 인증키 관련한 문제인것 같아서.. 헤더가 제대로 추가가 되지 않는것 같아서??

    말씀드렸고요...



    추가로. Postman 이라는 프로그램을 통해 통신자체에서 문제는 없는지 체크해보시기 바래여

  • 안드안드개발자
    10
    2020-09-07 21:14:21

    넵 좋은 정보 감사합니다. 우드로이드님께서 피드백주신 내용으로 해결해보겠습니다.

  • kimchs9325
    333
    2020-09-08 02:06:41

    https://devlog.jwgo.kr/2018/04/26/how-to-solve-naver-api-error/

    라는 해결방안이 나오긴 하는데...

    제가 보기에는 헤더의 문제인 듯 합니다.

    헤더를 입력하는 방식이 retrofit에서 몇몇개가 있는 것 같은데...

    그 부분을 잘 생각해서 하면 될 것 같습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.