-
Notifications
You must be signed in to change notification settings - Fork 5
Home
본 가이드는 안드로이드 개발자를 위한 페이지이며 SDK 다운로드 정보를 참고하여 필요한 개발환경 구성이 완료된 상태를 기준으로 구성되어 있습니다.
baas.io 에서는 앱 개발자 분들이 많이 사용하시는 사용자 관리, 파일 업/다운로드, Push 메시지 송/수신, 고객센터 등의 기능을 손쉽게 사용할 수 있는 클라우드 기반 서비스를 제공합니다.
baas.io에서 제공되는 Android SDK는 REST API에 익숙하지 않은 Android 개발자 분들도 간단한 설정만으로 baas.io의 모든 기능을 사용할 수 있도록 구성되어 있습니다.
- baas.io에 가입이 필요합니다. baas.io 가입 페이지에서 가입하실 수 있습니다.
- Android ADT 및 SDK를 항상 최신으로 유지하는 것을 권장합니다. 개발틀로 Eclipse를 이용하시는 분들은 Installing the Eclipse Plugin 페이지를 확인하시기 바랍니다.
- Text file encoding 방법이 UTF-8 기준으로 개발되어 있습니다. 사용하시는 개발툴의 Text file encoding 설정이 UTF-8로 되어 있는지 확인합니다.
- 처음 개발하실 때에는 다운로드 페이지에서 Android용 baas.io Startup Project를 다운받아 사용하실 것을 권장합니다.
Android 앱을 개발할 때, 서버 통신이 필요한 경우 UI Thread에서 처리하지 않고 비동기식으로 처리하는 것을 권장하고 있습니다.
baas.io Android SDK는 아래와 같이 동기식(Sync), 비동기식(Async) 두 가지 방식의 API를 모두 제공하고 있으며, 비슷한 구조로 구현되어 있습니다.
메소드의 이름 규칙은, 동기식(Sync)은 동사, 비동기식(Async)은 동사(Verb)+"InBackground"의 형태로 구현되어 있습니다.
//동기식
BaasioEntity entity = new BaasioEntity("friend");
BaasioEntity savedEntity = entity.save(
BaasioEntity.class //결과로 받을 클래스 구조
);
//비동기식
BaasioEntity entity = new BaasioEntity("friend");
entity.saveInBackground(
new BaasioCallback<BaasioEntity> { //결과를 받을 Callback
@Override
public void onResponse(BaasioEntity response) {
//성공
BaasioEntity savedEntity = response;
}
@Override
public void onException(BaasioException e) {
//실패
}
});
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
, BaasioConfig.BAASIO_URL //baas.io의 api서버 주소
, BaasioConfig.BAASIO_ID //baas.io에 가입한 id
, BaasioConfig.APPLICATION_ID //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="com.kth.baasio.sample.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.kth.baasio.sample.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=".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="{your app 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=".gcm.GCMIntentService" />
</application>
생성하신 애플리케이션에서 회원 관리를 가입/로그인/탈퇴를 통하여 할 수 있습니다. 이런 기능은 BaasioUser 클래스가 담당하고 있습니다.
참고로, baas.io에 저장된 데이터는 로그인 상태에 따라 접근을 제한할 수 있습니다. 이와 관련된 자세한 설명은 링크(Role)에서 확인하실 수 있습니다.
BaasioUser 클래스
BaasioUser클래스는 Users collection으로 관리되며, Users collection으로 User entity를 저장/삭제하여 사용자를 가입/탈퇴를 할 수 있습니다.
회원을 가입하는 방법은 username(email)을 통한 가입과 facebook을 통한 가입을 지원합니다.
가입-username(email)
가입을 하기 위해서는 ID(username)와 비밀번호(password)가 필요합니다. 추가로 이름(name), 이메일(email) 정보를 넣을 수 있습니다.
BaasioUser.signUpInBackground(
username //ID(username)
, name //이름
, email //이메일
, password //비밀번호
, new BaasioSignUpCallback() {
@Override
public void onException(BaasioException e) {
if (e.getErrorCode() == 913) {
//이미 가입된 사용자
return;
}
//기타 오류
}
@Override
public void onResponse(BaasioUser response) {
if (response != null) {
//가입 성공
}
}
});
가입-Facebook
Facebook으로 가입을 하기 위해서는 먼저 Facebook의 Access token이 필요합니다.
Facebook의 Access token을 얻는 방법은 Facebook SDK 3.0 for Android를 참고하시기 바랍니다.
다운로드 페이지에 있는 Sample Project를 참고하셔 좋습니다.
BaasioUser.signUpViaFacebookInBackground(
mContext
, fb_access_token //Facebook access token
, new BaasioSignInCallback() {
@Override
public void onException(BaasioException e) {
//실패
}
@Override
public void onResponse(BaasioUser response) {
if(response != null) {
//성공
}
}
});
회원정보 수정
회원정보에 추가 정보를 저장할 수 있습니다.
BaasioUser user = Baas.io().getSignedInUser();
user.setProperty("gender","female"); //추가 정보
user.updateInBackground(
new BaasioCallback<BaasioUser>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioUser response) {
if (response != null) {
//성공
}
}
});
로그인-username(email)
로그인을 하기 위해서는 username과 password가 필요합니다.
BaasioUser.signInInBackground(
mContext
, username
, password
, new BaasioSignInCallback() {
@Override
public void onException(BaasioException e) {
if (e.getStatusCode() != null) {
if (e.getErrorCode() == 201) {
//username(ID) 또는 비밀번호 오류
return;
}
}
//기타 오류
}
@Override
public void onResponse(BaasioUser response) {
if (response != null) {
// 로그인 성공
}
}
});
로그인-Facebook
BaasioUser.signUpViaFacebookInBackground(
mContext
, fb_access_token //Facebook access token
, new BaasioSignInCallback() {
@Override
public void onException(BaasioException e) {
//실패
}
@Override
public void onResponse(BaasioUser response) {
if(response != null) {
//성공
}
}
});
탈퇴
탈퇴를 하면 애플리케이션에서 해당 회원이 삭제됩니다. 또한, 자동으로 로그아웃 됩니다.
BaasioUser user = Baas.io().getSignedInUser();
user.unsubscribeInBackground(
new BaasioCallback<BaasioUser>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioUser response) {
if (response != null) {
//성공
}
}
});
AccessToken 과 ACTION_UNAUTHORIZED
AccessToken은 로그인할 때 발급되며, 발급된 AccessToken으로 회원을 인증합니다.
baas.io Android SDK는 이 AccessToken을 내부에서 알아서 관리해주어 개발하실 때 특별히 신경쓰지 않으셔도 됩니다. 다만, AccessToken은 24시간이 지나면 만료되어 재발급 받아야 합니다.
AccessToken이 만료된 상태에서 API를 호출하면, BaasioException이 발생합니다. 발생한 exception의 getStatusCode로 401이 내려옵니다. 또한, "com.kth.baasio.ACTION_UNAUTHORIZED"란 Action을 Broadcasting 합니다. 이를 이용하여 로그인 화면으로 유도할 수 있습니다.
인증에 대한 자세한 내용은 개발가이드의 인증 시스템를 참고하시기 바랍니다.
baas.io는 데이터를 저장하고 조회하는 기능을 제공합니다. 커스텀 Entity를 생성하기 위해서는 BaasioEntity 클래스를 이용합니다.
데이터 서비스에 대한 자세한 내용은 개발가이드의 데이터모델을 참고하시기 바랍니다.
BaasioEntity 클래스
모든 Entity는 Type을 가지고 있습니다. Type의 이름에 따라 Collection의 이름이 결정됩니다. 예를들어, friend라는 Type을 가진 Entity의 Collection이름은 friends가 됩니다.
따라서, 커스텀 Entity를 생성하기 위해서는 Type을 꼭 설정해 주어야합니다.
Entity 저장(save)
Entity를 저장(생성)합니다.
BaasioEntity entity = new BaasioEntity("friend"); // "friend" entity
entity.saveInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
// 성공
}
}
});
Entity 가져오기(get)
Entity를 얻어옵니다.
BaasioEntity entity = new BaasioEntity("friend"); // "friend" entity
entity.setUuid(uuid); // Entity의 uuid
entity.getInBackground(
BaasioEntity.class // 결과로 받을 class type
, new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
// 성공
}
}
});
Entity 수정(update)
Entity를 수정합니다.
BaasioEntity entity = new BaasioEntity("friend"); // "friend" entity
entity.setUuid(uuid); // Entity의 uuid
entity.updateInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
// 성공
}
}
});
Entity 삭제(delete)
Entity를 삭제합니다.
BaasioEntity entity = new BaasioEntity("friend"); // "friend" entity
entity.setUuid(uuid); // Entity의 uuid
entity.deleteInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
// 성공
}
}
});
Entity 관계(Relationship)설정
Entity간에는 관계가 있을 수 있습니다. 예를 들어, A라는 게시판글은 여러개의 댓글을 가지고 있을 수 있습니다. 이런 관계를 만들어 줄 수 있습니다.
관계 연결하기(connect)
먼저 연결하려는 Entity를 생성해야합니다. 생성된 Entity를 이미 생성된 Entity에 연결하는 과정입니다. writePost()를 호출하여 게시판 글이 작성된 후, writeComment()를 호출하면 작성된 게시판 글에 댓글이 작성되게 됩니다.
class BoardActivity extends Activity {
BaasioEntity mPost;
// 게시판 글 작성
private void writePost() {
BaasioEntity entity = new BaasioEntity("post");
entity.setProperty("title", "안녕하세요!"); // 게시판 제목
entity.setProperty("content", "baas.io를 이용해 주셔서 감사합니다."); // 게시판 본글
entity.saveInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
Toast.makeText(getActivity(), "saveInBackground =>" + e.toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
mPost = response;
}
}
});
}
// 댓글 작성
private void writeComment() {
BaasioEntity entity = new BaasioEntity("comment");
entity.setProperty("content", "첫 댓글남깁니다."); // 게시판 댓글 내용
entity.saveInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
// 댓글 생성 성공 및 댓글을 본글과 연결
mPost.connectInBackground( // 본글(mPost) Entity와 댓글 Entity를 연결
BaasioEntity.class // 호출하는 Entity(본글)의 class type
, "write_comment" // 관계 이름
, response // 댓글 Entity
, new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (!ObjectUtils.isEmpty(response)) {
// 성공
}
}
});
}
});
}
}
관계 연결 해제하기
연결된 관계를 해제합니다.
mPost.disconnectInBackground( // 본글 Entity와 댓글 Entity의 연결 해제
"write_comment" // 댓글 Entity
, comment
, new BaasioCallback<BaasioEntity>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioEntity response) {
if (!ObjectUtils.isEmpty(response)) {
// 성공
}
}
});
회원 그룹 관리
회원들의 그룹을 만들 수 있습니다. Entity를 생성하는 방법과 동일한 방법으로 생성/삭제/수정할 수 있습니다.
그룹 만들기(save)
이름을 정하여 그룹을 생성합니다.
BaasioGroup group = new BaasioGroup();
group.setTitle("그룹 표시 내용"); // 그룹 표시내용
group.setPath("group1"); // 그룹 Unique한 Path 이름
group.saveInBackground(
new BaasioCallback<BaasioGroup>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioGroup response) {
if (response != null) {
// 성공
}
}
});
그룹 가져오기(get)
그룹 정보를 가져옵니다.
BaasioGroup entity = new BaasioGroup();
entity.setUuid(uuid); // Group의 uuid
entity.getInBackground(
new BaasioCallback<BaasioGroup>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioGroup response) {
if (response != null) {
// 성공
}
}
});
그룹 수정하기(update)
그룹 정보를 가져옵니다.
BaasioGroup entity = new BaasioGroup();
entity.setUuid(uuid); // Group의 uuid
entity.getInBackground(
new BaasioCallback<BaasioGroup>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioGroup response) {
if (response != null) {
// 성공
}
}
});
그룹 삭제하기(delete)
그룹을 삭제합니다.
BaasioGroup entity = new BaasioGroup();
entity.setUuid(uuid); // Group의 uuid
entity.deleteInBackground(
new BaasioCallback<BaasioGroup>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioGroup response) {
if (response != null) {
// 성공
}
}
});
baas.io로 저장된 Entity를 질의하여 검색할 수 있습니다. BaasioQuery를 통하여 모든 Collection의 Entity를 검색할 수 있습니다.
BaasioQuery
baas.io는 BaasioQuery클래스를 이용하여 세 가지 질의 방법을 지원합니다.
Collection의 Entity를 검색하기 위한 질의(Query)를 하거나, Group의 User Entity를 검색하기 위한 질의를 할 수 있으며, 마지막으로 어떤 Entity와 연결(connect)되어 Relationship을 가지고 있는 Entity를 검색하기 위한 질의를 할 수 있습니다.
또한, 다양한 검색을 지원하기 위해 직접 질의문(Raw query string)을 입력하여 요청할 수 있습니다.
질의문 작성에 대한 자세한 설명은 개발가이드의 Query를 참고하시기 바랍니다.
Collection의 Entity 검색(Query)
BaasioQuery query = new BaasioQuery();
query.setType(ENTITY_TYPE); // 질의하여 검색할 Entity type
query.setOrderBy(
BaasioBaseEntity.PROPERTY_MODIFIED // 정렬 기준
, ORDER_BY.DESCENDING); // 정렬 순서
query.setLimit(10); // 한번에 받을 갯수 설정
query.queryInBackground(new BaasioQueryCallback() { // 질의 요청
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
Group의 User Entity 검색(Query)
Group에 속한 User를 검색할 수 있습니다. BaasioGroup 객체는 Group entity를 구분짓는 Path property가 꼭 정의되어 있어야합니다.
BaasioGroup group = new BaasioGroup();
group.setPath("friend");
BaasioQuery query = new BaasioQuery();
query.setGroup(group); // 검색하려는 그룹
query.setOrderBy(
BaasioUser.PROPERTY_USERNAME // 정렬 기준
, ORDER_BY.ASCENDING); // 정렬 방법
query.setLimit(10); // 한번에 받을 갯수 설정
query.queryInBackground(new BaasioQueryCallback() {
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
연결(connect)된 Entity 검색
어떤 Entity가 다른 Entity와 어떤 관계(Relationship)에 의해 연결(connect)되어 있을 경우, 연결된 Entity를 검색할 수 있습니다. 예를들어 A라는 게시판에 여러개의 댓글이 달려 있을 경우, A라는 게시판의 댓글만 검색할 수 있습니다.
//댓글 검색
BaasioQuery query = new BaasioQuery();
query.setRelation(
mPost // 게시 판글
, "write_comment"); // 관계 이름
query.queryInBackground(new BaasioQueryCallback() {
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
다음데이터, 이전데이터 질의(Query)하기
질의(Query)한 결과에 따라 다음 또는 이전 데이터가 있을 경우 next(), prev()를 호출하여 쉽게 질의 결과를 얻을 수 있습니다.
주의할 점은 next(), prev()를 사용하기 위해서는 먼저 query()를 호출해야 합니다.
class MainActivity extends Activity {
private BaasioQuery mQuery; //Query 객체 선언
...
// 최초 조회(Query)하기
void getEntities() {
mQuery = new BaasioQuery();
mQuery.setType(ENTITY_TYPE); // 질의하여 검색할 Entity type
mQuery.setOrderBy(
BaasioBaseEntity.PROPERTY_MODIFIED // 정렬 기준
, ORDER_BY.DESCENDING); // 정렬 순서
mQuery.setLimit(10); // 한번에 받을 갯수 설정
mQuery.queryInBackground(new BaasioQueryCallback() { // 질의 요청
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
mQuery = query; // 결과로 들어온 Query 객체로 교체
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
}
// 다음 Entity 조회(Query)하기
void getNext() {
mQuery.nextInBackground(new BaasioQueryCallback() { // 질의 요청
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
mQuery = query; // 결과로 들어온 Query 객체로 교체
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
}
void getPrev() {
mQuery.prevInBackground(new BaasioQueryCallback() { // 질의 요청
@Override
public void onResponse(List<BaasioBaseEntity> entities, List<Object> list, BaasioQuery query, long timestamp) {
// 성공
mQuery = query; // 결과로 들어온 Query 객체로 교체
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
}
baas.io의 파일 서비스는 BaasioFile 클래스로 이용하실 수 있습니다.
BaasioFile 클래스
BaasioFile을 이용하여 파일을 업로드하거나 다운로드 할 수 있습니다. 업로드/다운로드 진행상황은 Callback의 onProgress를 통하여 전달됩니다.
또한, 진행중인 업로드/다운로드를 취소할 수 있습니다.
파일 정보 생성 및 업로드
파일 정보와 파일을 업로드합니다.
BaasioFile uploadFile = new BaasioFile();
uploadFile.setProperty("memo", "안녕하세요. baas.io입니다."); // 파일 추가 정보1
uploadFile.setProperty("integer", 1); // 파일 추가 정보2
uploadFile.setProperty("long", Long.valueOf("1")); // 파일 추가 정보3
BaasioUploadAsyncTask mUploadFileAsyncTask = uploadFile.fileUploadInBackground(
srcFilePath // 업로드하려는 파일 경로
, new BaasioUploadCallback() {
@Override
public void onResponse(BaasioFile response) {
// 성공
}
@Override
public void onProgress(long total, long current) {
// 진행 상황
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 다운로드
업로드된 파일을 다운로드 합니다. 다운로드 경로를 폴더, 즉 "/"로 끝나도록 입력하면, BaasioFile에 저장된 filename으로 다운로드합니다. 파일이름으로 입력하면 입력한 파일 이름으로 다운로드합니다.
BaasioFile uploadFile = new BaasioFile();
uploadFile.setUuid(uuid);
BaasioDownloadAsyncTask mDownloadFileAsyncTask = uploadFile.fileDownloadInBackground(
localPath // 다운로드 경로
, new BaasioDownloadCallback() {
@Override
public void onResponse(String localFilePath) {
// 성공
}
@Override
public void onProgress(long total, long current) {
// 진행 상황
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 업/다운로드 취소
파일을 업로드/다운로드하던 중에 취소를 할 수 있습니다. 취소를 하기 위해서는 업로드/다운로드시에 Return되는 Task를 이용합니다.
//업로드 취소
mUploadFileAsyncTask.cancel(true);
//다운로드 취소
mDownloadFileAsyncTask.cancel(true);
파일 정보 생성
파일은 업로드하지 않고 정보만 저장합니다.
BaasioFile uploadFile = new BaasioFile();
uploadFile.setProperty("memo", "안녕하세요. baas.io입니다.");
uploadFile.setProperty("integer", 1);
uploadFile.setProperty("long", Long.valueOf("1"));
uploadFile.saveInBackground(
new BaasioCallback<BaasioFile>() {
@Override
public void onResponse(BaasioFile response) {
if (response != null) {
// 성공
}
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 정보 가져오기
파일 정보를 가져옵니다.
BaasioFile uploadFile = new BaasioFile();
uploadFile.setUuid(uuid); // 가져오려는 File entity의 uuid
uploadFile.getInBackground(
new BaasioCallback<BaasioEntity>() {
@Override
public void onResponse(BaasioEntity response) {
if (response != null) {
// 성공
}
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 정보 수정
파일 정보를 수정합니다.
BaasioFile uploadFile = new BaasioFile();
uploadFile.setUuid(uuid); // 수정하려는 File entity의 uuid
uploadFile.setProperty("memo","수정합니다."); // 수정하려는 정보
uploadFile.updateInBackground(
new BaasioCallback<BaasioFile>() {
@Override
public void onResponse(BaasioFile response) {
if (response != null) {
// 성공
}
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 정보 수정 및 업로드
파일 정보와 파일 내용을 동시에 수정합니다. 이때, BaasioFile 객체의 filename은 업로드하는 파일 이름으로 결정됩니다.
BaasioFile updateFile = new BaasioFile();
updateFile.setUuid(uuid); // 수정하려는 File entity의 uuid
updateFile.setProperty("memo","수정합니다."); // 수정하려는 정보
BaasioUploadAsyncTask mUploadFileAsyncTask = updateFile.fileUpdateInBackground(
srcFilePath // 수정하려는 파일 이름
, new BaasioUploadCallback() {
@Override
public void onResponse(BaasioFile response) {
// 성공
}
@Override
public void onProgress(long total, long current) {
// 진행 상황
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
파일 삭제
파일을 삭제합니다. 파일 정보 뿐만 아니라, 파일도 삭제됩니다.
BaasioFile deleteFile = new BaasioFile();
deleteFile.setUuid(uuid); // 삭제하려는 File entity의 uuid
deleteFile.deleteInBackground(
new BaasioCallback<BaasioFile>() {
@Override
public void onResponse(BaasioFile response) {
if (response != null) {
// 성공
}
}
@Override
public void onException(BaasioException e) {
// 실패
}
});
baas.io의 Push 서비스를 이용하기 위해서는 setGcmEnabled()를 이용하여 활성화를 시켜야 이용하실 수 있습니다.
다만, Push를 이용하기 위해서는 GCM관련 모듈을 추가 구현해야합니다. Startup Project에는 기본적인 GCM(Google Cloud Messaging)관련 모듈이 최적화되어 적용되어 있으니, Startup Project를 이용하여 개발하실 것을 권장합니다.
Startup Project는 다운로드 페이지에서 받으실 수 있습니다.
또한, 추가 구현해야할 GCM 관련 모듈은 Google Cloud Messaging for Android를 참고하시기 바랍니다.
단말 등록하기
BaasioPush 클래스를 이용하여 단말 등록을 합니다. baas.io는 이때 등록된 정보를 이용하여 Push 메시지를 전송합니다.
// 단말 등록
BaasioDeviceAsyncTask mGCMRegisterTask = BaasioPush.registerInBackground(
context
, new BaasioDeviceCallback() {
@Override
public void onException(BaasioException e) {
// 등록 실패
}
@Override
public void onResponse(BaasioDevice response) {
if (response != null) {
// 등록 성공
}
}
});
// 태그 정보와 함께 단말 등록
BaasioDeviceAsyncTask mGCMRegisterTask = BaasioPush.registerInBackground(
context
, tags // 태그 정보
, new BaasioDeviceCallback() {
@Override
public void onException(BaasioException e) {
// 등록 실패
}
@Override
public void onResponse(BaasioDevice response) {
if (response != null) {
// 등록 성공
}
}
});
Push 메시지 보내기
Push 메시지 구성을 쉽게 하기 위해 BaasioMessage 클래스가 제공됩니다. 필요한 데이터를 채워 BaasioPush 클래스를 이용하여 메시지를 전송합니다.
BaasioMessage의 setMessage를 이용하여 iOS APNS 전송 규격을 맞춰 줍니다.
전체 발송
BaasioMessage message = new BaasioMessage();
message.setMessage(
msg // 전송할 메시지
, sound // iOS APNS의 sound
, badge); // iOS APNS badge 갯수
BaasioPush.sendPushInBackground(
message
, new BaasioCallback<BaasioMessage>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioMessage response) {
if (response != null) {
// 성공
}
}
});
플랫폼별 발송
BaasioMessage message = new BaasioMessage();
message.setMessage(
msg // 전송할 메시지
, sound // iOS APNS의 sound
, badge); // iOS APNS badge 갯수
message.setPlatform(BaasioMessage.PLATFORM_FLAG_TYPE_GCM); // Android GCM으로만 발송
BaasioPush.sendPushInBackground(
message
, new BaasioCallback<BaasioMessage>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioMessage response) {
if (response != null) {
// 성공
}
}
});
태그별 발송
BaasioMessage message = new BaasioMessage();
message.setMessage(
msg // 전송할 메시지
, sound // iOS APNS의 sound
, badge); // iOS APNS badge 갯수
message.setTarget(BaasioMessage.TARGET_TYPE_TAG); // 태그별 발송
message.setTo("friend,male"); // friend와 male tag로 등록된 단말로 발송
BaasioPush.sendPushInBackground(
message
, new BaasioCallback<BaasioMessage>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioMessage response) {
if (response != null) {
// 성공
}
}
});
예약 발송
시간은 KST 기준이며, 예약 발송으로 전송된 시간의 남은 시간이 5분 이내일 경우에는 바로 발송 처리됩니다.
BaasioMessage message = new BaasioMessage();
message.setMessage(
msg // 전송할 메시지
, sound // iOS APNS의 sound
, badge); // iOS APNS badge 갯수
message.setReserve("201301251422"); // 2013년 1월 25일 오후 2시 22분
BaasioPush.sendPushInBackground(
message
, new BaasioCallback<BaasioMessage>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioMessage response) {
if (response != null) {
// 성공
}
}
});
개별 발송
개별 전송은 최대 10개의 대상에게 발송할 수 있습니다.
BaasioMessage message = new BaasioMessage();
message.setMessage(
msg // 전송할 메시지
, sound // iOS APNS의 sound
, badge); // iOS APNS badge 갯수
message.setTarget(BaasioMessage.TARGET_TYPE_USER); // 회원 개별 발송
message.setTo("uuid1,uuid2"); // uuid1, uuid2의 회원에게 전송
BaasioPush.sendPushInBackground(
message
, new BaasioCallback<BaasioMessage>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(BaasioMessage response) {
if (response != null) {
// 성공
}
}
});
BaasioHelp 클래스를 이용하여 baas.io 고객센터 서비스를 구현할 수 있습니다. 고객센터의 대한 자세한 내용은 고객센터 가이드를 참고하기 바랍니다.
baas.io Android SDK에서는 모바일에서 고객센터를 쉽게 구현하실 수 있도록 고객센터 UI 라이브러리를 오픈소스 라이브러리 형태로 제공해드리고 있습니다. 이 UI 라이브러리를 이용하시면 간단히 구현하실 수 있습니다.
고객센터 UI 라이브러리는 다운로드 페이지에서 다운로드 받으실 수 있습니다.
BaasioHelp
도움말(FAQ) 가져오기
도움말은 도움말 카테고리와 각 카테고리의 도움말 항목으로 이루어져 있습니다.
BaasioHelp.getHelpsInBackground(
new BaasioCallback<List<FaqCategory>>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onResponse(List<FaqCategory> response) {
if (response != null) {
// 성공
}
}
});
도움말 상세내용 가져오기
도움말 항목은 uuid를 가지고 있으며, 이 uuid로 개발자가 미리 등록한 답변을 가져올 수 있습니다.
BaasioHelp.getHelpDetailInBackground(
uuid // 도움말 항목의 uuid
, new BaasioCallback<Faq>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(Faq response) {
if (response != null) {
// 성공
}
}
});
문의사항 개발자에게 보내기
회원이 앱을 이용하다가 문의사항이 있을 경우 개발자에게 보낼 수 있습니다.
BaasioHelp.sendQuestionInBackground(
context
, email // 이메일 주소
, body // 문의사항
, new BaasioCallback<Question>() {
@Override
public void onException(BaasioException e) {
// 실패
}
@Override
public void onResponse(Question response) {
if(response != null) {
// 성공
}
}
});