Skip to content
Brad edited this page Jul 9, 2013 · 27 revisions

본 가이드는 안드로이드 개발자를 위한 페이지이며 SDK를 Import하여 앱을 쉽게 개발하기 위한 가이드입니다.

가이드를 보실 때에 Startup Project소스와 비교하시면 쉽게 이해가 될 것입니다.

baas.io Android SDK 는 오픈소스로 제공되고 있습니다. SDK 코드의 수정이나 개선된 내용은 pull request 를 요청하세요. android 개발자 여러분의 참여를 환영합니다.

※ 개발하기 전에 다시 한번 체크하기

  • baas.io에 가입이 필요합니다. baas.io 가입 페이지에서 가입하실 수 있습니다.
  • Android ADT 및 SDK를 항상 최신으로 유지하는 것을 권장합니다. 개발툴은 "Get the Android SDK"를 확인하시기 바랍니다.
  • Text file encoding 방법이 UTF-8 기준으로 개발되어 있습니다. 사용하시는 개발툴의 Text file encoding 설정이 UTF-8로 되어 있는지 확인합니다.
  • 처음 개발하실 때에는 다운로드 페이지에서 Android용 baas.io Startup Project를 다운받아 사용하실 것을 권장합니다.

새로운 프로젝트 생성하기

baas.io를 이용하여 개발할 App의 프로젝트를 생성합니다.

1. "New-Android Application Project"를 선택하여 새로운 Project를 생성합니다.

<New android application project>

2. "New Android Application"에서 필요한 정보를 넣어 주고 "Finish"를 눌러 프로젝트를 생성합니다.

<New android application 다이얼로그>


baas.io Android SDK와 연동하기

앞에서 생성한 프로젝트와 baas.io Android SDK를 연동합니다. Import하는 방법은 jar 라이브러리로 Import하는 방법과 Project로 Import하는 방법이 있습니다.

> Jar 라이브러리로 Import

jar 라이브러리를 Import하는 방법은 ADT 버전 22에서는 추가적으로 Build Path를 설정해 주어야 합니다. 이전 버전은 "Step 3. Build path 설정"을 하지 않아도 됩니다.

Step 1. 라이브러리 파일 다운로드
  1. 라이브러리 최신 버전은 이 링크에서 다운로드 할 수 있습니다.
  2. 다운로드 받은 zip파일을 원하는 위치에 압축해제합니다.
Step 2. 라이브러리 파일들을 프로젝트로 복사
  1. 생성된 프로젝트에 libs 폴더를 생성하고 다운로드 받은 jar파일을 복사합니다.
  2. Eclipse ADT에서 libs폴더가 보이지 않으면 프로젝트를 선택하여 F5를 눌러 refresh합니다.
Step 3. Build path 설정(ADT 22)
  1. Package Explorer 화면에서 생성된 프로젝트를 선택하고 Properties를 선택합니다.
  2. Properties에서 Java Build Path를 선택합니다.
  3. Order에서 Android Private Libraries 항목이 체크가 안되어 있다면 체크하고 확인을 선택합니다.

<Java Build Path 설정>

※ 라이브러리 파일

다운로드 받은 라이브러리 파일들은 아래와 같습니다.

  • baasioandroid.jar
    • baas.io의 Core 라이브러리 입니다.
  • gcm.jar
  • jackson-core.asl-1.9.1.jar, jackson-mapper-asl-1.9.1.jar
    • JSON 파서로 Jackson을 사용하고 있습니다.
  • spring-android-core-1.0.1.RELEASE.jar, spring-android-rest-template-1.0.1.RELEASE.jar
  • slf4j-android-1.6.1-RC1.jar
    • 로그를 위한 모듈입니다.

> Project로 Import

Project로 Import합니다. baas.io Android SDK와 연동하여 디버깅을 할 수 있습니다.

Step 1. 소스 다운로드하기

- git clone

baas.io android SDK 는 오픈 소스로 제공됩니다. clone을 받으시거나 fork를 하셔서 자유롭게 이용하실 수 있습니다.

git clone https://github.com/baasio/baas.io-sdk-android.git

- 압축(Zip) 파일 다운로드

아래의 링크에서 zip파일을 다운로드 받아 원하는 위치에 압축해제 합니다.

https://github.com/baasio/baas.io-sdk-android/archive/master.zip
Step 2. SDK 프로젝트 Import

1. "File-Import" 를 선택합니다.

<Import>

2. Import 다이얼로그에서 "General-Existing Projects into Workspace"를 선택하고 "Next"버튼을 선택합니다.

<Existing Projects into Workspace>

3. 다음 Import 다이얼로그 화면에서 "Select root directory"의 "Browse"버튼을 눌러 다운로드 받은 SDK 폴더를 선택하고, "Projects:"에서 BaasioAndroid 프로젝트를 선택하고 "Finish"를 선택합니다.

<Import BaasioAndroid project>

4. "Project-Clean..."하여 Clean Build하면 Import가 완료됩니다.

Step 3. 생성한 프로젝트와 연동

1. 생성된 프로젝트에서 오른쪽 마우스를 클릭하여 Properties를 선택합니다.

<Properties 다이얼로그>

2. Properties 다이얼로그에서 Android를 선택하고 아래에 있는 Library에서 Add버튼을 선택합니다.

<Import>

3. Projection Selection 다이얼로그에서 BaasioAndroid 프로젝트를 선택하고, "OK"를 선택합니다.

<Import>


기본 설정

baas.io Android SDK를 이용하기 위해서는 간단한 기본 설정이 필요합니다.

기본적인 baas.io의 기본적인 데이터 서비스를 사용하기 위해서는 Android 앱의 전역 클래스인 Application를 상속받아 baas.io().init()을 호출하여 초기화해 줘야합니다. 또한, baas.io의 Push기능을 사용하기 위해서는 baas.io().setGcmEnabled()을 호출해줘야합니다.

다만, Push를 이용하기 위해서는 GCM관련 모듈을 추가 구현해야합니다. Startup Project에는 기본적인 GCM(Google Cloud Messaging)관련 모듈이 최적화되어 적용되어 있으니, Startup Project를 이용하여 개발하실 것을 권장합니다.

추가 구현해야할 GCM 관련 모듈은 Android 개발자 사이트의 Google Cloud Messaging for Android를 참고하시기 바랍니다.

###초기화 및 종료 처리

앱의 Application클래스에서 Baas.io().init()을 호출하여 baas.io 계정과 애플리케이션 ID를 설정하여 baas.io기본 데이터 서비스를 이용할 수 있도록 설정합니다.

앱이 종료되는 시점인 Application.onDestroy()에서는 Baas.io().uninit()을 호출하여 정상 종료될 수 있도록 설정합니다.

import com.kth.baasio.Baas;
import com.kth.baasio.callback.BaasioDeviceCallback;
import com.kth.baasio.entity.push.BaasioDevice;
import com.kth.baasio.exception.BaasioException;
import com.kth.common.utils.LogUtils;

import android.app.Application;
import android.os.AsyncTask;

public class BaasioApplication extends Application {
	...

	@Override
	public void onCreate() {
		...
		Baas.io().init(						//baas.io 초기화
				this	
				, "https://api.baas.io"		//baas.io의 api서버 주소 
				, "baasioid"				//baas.io에 가입한 id
				, "applicationid"			//baas.io에 생성한 애플리케이션 id
			);
		...
	}

	...

	@Override
	public void onTerminate() {
		...
        Baas.io().uninit(this);					//baas.io 종료			
		...
        super.onTerminate();
    }

	...		
}

###Push 기능 활성화

앞서 설명한 바와 같이 baas.io의 Push 기능을 이용하기 위해서는 GCM을 사용할 수 있도록 baas.io().setGCMEnabled()를 호출합니다. 이때, return 되는 AsyncTask는 앱이 종료될때 정상 종료될 수 있도록 cacel()을 호출하여 줍니다.

baas.io().setGcmEnabled()를 호출하면 UI Thread가 아닌 background에서 단말 등록을 시도합니다. 이때 결과는 BaasioDeviceCallback으로 전달됩니다.

import com.kth.baasio.Baas;
import com.kth.baasio.callback.BaasioDeviceCallback;
import com.kth.baasio.entity.push.BaasioDevice;
import com.kth.baasio.exception.BaasioException;
import com.kth.common.utils.LogUtils;

import android.app.Application;
import android.os.AsyncTask;

public class BaasioApplication extends Application {
	
	...
	AsyncTask mGCMRegisterTask;
	...

	@Override
	public void onCreate() {
		....
		mGCMRegisterTask = Baas.io().setGcmEnabled(	//GCM 활성화
				this
				, null								//단말기를 등록할때 구분하기 위한 태그정보 ex) "female,orange"
				, new BaasioDeviceCallback() {		//등록 결과를 받기 위한 Callback
	            	@Override
		            public void onException(BaasioException e) {
		                // 실패
		            }
		
		            @Override
		            public void onResponse(BaasioDevice response) {
		                // 성공
	            	}
        		}
				, BaasioConfig.GCM_SENDER_ID		//GCM Sender ID
			);
	}

	...

	@Override
	public void onTerminate() {
		...
        if (mGCMRegisterTask != null) {
            mGCMRegisterTask.cancel(true);			//GCM 등록 작업 취소
        }
		...
		super.onTerminate();
    }

	...
}

AndroidMenifest.xml

AndroidMenifest.xml파일은 앱이 실행되는데 꼭 필요한 정보를 담고 있는 파일입니다.

자세한 내용은 AndroidMenifest.xml페이지를 참고하시기 바랍니다.

baas.io Android SDK를 이용하기 위해서는, Android 앱의 AndroidMenifest.xml파일에 몇가지 퍼미션과 클래스 등록을 해주어야 합니다.

퍼미션 설정하기

퍼미션을 설정하기에 앞서 기본적인 퍼미션에 대한 지식이 필요합니다. 자세한 내용은 Permissions을 참고하시기 바랍니다.

baas.io는 인터넷 통신을 이용하여 서버와 접속합니다. 따라서, android.permission.INTERNET 퍼미션을 설정해야 합니다.

<uses-permission android:name="android.permission.INTERNET" />

Push를 이용하기 위해 퍼미션을 설정합니다.

<permission
    android:name="{package명}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="{package명}.permission.C2D_MESSAGE" />

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

클래스 등록

baas.io를 초기화 해주기 위해 Application 클래스를 상속받은 클래스를 application에 클래스로 등록해 줍니다. 또한 Push 서비스를 이용하신다면 GCM관련 모듈도 등록해 줍니다.

<!--  전역 클래스 등록 -->
<application
    android:name=".BaasioApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">

	...

	<!--  GCM관련 모듈 등록 -->
	<!--
      BroadcastReceiver that will receive the C2DM messages from GCM
      services and handle them to the custom IntentService.

      The com.google.android.c2dm.permission.SEND permission is necessary
      so only GCM services can send data messages for the app.
    -->
	<receiver
        android:name="{package명}.gcm.GCMRedirectedBroadcastReceiver"
        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="{package명}" />
        </intent-filter>
    </receiver>

    <!--
      Application-specific subclass of GCMBaseIntentService that will
      handle received messages.

      By default, it must be named .GCMIntentService, unless the
      application uses a custom BroadcastReceiver that redefines its name.
    -->
    <service android:name="{package명}.gcm.GCMIntentService" />
</application>

※ 잘 안되시나요? Push가 정상 설정되었는지 확인하세요.

Push를 활성화를 하시면, 정상적으로 동작시키기 위해 아래 체크리스트를 확인 바랍니다.

  1. baas.io 사이트 이동
  2. 로그인 > My page 이동> Application 선택
  3. 설정 > 푸시인증서 관리
  4. <CHECK!!> Android API KEY 등록되었는지 확인
  5. <CHECK!!> 푸시 사용 설정이 사용함인지 확인
  6. 데이터브라우저 > Role 선택 > guest 선택 > Permission 탭 선택
  7. <CHECK!!>"/devices" Create 체크됨 확인(v0.8.1 이전 버전은 "/pushes/devices")
  8. <CHECK!!>"/devices/*" Update, Delete 체크됨 확인(v0.8.1 이전 버전은 "/pushes/devices/*")
  9. 데이터브라우저 > Role 선택 > default 선택 > Permission 탭 선택
  10. <CHECK!!>설정된 Role이 "/device" Create와 "/devices/*" Update, Delete를 포함하고 있는지 확인(v0.8.1 이전 버전은 "/pushes/devices", "/pushes/devices/*")
  11. <CHECK!!>프로젝트의 AndroidMenifest.xml 파일을 열어 아래와 같이 package 명이 제대로 들어가 있는지 확인합니다.
	<permission
   		android:name="{package명}.permission.C2D_MESSAGE"
        android:protectionLevel="signature" /> 
	...
	<receiver
        android:name="{package명}.gcm.GCMRedirectedBroadcastReceiver"
        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="{package명}" />
        </intent-filter>
    </receiver>
	...
	<service android:name="{package명}.gcm.GCMIntentService" />

<주> Role관련부분은 역할과 권한을 참고 바랍니다.


Clone this wiki locally