android_docs

jintagi edited this page Jan 19, 2017 · 2 revisions

시작하기

SDK를 사용하기 위해서는 jitpack.io 저장소를 추가해야 합니다. 프로젝트 루트 경로에 있는 build.gradle에 아래와 같이 추가해 주세요.

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

그리고 프로젝트 gradle 파일에 아래와 같이 추가합니다. 참고로 {version-number} 부분은 신규 SDK가 릴리즈됨에 따라 변경될 수 있습니다. 적절한 버전을 입력해 주세요.

compile 'com.github.6months:android-sdk:v{version-number}'

인증

로그인

로그인 하기 위해서는 아래와 같이 SDKHandler를 이용해서 email, password를 전달함으로써 인증할 수 있습니다. 인증 성공 시 반환되는 token을 보관하면 다음 번 로그인 시 emailpassword를 확인하는 과정을 생략할 수 있습니다. 현재 10일간 사용하지 않는 token은 서버에서 삭제 처리됩니다.

  • postSignIn
    • String email
      • 이메일
    • String password
      • 비밀번호
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getUsers()
    .postSignIn(email, password, new SDKListener<SignInResponse>() {
        @Override
        public void onResponse(ResponseObject<SignInResponse> response) {
            dismissLoading();
            if (response.success()) {
                SignInResponse signInResponse = response.getResponse();
                String token = signInResponse.data.token;
                ...

회원가입

서비스에 가입하기 위해서는 기본적으로 이메일과 비밀번호 그리고 이름이 필요합니다. 아래 예제는 SDK를 이용해서 서비스에 가입을 요청하는 것을 보여줍니다.

  • postRegistration
    • String email
      • 이메일
    • String password
      • 비밀번호
    • String username
      • 사용자 이름
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getUsers()
	.postRegistration(email, password, name, 
	new SDKListener<RegistrationResponse>() {
	    @Override
	    public void onResponse(ResponseObject<RegistrationResponse> response) {
	        if (response.success()) {
	            ...

비밀번호 초기화

사용자가 비밀번호를 잊었을때 스스로 비밀번호를 초기화 할 수 있습니다. 이메일을 입력하시면 사용자는 입력하신 이메일로 비밀번호 초기화 안내 메일을 받게 됩니다.

  • postForgotPassword
    • String email
      • 사용자 이메일
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getUsers()
	.postForgotPassword(email, new SDKListener<ForgetPasswordResponse>() {
	    @Override
	    public void onResponse(ResponseObject<ForgetPasswordResponse> response) {
	        if (response.success()) {
	            ...

디바이스 등록

푸시를 받아오기 위해서는 아래와 같이 먼저 서버에 디바이스를 등록하는 절차가 필요합니다.

  • postToken
    • String uuid
      • 고유한 사용자 아이디
      • 아래 처럼 임의로 생성하거나 디바이스 아이디를 입력해도 됩니다.
        • UUID.randomUUID().toString()
    • String token
      • FCM Registration Id
    • String debug
      • 디버그 플래그
      • 아이폰에서 인증서 구분을 위해 사용하며 안드로이드의 경우 true로 설정합니다.
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getSettings()
	.postToken(uuid, token, TokenFlag.ENABLE, true, new SDKListener<BaseResponse>() {
	    @Override
	    public void onResponse(ResponseObject<BaseResponse> response) {
		    ...

접속

로그인 성공 후에는 소켓 서버 접속을 위한 접속정보를 가져와야 합니다. 마찬가지로 SDKHandler를 통해서 가져올 수 있고 반환되는 address를 이용해 다음 단계로 진행할 수 있습니다.

SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getConfig()
	.getSockets(new SDKListener<SocketsResponse>() {
	    @Override
	    public void onResponse(ResponseObject<SocketsResponse> response) {
	        if (response.success()) {
	            String address = response.getResponse().data.address;

소켓 서버의 주소(address variable)를 알아냈다면 이제 접속해 봅시다. 아래와 같이 SocketConnection를 이용해 접속할 수 있습니다. DeviceType은 접속하는 디바이스를 표시할 수 있으며 추후 여러 디바이스에서 한 계정에 접속할 경우 이 값을 이용해 구분됩니다. 참고로 token은 로그인 성공 시에 반환되는 token 값 입니다.

  • SocketConnection
    • String url
      • 접속 URL
    • DeviceType deviceType
      • 접속 디바이스 타입
    • String token
      • 인증 토큰
SocketConnection socketConnection = new SocketConnection(
         address,
         DeviceType.MOBILE,
         token);

SocketManager socketManager = new socketManager(IO.socket(socketConnection.getUrl(), socketConnection.getOptions()));

socketManager.bindBroadcastEmitters();
socketManager.connect();

친구

우리가 잘 아는 대화 상대 목록을 여기에서는 친구 라고 부릅니다. APIFriend로 된 end-point가 보이거나 파라미터가 이와 같은 이름일 때 대화상대 목록이라고 이해하시면 됩니다. 아래 부분에서는 FriendsResponse.Data 형식으로 친구목록 정보가 저장됩니다.

친구 목록

아래와 같이 SDKHandler를 이용해서 요청하시면 현재 등록된 전체 친구 목록을 가져올 수 있습니다.

SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getFriends()
	.get(new SDKListener<FriendsResponse>() {
	    @Override
	    public void onResponse(ResponseObject<FriendsResponse> response) {
	        if (response.success()) {
	            FriendsResponse.Data data = response.getResponse().data;
	            ...

FriendsResponse.Data

FriendsResponse.DataContact 클래스를 배열로 갖는데 데이터 형식을 설명하면 다음과 같습니다.

  • FriendsResponse.User user
    • 친구 정보
    • 아래 FriendsResponse.User 섹션에 별도로 설명
  • int status
    • OFFLINE(0), ONLINE(1), BUSY(2), SLEEP(3);
  • boolean block
    • 차단된 친구
    • true: 차단, false: 차단되지 않음
  • boolean added
    • 추가된 친구
    • true: 내가 친구로 추가함, false: 내가 아직 친구로 추가 안함, 상대방 만이 나를 친구로 추가한 경우
  • boolean favorite
    • 즐겨찾기 설정 여부
    • true: 즐겨찾기 등록, false: 즐겨찾기에 등록 안됨
  • boolean deleted
    • 삭제된 사용자 여부
    • true: 삭제된 사용자
  • boolean registered
    • 가입한 사용자 여부
    • true: 가입함, false: 가입 안함
  • boolean login
    • 로그인 여부
    • true: 로그인, false: 로그아웃
  • long timestamp
    • 친구 등록 시간

FriendsResponse.User

  • String uid
    • 사용자 식별 아이디
  • String email
    • 사용자가 가입시 등록한 이메일 주소
  • String username
    • 사용자 이름
  • String profile
    • 사용자 프로필 이미지 정보
    • 테그 정보가 저장되며 이 테그정보를 이용해 서버에서 이미지를 다운로드 할 수 있습니다.
  • int device
    • 사용자의 현재 디바이스 정보
    • PC(0), WEB(1), MOBILE(2)
  • String message
    • 상태 메시지

친구 추가

친구를 추가하는 2가지 입니다. FriendId를 이용하거나 이메일 주소를 이용할 수 있습니다. 아직 서비스를 사용하고 있는지 모르는 경우 보통 이메일을 이용해서 친구를 추가하고 만약 그룹 채널에서 아직 친구가 아닌 사용자를 친구로 등록하고 싶을 경우 FriendId를 사용합니다. 두 필드를 동시에 사용할 수는 없고 사용하지 않는 필드는 null 로 채워야 하는 것에 주의해 주세요.

  • post
    • String friendId
      • 사용자 Uid
    • String email
      • 사용자 이메일
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getFriends()
	.post(friendId, email, new SDKListener<FriendResponse>() {
	   @Override
	   public void onResponse(ResponseObject<FriendResponse> response) {
	       if (response.success()) {
	           ...

친구 차단/해제

친구를 차단은 이미 등록된 친구를 기준으로 하는 것이기 때문에 FriendId만을 이용해서 차단합니다. 두번째 파라미터는 true일 경우 차단, false일 경우 차단 해제를 의미합니다.

  • postBlock
    • String friendId
      • 사용자 Uid
    • boolean block
      • 블럭 여부
      • true: 블럭, false: 블럭 해제
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getFriends()
	.postBlock(friendId, true, new SDKListener<FriendResponse>() {
	    @Override
	    public void onResponse(ResponseObject<FriendResponse> response) {
	        if (response.success()) {
	            ...

차단 목록

차단된 친구의 목록을 표시하기 위해서는 위 친구 목록 기능의 block 플래그를 이용해서 가져올 수 있습니다.

채널

일대일 대화방 또는 그룹 대화방 모두 채널이라는 개념으로 관리합니다. 따라서 대화방을 개설하고 관리하기 위해서 채널 관련 SDK를 이용할 수 있습니다.

채널 목록

아래와 같이 소켓을 이용해서 ChannelList를 요청하면 현재 참여되있는 대화방 목록을 가져올 수 있습니다.

socketManager.emit(new ChannelList(new SocketListener<ChannelListResponse>() {
	    @Override
	    public void onResponse(final ChannelListResponse response) {
	        ...

ChannelListResponse.SocketChannelAndUser

  • boolean joined
    • 채널 참여 여부
    • true: 참여, false: 참여되지 않음.
  • boolean favorite
    • 채널 즐겨찾기 설정 여부
    • true: 즐겨찾기 설정
  • boolean push
    • 푸시 설정 여부
    • true: 푸시 설정 됨
  • SocketChannel socketChannel
    • 채널 정보
  • SocketUser socketUser
    • 채널 소유자 정보

SocketChannel

  • String id
    • 채널 고유 식별 아이디
  • String name
    • 채널 이름
  • ChannelType channelType - 채널 타입 - 일대일(0), 그룹(1)
  • Date timestamp
    • 채널 생성 시간

SocketUser

  • String id
    • 사용자 아이디
  • String email
    • 사용자 이메일
  • String name
    • 이름
  • String profile
    • 프로필 이미지 테그 정보
  • DeviceType deviceType
    • 디바이스 정보
    • FriendsResponse.User의 DeviceType 참고

채널 만들기

  • ChannelCreate
    • String name: 채널 이름
    • ChannelType channelType: 채널 타입
    • List users: 채널에 초대할 사용자 Uid 리스트
socketManager.emit(new ChannelCreate(channelName,
	ChannelType.GROUP,
	friendUids,
	new SocketListener<ChannelCreateResponse>() {
	    @Override
	    public void onResponse(final ChannelCreateResponse response) {

채널에서 나가기

  • ChannelLeave
    • String id
      • 채널 아이디
socketManager.emit(new ChannelLeave(channelId, new SocketListener<ChannelLeaveResponse>() {
	@Override
	public void onResponse(ChannelLeaveResponse response) {
	    ...

채널 정보

  • ChannelInfo
    • String id
      • 채널 아이디
 socketManager.emit(new ChannelInfo(channelId,
	 new SocketListener<ChannelInfoResponse>() {
	     @Override
	     public void onResponse(ChannelInfoResponse response) {
	         ...

채널에 사용자 추가

  • ChannelInvite
    • String id
      • 채널 아이디
    • List users
      • 초대한 사용자 Uid 목록
socketManager.emit(new ChannelInvite(channelId, friendIds,
          new SocketListener<ChannelInviteResponse>() {
              @Override
              public void onResponse(ChannelInviteResponse response) {
                  ...

메시지 전송

메시지는 텍스트 메시지 전송과 파일 메시지 전송 방법의 차이가 있습니다. 아래 예제를 확인해 주세요.

텍스트

송신

  • UserMessage
    • String id
      • 채널 아이디
    • String message
      • 메시지
socketManager.emit(new UserMessage(channelId,
        message,
        new SocketListener<UserMessageResponse>() {
            @Override
            public void onResponse(UserMessageResponse response) {
                ...

파일

파일 업로드

  • postFiles
    • File file
      • 업로드 할 파일
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getSystem()
	.postFiles(file, new SDKListener<FileResponse>() {
	   @Override
	   public void onResponse(ResponseObject<FileResponse> response) {
	       if (response.success()) {
	           FileResponse.SuccessData[] successData = response.getResponse().data.success;

FileResponse.Data

  • FileResponse.SuccessData[] success
    • 업로드 성공 정보
  • FileResponse.ErrorData[] errors
    • 업로드 에러 정보

FileResponse.SuccessData

  • String tag
    • 업로드 된 파일의 테그 정보

FileResponse.ErrorData

  • String filename
    • 에러 파일 이름
  • BaseResponse error
    • 에러 객체

파일 메시지 전송

파일 업로드 후 반환된 파일 테그를 이용해 다시한번 아래와 같이 메시지를 전송한다.

  • UserMessage
    • String id
      • 채널 아이디
    • String message
      • 메시지 텍스트
    • SocketMessageDataFile socketMessageDataFile
      • String tag
        • 업로드 파일 테그
      • String mimeType
        • 파일 mime-type
socketManager.emit(new UserMessage(channelId,
	message,
	new SocketMessageDataFile(tag, MessageDataType.BINARY.toString()),
	new SocketListener<UserMessageResponse>() {
	    @Override
	    public void onResponse(UserMessageResponse response) {
	        ...

메시지 수신

소켓으로 부터의 메시지를 수신하기 위해서 SDK에서는 EventBus를 사용하고 있습니다. EventBus의 설정 방법이나 더 자세한 정보를 원하시면 여기에서 확인 가능합니다. 아래 메소드로 메시지 수신 관련 처리를 할 수 있습니다.

@Subscribe
public void onEvent(final SocketUserMessageEvent event) {
  • SocketUserMessageEvent

    • SocketMessage
      • String uid
        • 메시지 사용자 아이디
      • Long idx
        • 메시지 Index 번호
      • SocketMessageData socketMessageData
        • 메시지 데이터
      • boolean read
        • (내가) 읽음 여부
      • boolean delivered
        • (내가) 메시지 수신 여부
      • boolean deleted
        • 메시지 삭제 여부
      • boolean favorite
        • 메시지 즐겨찾기 여부
      • boolean pinned
        • 메시지 핀 여부
      • Date edited
        • 메시지 수정 일시
      • Date timestamp
        • 메시지 생성 일시
      • int unread
        • 안읽은 사용자 수
  • SocketMessageData

    • String type
      • 메시지 타입
    • String message
      • 메시지를 표시할 텍스트
    • String data
      • 메시지 데이터
      • JSON 포멧 형태로 보관

설정

푸시 알림

  • postPush
    • String uuid
      • 디바이스 UUID
    • PushType pushType
      • 푸시 타입
      • NONE(0), ALWAYS(2)
    • PushContentType pushContentType
      • 푸시 콘텐츠 타입
      • 표시안함(0), 수신자만 표시(1), 수신자 및 내용 표시(2);
SDKHandler.getInstance(getApplicationContext())
	.getClient()
	.getSettings()
	.postPush(uid,
	        push,
	        pushContentType,
	        new SDKListener<BaseResponse>() {
	            @Override
	            public void onResponse(ResponseObject<BaseResponse> response) {
	            ...

이벤트

SDK에서 Broadcast되는 메시지들 입니다. 필요에 따라 구현해서 사용할 수 있습니다. 이미 설명된 클래스 및 멤버 변수들은 다시 자세히 설명하지 않으니 이전 섹션을 참고해 주세요.

SocketConnectEvent

소켓 연결 성공 이벤트입니다.

@Subscribe
public void onEvent(SocketConnectEvent event) {

SocketContactUserAddEvent

친구가 추가 되었음을 알리는 이벤트입니다. 같은 계정으로 다른 디바이스에서 사용자를 추가했을 때 이 이벤트를 받을 수 있습니다.

  • SocketContactUserAddEvent
    • SocketUser SocketUser
      • 등록된 사용자 정보
      • SocketUser 정보는 위 채널 섹션을 참고해 주세요.
@Subscribe
public void onEvent(SocketContactUserAddEvent event) {

SocketContactUserDeleteEvent

사용자 삭제 이벤트입니다. 같은 계정으로 다른 디바이스에서 사용자를 추가했을 때 이 이벤트를 받을 수 있습니다.

  • SocketContactUserDeleteEvent
    • String uid
      • 사용자 아이디
@Subscribe
public void onEvent(SocketContactUserDeleteEvent event) {

SocketChannelInviteEvent

채널에 초대되었을 때 받는 이벤트 입니다.

  • SocketChannelInviteEvent
    • SocketChannel socketChannel
      • 채널 정보
@Subscribe
public void onEvent(final SocketChannelInviteEvent event) {

SocketChannelJoinEvent

채널에 입장 했을때 받는 이벤트 입니다.

  • SocketChannelJoinEvent
    • SocketChannel socketChannel
      • 채널 정보
@Subscribe
public void onEvent(SocketChannelJoinEvent event) {

SocketChannelCreateEvent

채널이 생성 되었을 때 받는 이벤트 입니다. 이 메시지를 받으면 주로 채널 정보를 갱신하고 로컬 데이터베이스에 채널을 추가하는 작업을 하게됩니다.

  • SocketChannelCreateEvent
    • SocketChannel socketChannel
      • 채널 정보
@Subscribe
public void onEvent(SocketChannelCreateEvent event) {

SocketUserDeletedEvent

사용자가 서비스를 탈퇴했을 때 받는 이벤트 입니다.

  • SocketUserDeletedEvent
    • SocketUser socketUser
      • 삭제된 사용자 정보
@Subscribe
public void onEvent(SocketUserDeletedEvent event) {

SocketChannelLeaveEvent

사용자가 채널에서 나갔을 때 받는 이벤트 입니다.

  • SocketChannelLeaveEvent
    • SocketChannel socketChannel
      • 채널 정보
@Subscribe
public void onEvent(SocketChannelLeaveEvent event) {

SocketUserMessageEvent

사용자가 메시지를 수신했을 때 받는 이벤트입니다. 위 메시지 관련 섹션에서 이미 설명했습니다.

@Subscribe
public void onEvent(SocketUserMessageEvent event) {

SocketUserMessageReadAllEvent

사용자가 모든 채널의 메시지 읽기를 했을 때 받는 이벤트 입니다. 이벤트 결과로 현재 참여중인 채널 아이디 목록이 전달됩니다. 이 메시지를 받으면 클라이언트 캐시에서 해당 채널 아이디에 메시지를 모두 읽음으로 처리하면 됩니다.

  • SocketUserMessageReadAllEvent
    • SocketChannel[] mSocketChannels
      • 모두 읽음으로 처리된 채널 목록
@Subscribe
public void onEvent(SocketUserMessageReadAllEvent event) {

SocketUserMessageReadEvent

메시지 읽음 이벤트 입니다. 메시지 수신자가 메시지를 읽음으로 처리했을 때 이 이벤트를 받게 됩니다.

  • SocketUserMessageReadEvent

    • String channelId
      • 채널 아이디
    • SocketMessageStatus[]
      • 메시지 상태 정보
  • SocketMessageStatus

    • private long mIdx
      • 메시지 index
    • private int mUnread
      • 메시지 안읽음 개수
@Subscribe
public void onEvent(SocketUserMessageReadEvent event) {

SocketUserUserChangeEvent

  • SocketUserUserChangeEvent
    • SocketUser socketUser
      • 사용자 정보

사용자가 정보를 변경 했을 때 받는 이벤트 입니다.

@Subscribe
public void onEvent(SocketUserUserChangeEvent event) {

기타

Proguard

Proguard를 적용하기 위해서는 proguard-rules에 아래 코드를 추가해 주세요.

-keep class net.a6months.messenger.sdk.apis.responses.** { *; }
-keep class net.a6months.messenger.sdk.apis.types.** { *; }
-keep class net.a6months.messenger.sdk.apis.events.** { *; }

-keep class net.a6months.messenger.sdk.sockets.events.** { *; }
-keep class net.a6months.messenger.sdk.sockets.types.** { *; }
-keep class net.a6months.messenger.sdk.sockets.models.** { *; }
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.