Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Microsoft Azure를 통한 Push와 DB 이용방법

3.079 visualizaciones

Publicado el

Microsoft Azure를 통한 모바일 Push와 클라우드 DB 이용 방법입니다.

Publicado en: Software
  • Sé el primero en comentar

Microsoft Azure를 통한 Push와 DB 이용방법

  1. 1. 마이크로소프트 멜팅팟 Microsoft Azure 를 통한 모바일 Push 와 클라우드 DB 이용 방법 Younghwan Young xenonix@gmail.com http://xenonix.com
  2. 2. Table of Contents MICROSOFT AZURE 의 NOTIFICATION SERVICES ............................................................................4 MOBILE SERVICE PUSH 를 이용한 PUSH 전송 ...................................................................................6 MICROSOFT AZURE 시작하기........................................................................................................................................ 6 SERVICE BUS 추가하기................................................................................................................................................ 7 GOOGLE CLOUD MESSAGING FOR ANDROID API KEY 가져오기 .........................................................................13 MOBILE SERVICE 추가 ...............................................................................................................................................18 안드로이드 앱 준비하기............................................................................................................................................21 이클립스에서 안드로이드 앱 프로젝트 만들기 ................................................................................................23 프로젝트에 MICROSOFT AZURE SDK 추가하기....................................................................................................27 프로젝트에 GOOGLE PLAY SERVICE 라이브러리 추가하기...............................................................................32 안드로이드 앱에 PUSH 기능 추가하기..................................................................................................................38 안드로이드 앱 실행하기............................................................................................................................................44 안드로이드 앱으로 PUSH 전송하기........................................................................................................................45 안드로이드 앱에서 클라우드 DB 이용 .................................................................................................50 클라우드 DB 에 테이블 생성하기...........................................................................................................................50 데이터를 저장하는 JAVA 코드 작성하기.............................................................................................................53 테이블에 칼럼 추가하기............................................................................................................................................58 마치며......................................................................................................................................................59
  3. 3. Microsoft Azure 는 마이크로소프트가 서비스하는 클라우드 서비스 입니다. 이미 많은 분들이 알고 계시는 바와 같이 클라우스 서비스로는 Amazon Web Services, Google AppEngine, Heroku 등과 같은 서비스가 있습니다. 클라우드 서비스는 아래 그림과 같이 크게 SaaS, PaaS, IaaS 로 구분합니다. http://blog.creation.net/506#.U74Ez6iXDx4 SaaS 는 세일즈포스나 구글 앱스처럼 개인이나 기업이 원하는 소프트웨어를 바로 사용할 수 있도록 제공합니다. 예를들어 구글 드라이브나 지메일 등이 SaaS 에 포함됩니다. PaaS 는 클라우드 환경에서 애플리케이션을 실행할 수 있도록 플랫폼을 제공하는 서비스입니다. 구글 앱 엔진은 개발자가 Java, Python, PHP 등으로 만든 애플리케이션을 클라우드 환경에서 구동할 수 있게 해주는 PaaS 서비스입니다. IaaS 는 아마존 EC2 나 KT 유클라우드처럼 가상머신 서버나 네트워크 분산 등 인프라에 관련된 서비스를 제공합니다. 참고로 Microsoft Azure 의 원래 이름은 Windows Azure 였습니다.
  4. 4. http://azure.microsoft.com/ko-kr/ Microsoft Azure 는 앞서 살펴본 SaaS, PaaS, Iaas 세가지를 모두 제공합니다. 모든 서비스를 한곳에서 관리할 수 있기 때문에 이용자 입장에서는 조금 수월할 수 있습니다. 자 그럼, Windows Azure 에서 Push 전송하는 방법에 대해 자세히 알아보겠습니다. Microsoft Azure 의 Notification Services Microsoft Azure 에서는 Push 서비스를 Notification Services 라고 부릅니다. 그리고 Notification Services 는 아래와 같이 두 가지를 방법을 제공합니다. • Mobile Service Push • Notification Hub Mobile Service Push 는 Push 로 보내고 싶은 메세지를 Azure SQL 이라는 데이터베이스에 저장하면 Azure Mobile Service 가 저장된 메세지를 꺼내서 스마트폰으로 전달합니다.
  5. 5. http://www.slideshare.net/youngjaekim58/20140403-tech-daysazurenotificationhubservicebus Notification Hub 는 Mobile Service Push 과 다르게 Azure SQL 이 없습니다. 아래 그림과 같이 Push 메세지를 입력하면 데이터베이스에 저장하는 단계 없이 바로 Azure Topic 처리기를 거친 후 스마트폰으로 메세지를 전송합니다.
  6. 6. Azure Mobile Service Push 와 Notification Hub 의 특징을 구분해 보면 아래와 같습니다. Mobile Service Push 가볍게 Push 를 사용하고 싶을 때 Notification Hub 대량의 Push 를 전송하고 싶을 때 Mobile Service Push 를 이용한 Push 전송 이제 Mobile Service Push 를 통해 모바일 앱으로 Push 메세지를 전송하는 방법에 대해 자세히 살펴보겠습니다. Mobile Service Push 를 이용하기 위해서는 먼저 Microsoft Azure 계정이 있어야 합니다. 그리고 이 장에서는 Android 환경에서 모바일 앱을 만들어 볼 것이므로 Android 개발 환경을 준비하셔야 합니다. Microsoft Azure 에 접속한 후에는 아래 순서대로 진행할 것입니다. 1. SERVICE BUS 에 NAMESPACE 추가 2. MOBILE SERVICES 에 서비스 추가 3. 안드로이드 앱에 Push 기능 추가 그럼! 시작해 보겠습니다. Microsoft Azure 시작하기 Microsoft Azure 는 마이크로소프트의 로그인 계정을 그대로 사용합니다. MSN 메신저 아이디를 갖고 있거나 hotmail.com , live.com 등 이메일 계정을 갖고 계셔도 좋습니다. Microsoft Azure ( http://azure.microsoft.com ) 웹사이트에 접속하셔서 오른쪽 상단에 있는 PORTAL 을 클립합니다. 만약 Microsoft Azure 를 단 한번도 사용해본 적 없다면 FREE TRIAlL 을 클릭하세요. Microsoft Azure 의 모든 서비스를 30 일간 완전히 무료로
  7. 7. 사용하실 수 있습니다. 마이크로소프트 계정으로 Microsoft Azure 를 처음 로그인하면 간단한 정보를 입력하는 화면이 나타납니다. 아마존 웹서비스를 사용하실 때에는 개인 정보와 함께 신용카드 정보 등을 적어야 하지만 Microsoft Azure 는 자신의 휴대전화 번호를 입력하는 것으로 결제 정보 입력을 대신할 수 있습니다. SERVICE BUS 추가하기 Microsoft Azure 에 로그인을 완료면 아래 화면과 같이 현재 사용 중인 Azure 서비스 목록이 나타납니다. 처음 로그인 했다면 목록이 비어있을 것입니다. 그리고 화면 왼쪽 메뉴에 각각의 서비스 별로 0 이라는 숫자가 표시되어 있을 겁니다. 이 숫자는 사용중인 서비스 개수입니다.
  8. 8. 첫번째로 SERVICE BUS 에 네임스페이스(namespace)를 추가하겠습니다. 화면 왼쪽 메뉴 하단에 SERVICE BUS 를 클릭합니다. 이미 생성되어 있는 네임스페이스가 없으면 아래 화면과 같이 목록이 비어있습니다. CREATE A NEW NAMESPACE 버튼을 클릭해서 네임스페이스를 생성합니다. 네임스페이스 생성 창이 뜨면 원하는 네임스페이스 이름과 지역(REGION)을 선택합니다. 이 문서에서는 dabong( 브라질 월드컵을 기념하여 "따봉" )이라고 정했습니다. REGION 은 아래 화면과 같이 미국의 각지역, 유럽, 아시라, 남미, 일본 등을 선택할 수
  9. 9. 있습니다. 한국에서 빠른 지역은 아무래도 지리적으로 가까운 동아시아(East Asia)와 일본(Japan West)라고 합니다. 입력을 완료했다면 창 오른쪽 하단에 있는 V 버튼을 클릭합니다. 잠시 후 화면 하단에 아래와 같이 네임스페이스 생성이 완료됐다고 나타날 것입니다. SERVICE BUS 의 네임스페이스 목록에서도 아래와 같이 생성한 네임스페이스를 볼 수 있습니다. 생성한 네임스페이스의 이름을 클릭해서 상세 화면으로 이동합니다.
  10. 10. 방금 생성한 dabong 이라는 네임스페이스 이름이 화면 상단에 보입니다. 그리고 바로 아래에 ALL, QUEUES, TOPIC, RELAYS, NOTIFICATION HUBS, CONFIGURE 등 메뉴가 있습니다. 우리는 NOTIFICATION HUBS 를 이용할 것이므로 이 메뉴를 클릭합니다. NOTIFICATION HUBS 탭을 클릭하면 아래와 같이 NOTIFICATION HUBS 생성 버튼을 볼 수 있습니다. CREATE A NEW NOTIFICATION HUB 버튼을 클릭합니다.
  11. 11. 화면 하단에 NOTIFICATION HUB 항목에서 QUICK CREATE 를 선택합니다. 그리고 NOTIFICATION HUB NAME 항목에 원하는 이름을 입력한 후 CREATE A NEW NOTIFICATION 버큰을 클릭해서 생성을 시작합니다.
  12. 12. NOTIFICATION HUB 가 정상적으로 생성되면 아래 화면과 같이 목록에 나타납니다. 원하는 NAME 항목을 클릭해서 상세 화면으로 이동합니다. DASHBOARD 는 NOTIFICATION HUB 에 대한 여러가지 정보를 그래프나 수치로 볼 수 있는 화면입니다.
  13. 13. 이제 상단 메뉴에서 CONFIGURE 를 클릭합니다. NOTIFICATION HUB 의 CONFIGURE 화면을 조금 내려보면 아래 화면과 같이 google cloud messaging setting 항목을 볼 수 있습니다. 이 항목의 GCM API KEY 입력란에 구글에서 제공하는 API KEY 값을 입력하면 됩니다. Google Cloud Messaging for Android API key 가져오기 안드로이드용 Google Cloud Messaging API key 를 가져오기 위해서는 구글 개발자 콘솔에 접속해야 합니다. 접속 URL 은 다음과 같습니다. https://console.developers.google.com 접속해서 구글 계정으로 로그인을 하면 아래와 같은 화면이 볼 수 있습니다.
  14. 14. 프로젝트가 아직 없다면 Create Project 를 클릭해서 프로젝트를 생성합니다. 이 문서에서는 dabong 이라는 프로젝트를 생성했습니다. 여기에서 Project Number 를 기억해 두시는게 좋습니다. 나중에 안드로이드 프로그램을 작성할 때 사용하기 때문입니다. 경고!!! 위 화면에 나타난 Project Number 를 기억하시라는게 아닙니다. ^^ 여러분의 Google Developers Console 에 있는 Project Number 입니다! 우리의 목적이었던 API KEY 를 찾아야겠습니다. 왼쪽 목록에서 APIS & AUTH 를 선택합니다. 그리고 APIs 클릭합니다. 아래 화면과 같이 API 목록이 나타나면 이 중에서 Google Cloud Messaging for Android 항목을 찾습니다.
  15. 15. OFF 버튼을 클릭하면 Google Cloud Messaging for Android 기능이 활성화 되면서 버튼이 초록색 ON 으로 변경됩니다. 그 다음으로 왼쪽 메뉴에서 Credentials 을 클릭해서 아래 화면과 같이 Public API access 화면으로 이동합니다.
  16. 16. 이전에 생성해 둔 Public API 가 없다면 아래 화면과 같이 Public API access 항목의 오른쪽 영역이 비어있을 것입니다. 그러면 Create new Client ID 를 클릭해서 API Key 생성 창을 띄웁니다. 아래와 같이 Create a new key 창이 뜨면 Server key 를 선택합니다. Create a server key and configure allowed IPs 화면이 뜨면 창 아래 Create 버튼을 클릭합니다. 만약 API KEY 에 접근하는 서버를 제한하고 싶을 때에는 아래 입력란에 예제와 같이 IP 를 입력하면 됩니다.
  17. 17. Create 버튼을 클릭하면 아래 화면과 같이 새로 생성된 API KEY 가 나타납니다. 이 Alza... 어쩌구 하는 API KEY 문자열을 복사합니다. 다시 Microsoft Azure -> NOTIFICATION HUBS -> CONFIGURE 화면으로 돌아와서 google cloud messaging settings 항목에 붙여넣고, 하단에 SAVE 버튼을 클릭합니다. 이제 화면 하단에 있는 SAVE 버튼을 클릭합니다. 정상적으로 저장이 되면 아래와 같이 Successfully updated 를 볼 수 있습니다.
  18. 18. 만약 아래와 같이 붉은 색 오류 메세지가 나타나면 API KEY 나 권한이 잘못됐거나 Google Cloud Messaging for Android 가 ON 으로 되어있지 않을 가능성이 있습니다. MOBILE SERVICE 추가 지금까지 Microsoft Azure 의 NOTIFICATION HUBS 에 네임스페이스를 만들고 그 안에 Push 를 전송할 모바일 앱의 API KEY 를 등록하는 과정을 살펴봤습니다. 이제 MOBILE SERVICE 를 추가해야 합니다. MOBILE SERVICE 는 서비스 이름에서 바로 알수 있듯이 모바일 관련된 기능을 모아둔 서비스입니다. Microsoft Azure 화면 왼쪽에 MOBILE SERVICES 를 선택합니다. CREATE A NEW MOBILE SERVICE 를 클릭합니다. 아래 화면과 같이 Create a Mobile Service 창이 만들고자 하는 모바일 서비스에 대한 정보를 입력합니다. 이 문서에서는 dabong(따봉) 앱을 만들고 있으므로 URL 에 dabong 을 입력했습니다. DATABASE 는 새로 추가하기 위해 Create a new SQL database instance 를 선택했습니다. 지역은 동아시아(EAST ASIA)로 했습니다.
  19. 19. BACKEND 는 MOBILE SERVICE 에서 사용할 프로그래밍 언어를 선택하는 항목입니다. 여기서는 JavaScript 를 선택했습니다. 오른쪽 하단에 있는 화살표 버튼을 클립해서 다른 과정으로 진행하면 아래 화면과 같이 데이터베이스 설정 화면을 볼 수 있습니다. NAME 에는 기본 값은 바로 앞 단계에서 입력했던 URL 에 _db 라는 문자열이 붙어 있습니다. SERVER 는 새로 만들 것이므로 New SQL database server 를 선택했습니다. SERVER LOGIN NAME 과 SERVER LOGIN PASSWORD 에는 서버에 접근할 이용자(User) 정보를 입력합니다. REGION 은 서버가 놓여질 물리적 위치를 선택합니다. 모두 입력했다면 오른쪽 하단에 V 버튼을 클릭해서 MOBILE SERVICE 를 생성합니다.
  20. 20. MOBILE SERVICE 가 정상적으로 생성됐습니다. NAME 항목을 클릭하면 아래 화면과 같이 선택한 MOBILE SERVICE 에 대한 자세한 내용을 볼 수 있습니다. 간단하게 둘러보면 상단에는 DASHBOARD, DATA, API, SCHEDULER 등이 있습니다. 그 바로 아래에는 Windows Store, Windows Phone 8, iOS, Android, HTML/JavaScript 등이 있습니다.
  21. 21. 안드로이드 앱 준비하기 안드로이드 앱에 Push 기능을 넣을 것이므로 당연히 안드로이드 앱을 준비해야 합니다. 안드로이드 앱을 준비하는 방법은 두 가지가 있습니다. 첫번째는 Microsoft Azure 가 제공하는 안드로이드 예제 프로젝트를 내려 받아 만드는 방법이고, 두번째는 이미 개발되어 있거나 직접 프로젝트를 생성한 안드로이드 소스 코드에 필요한 부분만 추가하는 방법입니다. 첫번째, Microsoft Azure 에서 제공하는 안드로이드 프로젝트는 내려 받는 방법은 아주 간단합니다. 생성한 MOBILE SERVICE 의 첫 화면에서 상단에 Android 를 선택한 후 GET STARTED 아래의 CREATE A NEW ANDROID APP 을 클릭합니다.
  22. 22. 그러면 아래 화면과 같이 앱을 개발하기 위한 개발툴도 내려 받을 수 있고 안드로이드 앱에서 사용할 DB Table 도 생성할 수 있습니다. 끝으로 3 번 항목에서 바로 실행할 수 있는 안드로이드 앱의 소스 코드를 내려 받을 수 있습니다. 만약 화면 상단에서 Android 가 아니라 iOS 나 Windows Phone 을 선택하면 그에 알맞는 개발툴과 소스 코드를 내려 받을 수 있습니다. 두번째, 이미 안드로이드 앱이 만들어져 있고 그 앱에 Microsoft Azure 의 Push 를 이용하고자 하는 경우입니다. 앞서 살펴본 화면에서 보였을 텐데요. CREATE A NEW ANDROID APP 바로 아래에 있는 CONNECT AN EXISTING ANDROID APP 을 클릭하면 됩니다. 예제 소스코드를 내려 받을 때와는 다르게 이미 만들어져 있는 안드로이드 앱에 추가해야 할 내용들을 볼 수 있습니다. 이 내용은 이 다음 장에서 자세히 살펴볼
  23. 23. 것입니다. 이클립스에서 안드로이드 앱 프로젝트 만들기 먼저 이클립스에서 안드로이드 앱을 만들어 보겠습니다. 이 내용은 완전히 처음부터 시작하는 분들을 위한 내용이므로 이미 안드로이드 앱 프로젝트가 만들어져 있다면 건너뛰여셔도 됩니다. 또한, 이 문서는 안드로이드 개발을 위한 환경이 이미 갖춰져 있는 경우를 전재로 설명합니다. 그러므로 개발 환경이 마련되어 있는 않은 경우에는 아래 링크를 통해 이클립스, 안드로이드 SDK 등을 처리하시기 바랍니다. 덧붙여, 안드로이드 스튜디오를 사용하셔도 좋습니다만, 이 문서는 이클립스 환경을 기준으로 다루므로 가능하시다면 동일한 환경에서 따라하시기를 권장합니다. • 이클립스 : http://eclipse.org/downloads/ • 안드로이드 SDK : http://developer.android.com/sdk/index.html • 안드로이드 스튜디오 : https://developer.android.com/sdk/installing/studio.html 이클립스와 안드로이드 SDK 가 모두 설치되었다면 안드로이드 프로젝트를 하나 만듭니다. 이클립스의 프로젝트 생성 메뉴에서 Android Application Project 를 선택합니다.
  24. 24. New Android Application 창이 뜨면 만들고자 하는 안드로이드 프로젝트 정보를 입력합니다. Application Name 항목을 입력하면 그 아래 내용들은 자동으로 작성됩니다. 주의사항은 Package Name 은 꼭 확인해서 올바르게 입력하시기 바랍니다. Next 버튼을 클릭하면 아래와 같은 화면이 나타납니다. 변경하실게 없다면 Next 버튼을 클릭합니다.
  25. 25. 안드로이드 앱에 사용할 아이콘 이미지를 입력하는 화면입니다. 일단 Next 버튼을 클릭해서 계속 진행합니다.
  26. 26. 이 문서에서는 간단한 예제를 만드는 것이므로 고민하지 않고 Fullscreen Activity 를 선택했습니다. 그리고 Next 버튼을 클릭합니다. 일반적으로 MainActivity 라는 이름을 사용하는 것 같습니다. 이 문서에서도 그냥 MainActivity 라고 입력했습니다. 끝으로 Finish 버튼을 클릭해서 프로젝트를 생성합니다.
  27. 27. 잘 생성됐다면 아래와 같은 화면을 볼 수 있습니다. 프로젝트에 Microsoft Azure SDK 추가하기 안드로이드 앱이 준비되었으니 Push 기능을 추가해보겠습니다. 가장 먼저 해야할 작업은 Microsoft Azure SDK 를 안드로이드 프로젝트에 추가해야 합니다. Microsoft Azure 의 MOBILE SERVICE 화면에서 아래와 같이 CONNECT AN EXISTING ANDROID APP 항목을 선택한 후 1 번 Download the Mobile Services SDK for Android 를 클릭합니다.
  28. 28. 안드로이드용 SDK 다운로드 창이 뜨면 파일을 저장합니다. 또는 Microsoft Azure SDK 다운로드 페이지에서 원하는 SDK 를 선택해서 받을 수도 있습니다. http://azure.microsoft.com/en-us/downloads/ 내려받은 SDK ZIP 파일의 압축을 풀면 아래와 같이 mobileservices, notificationhubs, notification 세 개의 디렉터리가 생성됩니다. 그 안에는 jar 이 들어있습니다.
  29. 29. 이 jar 파일 중에서 아래 목록에 해당하는 파일을 안드로이드 프로젝트 안에 있는 libs 디렉터리에 복사해 넣습니다. 디렉터리 파일명 mobileservices gson-2.2.2.jar mobileservices-1.1.5.jar notificationhubs notification-hubs-0.3.jar notifications notifications-1.0.1.jar 총 4 개의 파일을 안드로이드 프로젝트 libs 디렉터리 안에 복사해 넣고 이클립스에서 F5 키를 입력하면 아래와 같이 라이브러리가 추가된 것을 볼 수 있습니다.
  30. 30. 그리고 Google Play Service 라이브러리를 등록해야 합니다. Package Explorer 에서 마우르 오른쪽 버튼으로 프로젝트를 클릭하면 아래 화면과 같이 메뉴가 나타납니다. 이 메뉴 맨 아래에 있는 Properties 를 클릭합니다. Properties 창이 뜨면 왼쪽 메뉴에서 Android 를 선택합니다. 아래 화면은 기본적인 Android 의 설정 화면입니다.
  31. 31. 먼저 화면 가운데에 있는 Project Build Target 값을 아래 화면과 같이 Google APIs 로 변경합니다. 그 다음으로 Library 영역 아래 목록에 google-play-services-lib 라는 항목이 있는지 확인합니다. 아래와 같이 appcompat_v7 만 존재한다면 오른쪽 Add 버튼을 클릭합니다.
  32. 32. 그런데 아마 처음 프로젝트를 시작하는 경우에는 아래 화면과 같이 아무것도 보이지 않을 것입니다. 당황하지 않고 Cancel 버튼을 살포시 누릅니다. 그리고 Properties 창에서 OK 눌러 저장하고 창을 닫습니다. 프로젝트에 Google Play Service 라이브러리 추가하기 Google Play Service 라이브러리를 프로젝트의 라이브러리에 등록해야 합니다. 우선 이클립스와 연결되어 있는 안드로이드 SDK 가 어디 있는지 확인해 보겠습니다. 이클립스의 Preferences 창을 열고 왼쪽 메뉴에서 Android 를 선택합니다. 화면 오른쪽에 SDK Location 값이 바로 SDK 가 설치된 위치입니다. 잠시 후에 이 위치를 입력해야 하므로 기억해 두시면 좋습니다. 그리고 Android SDK Manager 를 실행합니다. 이클립스에서는 상단 메뉴바에 안드로이드 모양의 아이콘이 있습니다.
  33. 33. Android SDK Manager 창이 열리면 Google Play services 항목을 선택해서 install 버튼을 클릭해서 설치합니다. 정상적으로 설치가 되면 아래 화면과 같이 installed 라고 표시됩니다. 자 이제 Google Play services 를 이클립스로 import 해야 합니다. 아래 화면과 같이 Package Explorer 에서 마우스 오른쪽 버튼을 눌러 Import 를 선택합니다.
  34. 34. Import 창이 열리면 Android 항목에 Existing Android Code Into Workspace 를 선택한 후 Next 버튼을 클릭합니다. Import Projects 창이 열리면 Browser 버튼을 클릭합니다.
  35. 35. 디렉터리를 선택하는 창이 뜨면 아래와 같이 Android SDK 가 설치된 디렉터리 안에서 Extras/google/google_play_services/libproject/google-play-services_lib 디렉터리를 선택한후 Open 버튼을 클릭합니다. 그러면 아래 화면과 같이 Google Play SDK 가 등록됩니다. Finish 를 클릭해서 저장합니다.
  36. 36. 잘 저장됐다면 Package Explorer 에 google-play-services_lib 을 볼 수 있습니다. 이제 다시 한번 프로젝트의 Properties 창을 열고 Android 화면으로 이동합니다. Add 버튼을 클리합니다. 이전에는 보이지 않았던 google-play-services_lib 가 보일 것입니다. 선택한 후 OK 버튼을 클릭합니다.
  37. 37. Library 목록에 google-play-services_lib 가 추가됐다면 OK 버튼을 클릭해서 저장합니다.
  38. 38. 안드로이드 앱에 Push 기능 추가하기 이제 본격적으로 코드를 작성해 보겠습니다. 주의할 점은 앞으로 소스 코드 안에 빨간색 굵은 글씨로 표시된 부분은 꼭 알맞게 수정하셔야만 합니다. AdnroidManifest.xml 파일을 열고 아래 내용을 <manifest></manifest> 안에 추가합니다. <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.example.dabong.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name=" com.example.dabong.permission.C2D_MESSAGE"/> 아래 내용은 <application></application> 안에 추가합니다. <receiver android:name="com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- Receives the registration id. --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.example.dabong" /> </intent-filter> </receiver> MainActivity.java 파일을 열고 아래 내용을 입력합니다. import android.os.AsyncTask; import com.google.android.gms.gcm.*; import com.microsoft.windowsazure.messaging.*; import com.microsoft.windowsazure.notifications.NotificationsManager; import com.google.android.gms.gcm.GoogleCloudMessaging; import com.microsoft.windowsazure.messaging.NotificationHub; MainActivity 클래스 안에는 아래 코드를 입력합니다.
  39. 39. private String SENDER_ID = "SENDER_ID"; private String CONNECTION_STRING = "CONNECTION_STRING"; private String NOTIFICATION_HUB_NAME = "NOTIFICATION_HUB_NAME"; private GoogleCloudMessaging gcm; private NotificationHub hub; @SuppressWarnings("unchecked") private void registerWithNotificationHubs() { new AsyncTask() { @Override protected Object doInBackground(Object... params) { try { String regid = gcm.register(SENDER_ID); hub.register(regid); } catch (Exception e) { return e; } return null; } }.execute(null, null, null); } MainActivity 클래스 안에 onCreate() 메소드 맨 끝에 아래 내용을 추가합니다. NotificationsManager.handleNotifications(this, SENDER_ID, MyHandler.class); gcm = GoogleCloudMessaging.getInstance(this); String connectionString = CONNECTION_STRING; hub = new NotificationHub(NOTIFICATION_HUB_NAME, connectionString, this); registerWithNotificationHubs(); 그러면 아래 화면과 같이 방금 추가한 코드에 빨간색 표시가 나타날 것입니다. 이것은 MyHandler.class 가 없기 때문이므로 MyHandler 클래스를 작성해야 합니다. Package Explorer 에서 New -> Class 를 선택합니다.
  40. 40. New Java Class 창이 열리면 Name 에 MyHandler 라고 입력한 후 Finish 버튼을 클릭합니다. 아래 화면과 같이 MyHandler 클래스가 생성됐습니다.
  41. 41. 이 MyHandler.java 파일에 아래 내용을 덮어 씌웁니다. package com.example.dabong; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.widget.Toast; import com.example.dabong.MainActivity; import com.microsoft.windowsazure.notifications.NotificationsHandler; public class MyHandler extends NotificationsHandler { public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; Context ctx; @Override public void onReceive(Context context, Bundle bundle) { ctx = context; String nhMessage = bundle.getString("msg"); System.out.println("RECEIVE"); sendNotification(nhMessage); Toast.makeText(context, nhMessage, 3).show(); } private void sendNotification(String msg) { mNotificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, new Intent(ctx, MainActivity.class), 0);
  42. 42. NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Notification Hub Demo") .setStyle(new NotificationCompat.BigTextStyle() .bigText(msg)) .setContentText(msg); mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } } 끝으로 안드로이드 소스 코드 안에 Microsoft Azure 정보를 입력해야 합니다. MainActivity.java 파일을 다시 열고 앞서 추가했던 코드를 봅니다. 아래 SENDER_ID, CONNECTION_STRING, NOTIFICATION_HUB_NAME 값을 알맞게 채워넣어야 합니다. SENDER_ID 값은 Google Developers Console 에 접속해서 원하는 프로젝트를 클릭하면 아래 화면과 같이 볼 수 있습니다. Project Number 항목의 숫자 값을 SENDER_ID 에 입력합니다. CONNECTION_STRING 값은 Microsoft Azure 의 SERVICE BUS -> NOTIFICATION HUBS 화면에서 원하는 프로젝트를 선택하면 볼 수 있습니다. 화면 오른쪽에 보면 View Connection String 링크가 있습니다.
  43. 43. View Connection String 을 클릭하면 아래 화면과 같이 Access connection information 창이 열리면 DefaultListenSharedAccessSignature 의 CONNECTION STRING 값을 복사해서 소스 코드의 CONNECTION_STRING 값에 입력합니다. NOTIFICATION_HUB 값은 아래 화면과 같이 바로 Microsoft Azure 에 등록한 NOTIFICATION HUB 의 NAME 값입니다. 이 문서에서는 dabong 을 사용하고 있습니다.
  44. 44. 모든 값을 소스 코드에 입력하면 아래와 같은 모습일 것입니다. 안드로이드 앱 실행하기 지금까지 만든 안드로이드 앱을 실행해 보겠습니다. 이클립스 상단 메뉴 Run -> Run 을 클릭합니다. 이클립스의 Package Explorer 에서 마우스 오른쪽 버튼을 클릭해서 Run 을 실행해도 됩니다. 만약 아래와 같은 창이 열리면 Android Application 를 선택한 후 OK 버튼을 클릭합니다. 아래와 같이 안드로이드 단말기를 선택하는 화면이 나오면 적절한 것을 선택한 후 OK 를 클릭합니다.
  45. 45. 안드로이드 앱이 잘 실행됐습니다. 안드로이드 앱으로 Push 전송하기 Push 메세지를 방금 만든 안드로이드 앱으로 전송해 보겠습니다.
  46. 46. 다시 Microsoft Azure 의 MOBILE SERVICES 화면을 엽니다. Push 를 보내고자 하는 MOBILE SERVICE 를 클릭해서 상세 화면으로 들어갑니다. 아래 화면과 같이 SCHEDULER 를 선택합니다. SCHEDULER 는 일정 시간마다 또는 원하는 시점에서 특정한 작업을 실행하는 기능입니다. 리눅스에서는 cron, 윈도우에서는 스케쥴러, 일반적인 개념으로는 "Run" 버튼에 비유할 수 있습니다. Push 를 전송하는 것도 하나의 작업이므로 MOBILE SERVICES 에서 제공하는 SCHEDULER 를 사용하면 됩니다. 그러면 CREATE A SCHEDULER JOB 을 클릭해서 새로운 작업을 생성합니다. 우리는 dabong 앱으로 Push 를 전송할 것이므로 작업 이름을 dabong_push 라고 하겠습니다. JOB NAME 에 dabong_push 라고 입력합니다. 바로 아래 SCHEDULE 에는 작업을 수행할 간격을 지정할 수 있습니다. On demand 를 선택하면 "Run" 버튼을 클릭해야만 작업이 수행합니다. 이 문서에서는 On demand 를 선택하겠습니다. V 버튼을 클릭해서 저장합니다.
  47. 47. 생성이 완료되면 아래와 같이 목록에 나타납니다. 한가지 눈에 띄는 것은 STATUS 에 Disabled 라고 표시되어 있습니다. 이것은 이 JOB 이 불가능하다는 것이 아니라 일정 시간마다 실행되도록 설정되지 않았다는 것을 의미합니다. 앞서 우리는 On demand 로 지정해서 "Run" 버튼을 클릭할 때만 실행하도록 했습니다. 그렇기 때문에 Disabled 로 표시된 것입니다. JOB 을 클릭해서 상세 화면으로 들어가면 CONFIGURE 와 SCRIPT 메뉴를 볼 수 있습니다. SCRIPT 메뉴를 선택하면 아래 화면과 같이 JavaScript 코드가 입력되어 있습니다.
  48. 48. SCRIPT 화면에 입력되어 있는 JavaScript 코드를 아래 코드로 덮어 쓰기 합니다. 그리고 NOTIFICATION_HUB_NAME 과 CONNECTION_STRING 에 MainActivity 에 입력했던 값을 입력합니다. function dabong_push() { var azure = require('azure'); var notificationHubService = azure.createNotificationHubService('NOTIFICATION_HUB_NAME', 'CONNECTION_STRING'); notificationHubService.gcm.send(null,'{"data":{"msg" : "Hello from Mobile Services!"}}', function (error) { if (!error) { console.warn("Notification successful"); } else { console.warn("Notification failed" + error); } } ); } 주의!!! 위 JavaScript 에 입력하는 CONNECTION_STRING 은 Push 발송을 위한 것이므로 DefaultFullSharedAccessSignature 항목의 값을 입력해야 합니다. 안드로이드 Java 코드에 입력한 CONNECTION_STRING 은 "Listen" 수신용 문자열 키입니다. 만약 Java 코드에 FullShared 권한의 키를 입력하게 되면 자칫 악의적으로 활용될 수 있으므로 조심하셔야 합니다.
  49. 49. 코드를 모두 작성했으므로 Push 를 전송해 보겠습니다. 화면 하단에 RUN ONCE 버튼을 클릭하세요. dabong_push 가 잘 실행됐다고 나옵니다. MOBILE SERVICES 화면의 LOGS 화면에서도 Notification successful 이라는 기록을 볼 수 있습니다. 안드로이드 앱에도 아래 화면과 같이 메세지가도착했습니다.
  50. 50. 안드로이드 앱에서 클라우드 DB 이용 Microsoft Azure 는 SQL DATABASE 서비스를 제공합니다. 앞 장에서 dabong 에 대한 MOBILE SERVICE 를 만들 때 데이터베이스도 함께 생성했습니다. 이때 생성된 데이터베이스는 아래와 같이 SQL DATABASE 화면에서 확인할 수 있습니다. 우리가 생서한 DATABASE 에 안드로이드 앱을 연결해서 직접 데이터를 읽고 쓸수 있습니다. 서버 개발자 없이 앱 개발자 혼자서 프로젝트를 진행하는 경우에도 Microsoft Azure 가 모든 인프라를 제공하기 때문에 큰 고민없이 원하는 모바일 앱을 만들 수 있습니다. 기업에서도 한정된 인력으로 원하는 모바일 서비스를 조금더 빠르고 편리하게 만들 수 있습니다. 클라우드 DB 에 테이블 생성하기 dabong_db 라는 것은 DB 입니다. 관계형 데이터베이스(RDBMS)는 DB 안에 테이블을 생성해야만 데이터를 저장할 수 있습니다. 마찬가지로 Microsoft Azure 의 SQL DATABASE 도 테이블을 생성해 주어야 합니다. 아래 화면은 MOBILE SERVICE 를 만들 때 함께 생성한 dabong_db 상세 화면입니다. 참고로 테이블은 SQL DATABASE 화면에서 생성하지 않으므로 아래 내용을 잘 따라오시기를 바랍니다.
  51. 51. 다시 MOBILE SERVICES 화면에서 원하는 NAME 을 선택합니다. 상단 메뉴에 DATA 를 클릭합니다. ADD A TABLE 을 클릭합니다. 테이블의 이름과 권한을 알맞게 입력합니다. 여기서는 Item 이라는 이름의 테이블을 생성합니다.
  52. 52. Item 테이블이 잘 생성됐습니다. 클릭에서 상세 화면으로 들어갑니다. 아직 아무런 값이 없다고 표시됩니다.
  53. 53. 데이터를 저장하는 JAVA 코드 작성하기 데이터를 저장하는 예제를 작성하는 것이므로 앱 하단에 Dummy Button 을 클릭하면 클라우드 DB 에 Item 값이 하나씩 저장되는 간단한 기능을 만들어 보겠습니다. MainActivity 클래스에 아래 import 코드를 추가합니다. import com.microsoft.windowsazure.mobileservices.*; 그리고 MainActivity 클래스 안에 아래 코드를 입력합니다. private MobileServiceClient mClient; mClient 는 Micorosoft Azure 에 접근할 수 있는 인스턴스를 저장하게 됩니다. MainActivity 클래스의 onCreate() 메소드 맨 끝에 아래 코드를 입력합니다. try { mClient = new MobileServiceClient( "APP_URL", "APP_KEY", this ); } catch (MalformedURLException e) { e.printStackTrace(); } APP_URL 과 APP_KEY 에 입력할 내용은 MOBILE SERVICE 화면에서 CONNECT AN EXISTING ANDROID APP 항목을 펼치면 확인 할 수 있습니다.
  54. 54. 아래 화면에서 mClient = new MobileServiceClient( ) 내용을 그대로 복사해서 MainActivity 클래스의 onCreate( ) 메소드 안에 붙여넣으면 됩니다. 이제 Item 테이블에 대한 Model 클래스를 작성해야 합니다. Package Explorer 에서 마우스 오른쪽 버튼을 클릭한 후 New -> Class 를 선택합니다.
  55. 55. Name 에 Item 이라고 입력한 후 Finish 버튼을 클릭합니다. Item 테이블에 저장항 칼럼을 아래 코드와 같이 작성합니다.
  56. 56. public String Id; public String Text; 이 문서에서 만들고 있는 dabong 에서는 Item 클래스를 아래와 같이 작성했습니다. 파일을 저장한 후 MainActivity.java 파일을 열겠습니다. Dummy Button 을 클릭할 때마다 Item 값을 DB 테이블에 저장할 것이므로 mDelayHideTouchListener 의 onTouchLisitener 에 데이터를 저장하는 코드를 추가하겠습니다. 데이터 저장 코드는 아래와 같습니다. Item item = new Item(); item.Text = "Awesome item"; mClient.getTable(Item.class).insert(item, new TableOperationCallback<Item>() { public void onCompleted(Item entity, Exception exception, ServiceFilterResponse response) { if (exception == null) { // Insert succeeded } else { // Insert failed } } }); 위 코드는 MOBILE SERVICE 의 CONNECT AN EXISTING ANDROID APP 화면에서 얻을 수 있습니다.
  57. 57. 안드로이드 Java 코드에 입력한 모습은 아래와 같습니다. 앱을 실행합니다. 앱이 정상적으로 구동되면 앱 화면 하단에 있는 Dummy Button 을 클릭합니다. 그리고 MOBILE SERVICE 의 DATA 화면에 접속합니다.
  58. 58. Item 테이블을 클릭해서 들어가면 아래 화면과 같이 데이터가 저장된 것을 확인할 수 있습니다. 테이블에 칼럼 추가하기 만약 Item 테이블에 address 칼럼을 추가하고 싶을 수도 있습니다. 테이블에 칼럼을 추가하는 방법은 매우 간단합니다. DB 테이블을 직접 변경할 필요 없이 아까 작성했던 Item.java 파일을 열고 아래와 같이 입력하면 됩니다. 추가하고자 하는 칼럼을 Model 클래스에 public 멤버 변수로 선언하면 됩니다. 그리고 데이터 저장할 때 아래와 같이 값만 입력하면 됩니다.
  59. 59. 다시 안드로이드 앱을 빌드해서 실행해서 아까와 마찬가지로 Dummy Button 을 클릭하면 아래 화면과 같이 자동으로 Item 테이블에 Address 칼럼이 추가된 후 item.Address 에 입력했던 SEOUL 이란 문자열도 잘 저장된 걸 볼 수 있습니다. 마치며 지금까지 Microsoft Azure 를 이용하여 Push 를 전송하고 클라우드 DB 에 데이터를 저장하는 방법을 살펴봤습니다. 이 문서에서 작성한 안드로이드 앱 소스 코드는 아래 URL 에서 받으실 수 있습니다. https://github.com/ooti/Dabong ZIP 파일은 https://github.com/ooti/Dabong/archive/master.zip 늘 행복하세요. Younghwan Yong http://xenonix.com

×