단축URL을 생성하는 안드로이드 앱 만들기1




안드로이드 기본을 배운 다음에는 구글플레이에 자신이 만든 앱을 직접 올려보는 것이 실력향상에 도움이 됩니다.
만들고 싶은 앱을 정한 다음 구현하고 싶은 기능들을 검색하면서 이것저것 시도해보는 것이 많은 도움이 됩니다.
간단한 앱을 만들어보면서 안드로이드에 대해 좀 더 알아보겠습니다.

단축 URL 앱 기능

이번 포스트에서는 단축 URL을 생성하는 앱을 만들어보겠습니다.
이 앱을 만들면서 배울 수 있는 것은 다음과 같습니다
  1. 네트워크 라이브러리 retrofit 사용 방법
  2. gson 사용 방법
  3. 네이버 API 사용 방법
셈플 앱은 아래 링크에서 받아볼 수 있습니다.

Get it on Google Play

단축 URL 앱의 기능은 크게 두 가지 입니다.
  1. 입력받은 URL을 API 호출해서 단축URL로 만들기
  2. 단축 URL을 클립보드로 복사하거나 다른 앱으로 공유하기
사용자 URL 입력화면
사용자 URL 입력화면
단축URL 생성 후 클립보드 또는 다른 앱으로 공유하기
단축URL 생성 후 클립보드 또는 다른 앱으로 공유하기

API 사용 신청하기

우선 단축 URL을 만들기 위해서는 네이버 API가 필요합니다.
네이버 개발자센터에 들어가보면 서비스 API 항목에 단축URL 소개가 있습니다.
네이버에서 제공하는 API로 하루에 25,000 요청을 지원해줍니다.
오픈 API 신청버튼을 클릭하여 애플리케이션 이름, 사용 API를 입력하는 페이지가 나옵니다.

네이버 API 신청 페이지
네이버 API 신청 페이지

애플리케이션 이름은 개발하려는 앱 이름을 입력합니다.
사용 API에는 단축 URL 서비스를 선택합니다.
비로그인 오픈 API 서비스 환경 -> 앱 패키지 이름은 프로젝트의 패키지명을 입력합니다.
등록이 완료되면 내 애플리케이션 항목에 앱이 추가되고 Client ID와 Client Secret을 찾을 수 있습니다.

발급받은 Client ID와 Client Secret 키는 네이버 API를 사용할 때 필요합니다.
APK 키들을 한곳에 모아두는 것이 개발하거나 유지 보수할 때 편리하므로 클래스를 만들어 상수들을 모아둡니다.



retrofit 네트워크 라이브러리로 네이버 API 사용하기

숏컷 URL을 생성하는 API를 사용하기 위해서 네트워크 라이브러리를 사용해 보겠습니다.
retrofit 네트워크 라이브러리를 사용할 것입니다.
애플리케이션 프로젝트의 build.gradle에 retrofit과 json 파서인 gson 을 dependencies에 추가합니다.



그리고 retrofit은 서비스라는 interface를 만들어야 합니다.
이 interface는 GET 요청할 URL과 URL 파라미터를 인수로 받을 수 있고 헤더 영역을 정의할 수 있습니다.
네이버 API는 헤더 영역에 client id와 client secret 키를 넣어서 요청해야 됩니다.
그러므로 이전에 상수를 모아두었던 static final 변수를 참조해서 헤더 영역을 정의해 줍니다.
"X-Naver-Client-Id:NaverConsts.CLIENT_ID""X-Naver-Client-Secret:NaverConsts.CLIENT_SECRET" 처럼 @Headers 에 정의합니다.
@GET("/v1/util/shorturl")처럼 GET 요청으로 path 영역을 설정합니다.
getShortUrl(@Query("url") String url) 메소드를 만들어서 URL 파라메터로 @Query으로 파라메터를 변수로 입력받아 API의 전문을 만들어 줄수 있습니다.
retrofit은 https://openapi.naver.com/v1/util/shorturl?url="타겟URL"로 요청을 보냅니다.



응답받은 json 데이터는 retrofit이 gson 객체로 만들어줄 수 있습니다.
네이버 API 문서에 나와 있듯이 우리가 사용할 데이터는 단축 URL을 담은 url 변수입니다. 이 변수는 json의 result 객체 안에 존재합니다.
아래 코드는 데이터 객체의 전문입니다.



이제 retrofit을 사용하기 위한 준비는 다 끝났습니다.
Retrofit.Builder()를 이용하여 baseUrl을 설정하고 GsonConverterFactory를 설정하여 응답받은 json 문자열을 NaverService.class 로 자동 생성해주도록 설정합니다.


Retrofit.Builder()로 만들어진 객체로 위에서 만든 NaverService#loadShortUrl(url, callBack)을 호출할 수 있습니다.
loadShortUrl()를 호출하면 Call<ShortUrlResult>으로 Call객체가 생성됩니다.
Call#enqueue()를 호출하는 시점에 GET요청을 보냅니다.
enqueue()는 retrofit의 쓰레드풀으로 요청을 보내는 것으로 이 메서드를 사용할 경우 따로 쓰레드를 관리할 필요가 없습니다.
Callback은 응답이 완료됬을 때 호출되며 onResponse(..., Response<ShortUrlResult> response) 로 gson으로 변환된 객체를 받을 수 있습니다.
아래 코드에서는 response.body().getResult()으로 ShortUrlCallBack에 전달하여 단축URL을 다른 앱에 공유하거나 클립보드로 복사할 수 있습니다.
ShortUrlCallBack는 Activity에서 받기위해 만든 interface입니다.


다음장에서는...

이번 장에서는 네이버 단축 URL API 설정 방법과 retrofit을 이용한 네트워크 호출 방법을 설명했습니다.
다음 장에서는 응답받은 단축 URL을 클립보드로 복사하거나 다른 앱으로 공유하는 방법을 설명하겠습니다.
전체 소스는 2장에서 확인하실 수 있습니다.

댓글

이 블로그의 인기 게시물

코틀린 (Kotlin) filter, map, all, any, count, find, groupBy, flatMap 함수 정리

코틀린 (Kotlin) 인터페이스 정리

RecyclerView 에서 notifyItemChanged()의 payload 이해하기