월별 글 목록: 2013년 5월월

안드로이드에서 인증이 필요한 콘텐츠 접근하기

안드로이드에서 인텐트(Intent)는 컴포넌트(액티비티, 콘텐트 프로바이더, 브로드캐스트 리시버, 서비스)를 호출하거나 메시지를 전달하는데 사용된다. 그리고 리소스에 접근해서 리소스를 사용할 수 있도록 제공한다. 이 리소스에 접근하는데 방법의 중심에는 URI라는 포맷을 사용한다. 이 URI 포맷은 Uniform Resource Identifier의 약자로 리소스를 표현하는 식별자이자 유일한 주소이다. 그리고 인텐트 를 보면, 안드로이드의 파일(content), 전화번호(tel) 등의 각종 정보를 가져올 수 있다는 것도 알 수 있다.

이제 안드로이드 앱에서 인터넷에 있는 mp3나 mp4같은 파일을 열어보고 싶은 경우를 살펴보자. 아래의 예처럼, url이 mp3 파일을 가리키고 있다면 mp3를 실행할 수 있는 앱이 뜨면서, 또 앱이 스트리밍을 지원한다면 다운로드 받지 않고도 바로 스트리밍이 되서 음악을 들을 수 있다. 실제로 대 부분의 오디오 앱들은 스트리밍을 지원한다.

String url = “http://www.example.com/abc.mp3”;

아래 코드는 인터넷에 있는 mp3/mp4/3gp 파일을 외부 앱을 통해서 스트리밍 받기 위해서 사용할 수 있는 코드이다.

String url = "http://www.example.com/abc.mp3";
if (url.endsWith(".mp3")) {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.parse(url), "audio/*");
  startActivity(intent); 
  return true;
}
if (url.endsWith(".mp4") || url.endsWith(".3gp")) {
  Intent intent = new Intent(Intent.ACTION_VIEW); 
  intent.setDataAndType(Uri.parse(url), "video/*");
  startActivity(intent); 
  return true;
}

위 코드에서  “http://www.example.com/abc.mp3″가 로그인이 필요한 콘텐츠라고 가정해 보자. 위의 코드로 접근을 시도하면 5xx의 에러를 보게 될 것이다. 안드로이드는 인증이 필요한 콘텐츠를 쉽게 볼 수 있도록 URI 처리를 지원해서 인증처리를 지원한다.

위의 코드를 아래처럼 바꾸면 된다. 아래의 주황색 부분인 id, pw만 정해주면 인증이 처리되고, 아래의 mp3 데이터를 스트리밍으로 들을 수 있게 된다.

String url = "http://www.example.com/abc.mp3";

if (url.endsWith(".mp3")) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    URL url = new URL(url);
    String host = url.getProtocol() +"://"+id+":"+pw+"@" + url.getAuthority();
    String path = url.getPath();           

    Uri myUri = Uri.parse(host + path);
    intent.setDataAndType(Uri.parse(url), "audio/*");
    startActivity(intent);   
    return true;
}

if (url.endsWith(".mp4") || url.endsWith(".3gp")) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    URL url = new URL(url);
    String host = url.getProtocol() +"://"+id+":"+pw+"@" + url.getAuthority();
    String path = url.getPath();    

    intent.setDataAndType(Uri.parse(url), "video/*");
    startActivity(intent);   
    return true;
}

이렇게 내 콘텐츠를 확인할 수 있기에, 위 과정은 어찌 보면 매직같은 느낌이 날 수도 있다. 하지만 이 방식은 URI의 표준에 나와있고, HTTP 기본 인증으로 지원되는 내용이다. 아래의 이미지는 URI/URN/URL을 잘 설명해 주고 있다. 딱 보면, 서버가 서비스하는 프로토콜(http(s), ftp 등)에 맞춰서 로그인 정보를 넣을 수 있다는 것을 알 수 있다.

URI 표준에 대한 내용은 http://en.wikipedia.org/wiki/URI_scheme 에서 확인할 수 있다.

ADB를 사용해서 에뮬레이터나 디바이스에 네트웍으로 연결하기..

ADB는 Android Debug Bridge의 약자로 에뮬레이터나 디바이스에 연결해서, 앱을 설치하거나 디버깅을 도와주는 아주 유용한 툴입니다. 대부분 USB로 연결해서 사용하는데, 매번 연결해 놓는 게 귀찮은 경우 debugging 옵션을 켜 놓고 연결해서 adb툴을 이용해 디버깅과 각종 유용한 기능을 사용할 수 있다. 아래는 같은 네트웍에서 에뮬레이터나 디바이스를 연결해서 사용하는 방법이다.

// device에서 usb debugging 옵션을 키지 않은 경우 연결이 되지 않는다.

C:\>adb tcpip 5555
error: device not found

// device에서 usb debugging 옵션을 키고 아래처럼 adbd의 리스닝 포트를 5555로 세팅한다.

C:\>adb tcpip 5555
restarting in TCP mode port: 5555

기기의 Wi-Fi 옵션에서 IP를 확인한다.

// 아래의 명령으로 device에 연결한다.

C:\>adb connect 192.168.123.176:5555
connected to 192.168.123.176:5555

// 연결된 디바이스 목록을 확인한다.

C:\>adb devices
List of devices attached
192.168.123.176:5555    device

// adb shell 명령으로 에뮬레이터나 디바이스에 접근해서 각종 명령을 사용할 수 있다.

자세한 내용은 Android Developer 사이트(http://developer.android.com/tools/help/adb.html)에서 확인할 수 있다.

구글 IO 2013 후기

구글 I/O의 첫날에 대한 간략한 후기를 적어봅니다.
구글 I/O는 구글이 2008년도부터 시작한 개발자 행사로, 구글 서비스 개선, 각종 개발자 툴 및 API 등을 발표해 왔다. 작년부터 실리콘밸리에 있는 회사에서 근무하고 있어서, 작년에 구글 I/O에 참가할 수 있겠다는 기대를 했으나 광클릭 신공이 부족해서 실패..

올해는 대표님의 광클릭 신공이 성공해서 겨우 1개의 티켓을 얻어서 대표(?)로 참가.. ^^


좌측 : 행사장인 모스콘 센터에 들어가기 전에 입구에서 한방
우측 : 등록을 하고 받은 명찰(?), NFC 칩이 내장되어 있어서 가져가기만 하면, 바로 친구 목록에 추가를 시킬 수 있다나(?).. 허나 네트웍이 너무나 느려서 잘 되는 꼴을 못 봄..

키노트

많은 행사에서 저명한 인사들이 키노트를 장식하지만, 애플도 그렇지만 구글의 키노트는 구글 자체로 만도 저명한 인사들이 실무를 해서 그런지 정말 잘한다는 느낌이 들었다. 키노트 행사장에 들어가는 과정은 꽤나 힘이 들었네요.. 8시 10분 가량에 도착해서 꼬리를 찾아서 줄을 서고, 기다리면서 그 큰 카페룸을 계속 걷고걷고. 하지만 키노트 행사장에서는 나도 모르게 박수치고 있다는..

왼쪽에는 별로 줄이 없어 보이지만, 꼬불꼬불 줄이 엄청나게 길었습니다.. 위는 커피에 우유(카페라떼?)를 타 마시라고 잔뜩 가져다 놓은 우유..

개인적으로는 안드로이드 4.3 발표나 설마 5.0 키라임의 발표가 있을지도 모른다는 일말의 희망을 품고 봤지만, 애석하게도 안드로이드 최신 버전에 대한 내용은 없었네요.. ^^;; 개인적으로 좋았던 내용을 나열해 보면..
– 안드로이드 스튜디오 : IntelliJ 기반의 안드로이드 개발 툴.. 아직은 알파버전이지만, 이제 안드로이드 개발은 이클립스를 떠나보내야 하나.. 그리고, 빌드 툴로 Gradle을 장착하고 있음.. 이제 Ant, Maven의 XML 시대는 저무는 구나.. DSL이 대세(?), 다운로드 : http://developer.android.com/sdk/installing/studio.html
– 구글 플레이의 강화된 서비스 : 이제 번역은 구글에 맞겨야 겠당.. 서비스 제공 업체와의 연동으로 가격이 엄청나게 싸 보임.. 이클립스 플러그인도 제공.. 알파, 베타의 스테이징을 지원하기 시작함.. 대박..
– 구글 메세징 서비스 : 단 방향의 푸시에서 양 방향이 된다.. 대박..
– 구글 플러스 OAuth 연동 : 구글 서비스의 진정한 SSO라고 해야 겠군.. 서비스 연동하면 앱도 설치해 줄 수 있음.. 엄청 편리해 보임..
– 게임을 위한 API 지원 : 여러 디바이스의 게임 데이터를 지원하기 위해서 제공하는 각종 API 들.. 이제 폰에서 2레벨까지 하고, 태블릿에서 3레벨부터 시작할 수 있다..
그 외의 검색, 맵의 개선은 내가 관심이 없어서 그런지 흥미 없음..


TheVerge에서 제공하는 3분 30초의 구글 키노트 정리 영상.

행사장 주변

키노트 룸과 세션룸 앞에는 각종 구글의 서비스와 구글에 연동해서 성공한 서비스 업체들의 부스가 있었습니다. 간단하게 살펴보면..

잔뜩 합쳐(?)논 크롬 픽셀.. 손가락질 하면 시간 보내기 좋음.. ㅋㅋ


이 차가 구글 맵의 스트리트 뷰를 찍는 차량입니다. 위에 둥근 넘이 카메라를 엄청 많이 달고 있음..


바다속을 촬영하는 수중 카메라..


이건 사람이 메고 댕기는 모델.. 차가 못 다니는 산같은 곳을 짊어지고 다니면서 찍을 수가 있겠음..ㅋㅋ


Street View Trekker를 짊어지고 가상 현실(?)을 걸어가는 모습..


점심에 먹은 타코와 음료수..

개별 세션에 대한 내용은 적지 않았지만, 개인적으로 쉽고, 빠른 네트웍 처리와 AsyncTask의 큐 스케줄링을 지원하기위해 구글 프레임웍 코드에 들어가 있는 Volley 프로젝트가 가장 관심이 가네요.. ^^

마지막(선물)은 다들 아시겠지만, 구글 I/O는 참가비보다 더 비싼 선물을 참가자들에게 앵기는 것(?)으로 유명한데요.. 이날 하루에 받은 선물(등록시 티 줌)을 보면.. 티, 크롬 픽셀 그리고 안드로메다 피겨 입니다.. 그리고, 각종 스티커는 덤으로 얻어왔구요.. 우리나라 업체로는 유일하게, 우아한 형제가 서비스하는 배달의 민족 부스가 있었습니다.