X-PUSH의 신뢰성서비스, 노티피케이션 서비스를 이용하기 위해서는 데이터베이스가 필요 합니다.
X-PUSH가 지원하는 데이터베이스는 Oracle, MSSQL, PostgreSQL, Db2, Tibero입니다.
데이터베이스의 Character Set은 UTF-8 로 설정되어야 합니다.
메시지 저장 과정
신뢰성 메시지
provider로부터 메시지를 공급받습니다.
T_MESSAGE 테이블에 공급받은 메시지를 저장합니다.
T_TOPIC 테이블에서 공급받은 TOPIC정보(TOPIC_TYPE, TOPIC_ID)와 매칭되는 사용자를 찾습니다.
찾은 사용자 정보와 메시지를 T_USER_MESSAGE 테이블에 저장합니다.
T_TOPIC 테이블에 사용자 정보가 있어야만 합니다.
T_TOPIC 테이블에 사용자 정보가 없으면, 메시지가 공급되더라도 T_USER_MESSAGE 테이블에 저장되지 않습니다.
노티피케이션 메시지
provider로부터 메시지를 공급받습니다.
T_MESSAGE 테이블에 공급받은 메시지를 저장합니다.
T_TOPIC 테이블에서 공급받은 TOPIC 정보(TOPIC_TYPE, TOPIC_ID)와 매칭되는 사용자를 찾습니다.
찾은 사용자 정보와 메시지를 T_USER_MESSAGE 테이블에 저장합니다.
해당 사용자가 online/offline 여부를 확인합니다.
online의 경우 notification은 전송되지 않으며, offline 의 경우 T_MOBILE 테이블에서 USER_ID의 정보를 획득 후 T_NOTIFICATION 테이블에 저장하고 해당 디바이스로 노티피케이션 메시지를 전송합니다.
T_MOBILE 테이블에 사용자 정보가 있어야 합니다.
T_MOBILE 테이블에 사용자 정보가 없으면, T_NOTIFICATION 테이블에 저장하지 않고, 노티피케이션 메시지도 전송하지 않습니다.
테이블 설명
5개 테이블이 필요 합니다.
T_TOPIC
T_MESSAGE
T_USER_MESSAGE
T_MOBILE
T_NOTIFICATION
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 에 있습니다.
T_TOPIC
사용자 정보를 가지고 있는 테이블입니다.
colum | 설명 |
---|---|
PROJECT_ID | 프로젝트 아이디 |
USER_ID | 사용자 아이디 |
TOPIC_TYPE | 토픽 타입 |
TOPIC_ID | 토픽 아이디 |
REGISTER_DATE | 사용자 추가 날짜, 시간 |
MODIFIED_DATE | 사용자 정보 변경 날짜, 시간 |
ACTIVE | 사용 여부 ( Y, N) |
사용자를 추가할 때는 아래 방법 중 하나를 사용합니다.
관리자가 직접 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')
사용자가 직접 입력하는 방법
넥사크로 스튜디오에서 커멘드를 이용해 직접 사용자를 추가할 수 있습니다.
xpush_conf 설정에서 userRegister 가 ture 로 되어 있어야 합니다.
T_MESSAGE
provider로부터 신뢰성 메시지가 공급되면 메시지를 저장하는 되는 테이블입니다.
colum | 설명 |
---|---|
PROJECT_ID | 프로젝트 아이디 |
MESSAGE_ID | 공급된 메시지 고유 아이디 |
TOPIC_TYPE | 공급된 메시지 토픽 타입 |
TOPIC_ID | 공급된 메시지 토픽 아이디 |
MESSAGE_BODY | 공급된 메시지 |
REGISTER_DATE | 공급된 메시지 날짜, 시간 |
EXPIRATION_DATE | 공급된 메시지 만료 날짜, 시간 |
T_USER_MESSAGE
사용자별 신뢰성 메시지가 저장되는 테이블입니다.
Provider로부터 메시지를 공급받으면 T_TOPIC과 T_MESSASGE를 조합하여 T_USER_MESSAGE를 생성합니다.
colum | 설명 |
---|---|
PROJECT_ID | 프로젝트 아이디 |
USER_ID | 사용자 아이디 |
MESSAGE_ID | 메시지 아이디 |
MESSAGE_STATE | 사용자 수신 여부 0: 미수신 1: 넥사크로 클라이언트 수신확인 2: 사용자 수신확인 |
CHECK_DATE | 사용자 수신 날짜, 시간 |
T_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 | 변경 날짜, 시간 |
T_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가 유효하지 않은 패키지명을 가리킴 |