4.데이터베이스 테이블

Edit

X-PUSH의 신뢰성서비스, 노티피케이션 서비스를 이용하기 위해서는 데이터베이스가 필요 합니다.

X-PUSH가 지원하는 데이터베이스는 oracle, Mysql, MSsql, ppas, DB2, Tibero입니다.

데이터베이스의 Character Set은 UTF-8 로 설정되어야 합니다.

4.1메시지 저장 과정

4.1.1신뢰성 메시지

  1. provider로부터 메시지를 공급받습니다.

  2. T_MESSAGE 테이블에 공급받은 메시지를 저장합니다.

  3. T_TOPIC 테이블에서 공급받은 TOPIC정보(TOPIC_TYPE, TOPIC_ID)와 매칭되는 사용자를 찾습니다.

  4. 찾은 사용자 정보와 메시지를 T_USER_MESSAGE 테이블에 저장합니다.

T_TOPIC 테이블에 사용자 정보가 있어야만 합니다.

T_TOPIC 테이블에 사용자 정보가 없으면, 메시지가 공급되더라도 T_USER_MESSAGE 테이블에 저장되지 않습니다.

4.1.2노티피케이션 메시지

  1. provider로부터 메시지를 공급받습니다.

  2. T_MESSAGE 테이블에 공급받은 메시지를 저장합니다.

  3. T_TOPIC 테이블에서 공급받은 TOPIC 정보(TOPIC_TYPE, TOPIC_ID)와 매칭되는 사용자를 찾습니다.

  4. 찾은 사용자 정보와 메시지를 T_USER_MESSAGE 테이블에 저장합니다.

  5. 해당 사용자가 online/offline 여부를 확인합니다.

  6. online의 경우 notification은 전송되지 않으며, offline 의 경우 T_MOBILE 테이블에서 USER_ID의 정보를 획득 후 T_NOTIFICATION 테이블에 저장하고 해당 디바이스로 노티피케이션 메시지를 전송합니다.

T_MOBILE 테이블에 사용자 정보가 있어야 합니다.

T_MOBILE 테이블에 사용자 정보가 없으면, T_NOTIFICATION 테이블에 저장하지 않고, 노티피케이션 메시지도 전송하지 않습니다.

4.2테이블 설명

5개 테이블이 필요 합니다.

Database Table

설명

T_TOPIC

사용자의 topic 정보

T_MESSAGE

신뢰성 메시지 정보

T_USER_MESSAGE

사용자의 메시지 상태 관리

T_MOBILE

사용자의 Device Token 정보

T_NOTIFICATION

Mobile notification 이력관리

데이터베이스의 Character Set은 UTF-8 로 설정되어야 합니다.

테이블 스키마는 XPUSH_HOME/sample/sql/xpush-2.8.x.sql 에 있습니다.

4.2.1T_TOPIC

사용자 정보를 가지고 있는 테이블입니다.

colum

설명

PROJECT_ID

프로젝트 아이디

USER_ID

사용자 아이디

TOPIC_TYPE

토픽 타입

TOPIC_ID

토픽 아이디

REGISTER_DATE

사용자 추가 날짜, 시간

MODIFIED_DATE

사용자 정보 변경 날짜, 시간

ACTIVE

사용 여부 ( Y, N)

사용자를 추가할 때는 아래 방법 중 하나를 사용합니다.

  1. 관리자가 직접 T_TOPIC Table에 추가하는 방법

    쿼리로 직접 입력합니다.

insert
   into T_TOPIC
 (PROJECT_ID,USER_ID, TOPIC_TYPE, TOPIC_ID, REGISTER_DATE, MODIFIED_DATE, ACTIVE)
   values
 ('PRO#1','test@test.com, 'NOTI', '1001', '20150102012345', '20150102012345', 'Y')
  1. 사용자가 직접 입력하는 방법

    넥사크로 스튜디오에서 커멘드를 이용해 직접 사용자를 추가할 수 있습니다.

xpush_conf 설정에서 userRegister 가 ture 로 되어 있어야 합니다.

4.2.2T_MESSAGE

provider로부터 신뢰성 메시지가 공급되면 메시지를 저장하는 되는 테이블입니다.

colum

설명

PROJECT_ID

프로젝트 아이디

MESSAGE_ID

공급된 메시지 고유 아이디

TOPIC_TYPE

공급된 메시지 토픽 타입

TOPIC_ID

공급된 메시지 토픽 아이디

MESSAGE_BODY

공급된 메시지

REGISTER_DATE

공급된 메시지 날짜, 시간

EXPIRATION_DATE

공급된 메시지 만료 날짜, 시간

4.2.3T_USER_MESSAGE

사용자별 신뢰성 메시지가 저장되는 테이블입니다.

Provider로부터 메시지를 공급받으면 T_TOPIC과 T_MESSASGE를 조합하여 T_USER_MESSAGE를 생성합니다.

colum

설명

PROJECT_ID

프로젝트 아이디

USER_ID

사용자 아이디

MESSAGE_ID

메시지 아이디

MESSAGE_STATE

사용자 수신 여부

0: 미수신

1: 넥사크로 클라이언트 수신확인

2: 사용자 수신확인

CHECK_DATE

사용자 수신 날짜, 시간

4.2.4T_MOBILE

모바일 사용자 정보를 가지고 있는 테이블입니다.

colum

설명

PROJECT_ID

프로젝트 아이디

BUNDLE_ID

ios : 앱 식별자 ID

android : Firebase 프로젝트 발신자 ID

USER_ID

사용자 아이디

DEVICE_TOKEN

모바일 디바이스 고유 번호

OS

모바일 단말기 OS (ios : 1, android :2)

OS_VERSION

모바일 단말기 OS 버전

REGISTER

모바일 디바이스 노티피케이션 사용 여부 (Y, N)

ACTIVE

사용 여부 (Y, N)

REGISTERED_DATE

등록 날짜, 시간

MODIFIED_DATE

변경 날짜, 시간

4.2.5T_NOTIFICATION

사용자별 notification 메시지가 저장되는 테이블입니다.

colum

설명

PROJECT_ID

프로젝트 아이디

BUNDLE_ID

ios: 앱 식별자 ID

android: Firebase 프로젝트 발신자 ID

MESSAGE_ID

공급된 메시지 고유 아이디

DEVICE_TOKEN

모바일 디바이스 고유 번호

TOPIC_TYPE

공급된 메시지 토픽 타입

TOPIC_ID

공급된 메시지 토픽 아이디

MESSAGE

공급된 메시지

CHECK_DATE

공급된 메시지 날짜, 시간

RESULT

APNS, GCM 전송 여부 (성공:2, 실패:0)

ERROR_CODE

APNS,GCM 전송 응답

T_NOTIFICATION 의 ERROR_CODE 코드표는 아래에 나와 있습니다.

Apns ERROR_CODE

NoErrorsEncountered

발생한 에러 없음. 전송 성공

ProcessingError

APNS 내부 처리 에러

MissingDeviceToken

APNS로 보낸 메시지에 Device Token이 없음

MissingTopic

APNS로 보낸 메시지에 Topic이 없음

MissingPayload

APNS로 보낸 메시지에 Payload가 없음

InvalidTokenSize

Device Token의 크기가 32byte가 아님

InvalidTopicSize

Topic 크기 오류

InvalidPayloadSize

Device Token이 유효하지 않음

Shutdown

APNS 서버가 Shutdown 됨

Unknown

알수없는 원인

FCM ERROR_CODE

NoErrorsEncountered

발생한 에러 없음. 전송 성공

BadApiKey

잘못된 API Key

MissingRegistration

GCM으로 보낸 메시지에 Registraion ID가 없음

InvalidRegistration

Registraion ID 의 형식이 올바르지 않음

MismatchSenderId

해당 Registraion ID에 매칭되는 Sender ID가 없음

NotRegistered

GCM에 등록되지 않은 Registraion ID

MessageTooBig

메시지 크기가 4KB를 초과

InvalidDataKey

메시지의 데이터키에 FCM 예약어를 사용함

InvalidTtl

메시지의 TTL이 범위 0 ~ 22419200(4주)를 벗어남

Unavailable

GCM 서버 이용 불가

InternalServerError

GCM 서버 내부 오류

InvalidPackageName

Registration ID가 유효하지 않은 패키지명을 가리킴