================================================ Push for UPNS ONLY ================================================ .. warning:: 이 방식은 안드로이드 8.0이상 부터, BACKGROUND SERVICE 제약으로, 더 이상 지원이 불가능하니다. 아래 링크를 참고해서, 새로운 버전으로 적용하시기 바랍니다. - `샘플 다운로드 `_ - `버전 별 푸시 가이드 `_ - `푸시 적용 가이드 `_ 1. 개요 ========= Morpheus Push 는 스마트폰 OS에서 지원하는 PNS(Push Notification Server)를 기반으로 한 메세지 전송 플랫폼이다. Android Client 에서는 UPMC WAS 에서 제공하는 Push API 를 각각 버전 규격에 맞춰 연동하여 원할하게 Push Service 를 운영하기 위한 라이브러리를 제공한다. 2. 용어 ========= .. _UPNS: UPNS -------- - Uracle Push Notification System 의 줄임말. - UPNS는 MQTT Protocol 기반으로 Android 애플리케이션으로 테이터를 전송하게 해주는 private 서비스이다. - 서버에서 가져와야할 새로운 데이터가 있음을 Android 애플리케이션에 알리는 적은 용량의 메시지이거나, 최대 256Mbyte를 지원하나, 4k를 권고한다. - Android application은 message를 받기 위해 background service가 실행되고 있음. - UPNS는 단순히 원시 data를 android 단말로 보내며, 이 data를 통해 application에서 제어함. - Android 2.2 이상을 지원. .. _UPMC: UPMC -------- - Uracle Push Message Center 의 줄임말. - Android GCM 서버와 HTTP 프로토콜을 이용하여, Server 대 Server 로 연계하여 구동하는 WAS(Web Application Server) 이다. - Receiver 라고도 불림 .. _RegisterService: Service 등록 ------------------ - :ref:`UPNS` 로 부터 PSID 를 할당 받고 :ref:`UPMC` 로 Push 서비스를 사용하겠다고 등록하는 절차 .. _UnregisterService: Service 해제 ------------------ - :ref:`UPMC` 로 Push 서비스를 사용하지 않겠다고 등록을 삭제하는 절차 .. _RegisterUser: User 등록 ------------- - :ref:`UPMC` 로 Push 서비스에 대한 사용자를 등록 또는 변경하는 절차 .. _receiveMessage: 수신 확인 ------------- - 메시지를 수신 후 :ref:`UPNS` 로 Ack를 주는 절차 - MQTT 프로토콜 규약을 따르며, 라이브러리 내부적으로 처리한다. .. _ReadMessage: 읽음 확인 ------------- - App에서 메세지를 읽었을때 :ref:`UPMC` 로 Ack를 주는 절차 .. _ApplicationID: Application ID ---------------- - AppID라고도 함 - App의 lic 파일에 포함된 application_id 값으로 앱을 구분하기 위한 코드값. .. _GCMsenderid: GCM Sender ID ---------------- – GCM 서비스 등록을 위한 ID .. _CUID: Client ID ---------- - 사용자로 등록할 Client 의 고유한 ID (CUID 라고도 함) - Email, UserID, Phone Number 또는 Device-UUID 등을 CUID 로 사용 .. _CNAME: Client Name ------------ - 사용자로 등록할 Client 의 이름 (CNAME 라고도 함) - 사용자의 이름이나 Nickname 또는 Device Name 을 CNAME 으로 사용 .. _GROUPSEQ: GROUPSEQ ------------- - Group Sequence Number 의 준말로 User Group의 고유한 Sequence Number .. _PSID: PSID ------ - Push Service ID 의 줄임말 - Push 서비스에 대한 고유 ID - UPNS에서 할당 받은 Device Token을 사용 .. _CHECKONSERVICE: CHECK ON SERVICE ------------------ - 단말이 Push 서비스에 등록되어 있는지를 확인함 - 4.0 이상 지원 .. _PNSID: Push Notification System ID ------------------------------ - PNSID라고 함. - GCM, UPNS, APNS등이 여기에 속함 .. _AppAlive: App Alive ------------ - 앱의 설치여부를 24시간 주기로 체크 할 수 있도록 함 - 체크 방식 : 앱 구동 후 Push Resister method를 사용시(내부적으로 작동) .. _4_0: 4.0 ------ - 대용량 Push(100만 이상)를 위해 설계된 push 시스템 .. _packagename: Packge Name ------------ - google play에서 안드로이드 앱을 구별하기 위한 unique 값으로, AndoridManifest.xml 에 선언한다. 3. Push 서비스 절차 ==================== 버전별 서비스 순서 --------------- :ref:`UPMC` 4.0 이상 버전 RegisterService & User => 메시지 수신 DataFlow Diagram ------------------- .. figure:: ../_static/push/android/upns/upns-dataflow-new.png :width: 50% Sequence Diagram ------------------- .. figure:: ../_static/push/android/upns/push-data-flow.png :width: 50% RegisterService & User Sequence Diagram (SUCCESS) ------------------- .. figure:: ../_static/push/android/registerandservice.png :width: 50% RegisterService & User Sequence Diagram (FAIL) ------------------- .. figure:: ../_static/push/android/regserviceanduser_fail.png :width: 50% Read Message Sequence Diagram ------------------- .. figure:: ../_static/push/android/read-message.png Service Register Sequence Diagram [option] ------------------- .. figure:: ../_static/push/android/service-register.png User Register Sequence Diagram [option] ------------------- .. figure:: ../_static/push/android/user-register.png 4. 라이브러리 및 설정 파일 ==================== 4.1. 라이브러리 ------------- - morpheus_push_library_x.x.x.x.jar – UPNS/GCM Push 를 활용할 수 있는 라이브러리 4.2. iOS 용 라이브러리 ----------------- - MPushLibrary.framework – APNS Push 를 활용할 수 있는 라이브러리가 담긴 framework 파일 - MPushLibrary.bundle – framework 을 사용함에 있어 필요한 resource가 담긴 bundle 파일 4.3. 공통 설정 파일 --------------- - mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 - Manifest.xml – Push 구동을 위한 설정 파일 5. SDK 및 설정 파일 ======================= SDK 버전 -------------- - Android 용 SDK 파일 - MPushLibrary - GCM / UPNS Push를 활용할 수 있는 라이브러리 - mcore.mobile.lic – Push 라이센스 정보가 담긴 Push 라이센스 파일 - Manifest.xml – Push 구동을 위한 설정 파일 - SDK 적용 방법 - Android Project 의 libs 폴더에 Library 파일에 추가 - morpheus_push_library_x.x.x.x.jar - mqtt-android-push_x.x.x.x.jar .. figure:: ../_static/push/android/upns/push-libs-upns.png :width: 40% - Android Project의 assets/res 폴더에 라이선스 및 설정 파일 추가 - Manifest.xml - mcore.mobile.lic .. figure:: ../_static/push/android/push-lib-setting.png :width: 40% 공통 설정 파일 -------------- - mcore.mobile.lic - Push 라이센스 정보가 담긴 Push 라이센스 파일 - application_id 값을 :ref:`ApplicationID` 로 사용 .. code-block:: text #Tue Feb 17 09:53:27 KST 2015 application_id=xxx.xxx.xxxx.xxxx expiration_date=xxxx-xx-xx mpsn=hZK................X sn=AhA....E.... .. versionadded:: 3.8.1 Library - 라이센스 파일을 바탕으로 생성한 Security Indexes 값으로 Push 서비스를 운용하는 중에 생성되는 사용자 또는 단말기의 식별 가능한 데이타를 암호화 하여 저장 Manifest.xml ------------------ - Push 구동을 위한 설정 파일 .. code-block:: xml y n 0x??? 0x??? 0x??? 4.0 http://pushxx.morpheus.co.kr:18080/ 20000 xxxxxxxxxxxx,bbbbbbbbbbb UPNS device mobile n Y inapp 60 auto 10 10,20,30 10,30,50 auto - settings.push.receiver 에 대한 설정값 ====================== ========== ============= Key Type Description ====================== ========== ============= log String Push Service 에 대한 Debugging 로그 출력 여부 ( y / n ) version String UPMC Version ( 3.0, 3.5, 3.6, 3.7, 3.8, 4.0 ) server String UPMC WAS 서버 URL device-type String 서비스 디바이스에 대한 성정 (빈값 : mobile, mobile : mobile용, stb : 셋탑용) agent-service-type String UPNS 서비스 방식 (inapp : 라이브러리형, agent : 별도의 Agent 앱 구현시) agent-restart-interval String 앱이 살아 있는지 체크를 위한 시간 설정 (단위 : sec) agent-receive-confirm String upns 메시지 수신 결과에 대한 ack 전송 방법 (auto : 자동 (default), manual : 수동, 직접 구현) reconnect-interval String 재연결 요청 간격 (기본값: 10초) : 서버의 부하를 고려하여 설정 (반대로 너무 길 경우 재연결이 오래 걸리므로 주의) reallocate-interval String 서버 4.1 이상 이용 시 연결 실패에 따른 서버 재할당 간격 (기본값: 600ms) : 서버의 부하를 고려하여 설정 retry-regist-count String 사용자 등록 시 재시도 여부 auto / 횟수 (integer) ====================== ========== ============= .. note:: 파일로그 위치 : 스토리지 > Android > data > [package name] > log > pushlog.log AndroidManifest.xml 설정 (ver 4.0 이상) ----------------------- - Push 구동을 위한 Android 설정 파일 .. code-block:: xml UPNS 구현시 주의 사항 ---------------- - UPNSService: UPNS 푸시를 수신하기 위한 중요한 역할을 하므로 반드시 추가되어야 한다. - ServiceHandleReceiver: 라이브러리 내에 존재하는 리시버로 서비스의 생명 주기를 담당하는 리시버이다. - MessageArrivedReceiver: 서버로부터 메시지를 수신하는 리시버로 데이터 수신 시 화면에 보여줄 방법을 정의하여 사용한다. - UPNSActionReceiver: 라이브러리 내에 존재하는 리시버로 UPNS 기능에 대한 요청을 받아서 처리한다 6. Push Service 연동 ======================= 라이브러리 버전 ----------------- Case #1. Push service 등록 .. code-block:: java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PushManager.getInstance().registerServiceAndUser(getApplicationContext(), cuid, cname); ... } 플러그인 버전 ----------------- -- Push 플러그인 : http://docs.morpheus.co.kr/client/api/plugin-push.html 7. Push APIs ======================= Initialize Push Server --------------------------- .. c:function:: PushManager.getInstance().initPushServer(Context context); - Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다. :param Context context: 현재 Context .. c:function:: PushManager.getInstance().initPushServer(Context context, JSONObject params); - Manifest.xml 설정 파일에서 라이브러리를 초기화하기 위한 정보를 가져온다 :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================================= ========== ============= Key Type Description ============================================= ========== ============= PushConstants.KEY_CNAME String 사용자 닉네임 PushConstants.KEY_STB_ID String 셋탑 아이디 PushConstants.KEY_DEVICE_ID String 디바이스id PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL String UPMC url PushConstants.KEY_CUSTOM_UPNS_SERVER_URL String UPNS url ============================================= ========== ============= .. code-block:: java - 예시 : JSONObject params = new JSONObject(); // http://xxx.xxx.x.xx:xxxx 연결할 리시버 서버 url params.put(PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL, "http://xxx.xxx.x.xx:xxxx"); // tcp://xxx.xxx.x.xx:xxxx 연결할 UPNS 서버 url params.put(PushConstants.KEY_CUSTOM_UPNS_SERVER_URL, "tcp://xxx.xxx.x.xx:xxxx"); Register Service -------------------- .. c:function:: PushManager.getInstance().registerPushService(Context context); - GCM 및 UPNS에 푸시 서비스를 등록 한다. :param Context context: 현재 context .. c:function:: PushManager.getInstance().registerPushService(Context context, JSONObject params); - GCM / UPNS 에 푸시 서비스를 등록한다. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================================= ========== ============= Key Type Description ============================================= ========== ============= PushConstants.KEY_DEVICE_ID String 디바이스id PushConstants.KEY_CUSTOM_RECEIVER_SERVER_URL String UPMC url PushConstants.KEY_CUSTOM_UPNS_SERVER_URL String UPNS url ============================================= ========== ============= .. code-block:: java - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"/*생성하여 추가 요망*/); params.put(PushConstants.KEY_CNAME, "GUEST-A73E9E2E9C6B11E4AFAEC55006B96D3C"); Register User --------------- .. c:function:: PushManager.getInstance().registerPushUser(Context context, String cuid, String cname); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록 - 푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능하다. :param Context context: 현재 Context :param String cuid: :ref:`CUID` 값 :param String cname: :ref:`CNAME` 값 -결과값 : Reciver 를 통해, 처리 결과 통보 .. c:function:: PushManager.getInstance().registerPushUser (Context context, JSONObject params); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록 - 푸시 서비스를 이용할 사용자를 등록한다. 서비스 등록이 성공한 이후 사용자 등록이 가능하다. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================ ========== ============ ============= Key Type Necessary Description ============================ ========== ============ ============= PushConstants.KEY_CUID String 필수 :ref:`CUID` PushConstants.KEY_CNAME String 필수 :ref:`CNAME` PushConstants.KEY_STB_ID String 선택 STB ID PushConstants.KEY_DEVICE_ID String 선택 Device ID ============================ ========== ============ ============= -결과값 : Reciver 를 통해, 처리 결과 통보 Register Service and User ------------------------- .. c:function:: PushManager.getInstance().registerServiceAndUser(Context context, String cuid, String cname); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록 - GCM or UPNS에 푸시 서비스와 사용자을 동시에 처리 함. - 지원버전 : 서버 UPMC 3.7.2.9 이상, client 3.8.0.4 이상 :param Context context: 현재 Context :param String cuid: :ref:`CUID` 값 :param String cname: :ref:`CNAME` 값 -결과값 : Reciver 를 통해, 처리 결과 통보 .. c:function:: PushManager.getInstance().registerServiceAndUser (Context context, JSONObject params); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록 - GCM or UPNS에 푸시 서비스와 사용자을 동시에 처리 함. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================ ========== ============ ============= Key Type Necessary Description ============================ ========== ============ ============= PushConstants.KEY_CUID String 필수 :ref:`CUID` PushConstants.KEY_CNAME String 필수 :ref:`CNAME` PushConstants.KEY_STB_ID String 선택 STB ID PushConstants.KEY_DEVICE_ID String 선택 Device ID ============================ ========== ============ ============= -결과값 : Reciver 를 통해, 처리 결과 통보 Change Service ------------------------- .. c:function:: PushManager.getInstance().changePushService (Context context, JSONObject params); - Manifest 푸시 타입에 따라 최초 등록 이후, 서비스 타입을 동적으로 변경한다. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ================================= ========== ============ ============= Key Type Necessary Description ================================= ========== ============ ============= PushConstants.KEY_EDIT_PUSH_TYPE String 필수 Push Type ================================= ========== ============ ============= -결과값 : Reciver 를 통해, 처리 결과 통보 .. code-block:: java - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_EDIT_PUSH_TYPE, PushConstants.STR_UPNS_PUSH_TYPE); UnRegister User --------------- .. c:function:: PushManager.getInstance().unregisterPushUser(Context context, String cuid, String cname); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록해제 - GCM or UPNS에 푸시 서비스를 이용할 사용자를 등록헤재 한다 :param Context context: 현재 Context :param String cuid: :ref:`CUID` 값 :param String cname: :ref:`CNAME` 값 -결과값 : Reciver 를 통해, 처리 결과 통보 .. c:function:: PushManager.getInstance().unregisterPushUser (Context context, JSONObject params); - :ref:`CUID` 와 :ref:`CNAME` 으로 User 등록 해제 - GCM or UPNS에 푸시 서비스를 이용할 사용자를 등록해제 한다. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================ ========== ============ ============= Key Type Necessary Description ============================ ========== ============ ============= PushConstants.KEY_CUID String 필수 :ref:`CUID` PushConstants.KEY_CNAME String 필수 :ref:`CNAME` ============================ ========== ============ ============= -결과값 : Reciver 를 통해, 처리 결과 통보 Unregister Service -------------------- .. c:function:: PushManager.getInstance().unregisterPushService(Context context); - GCM 및 UPNS에 푸시 서비스를 해제 한다. :param Context context: 현재 context -결과값 : Reciver 를 통해, 처리 결과 통보 .. c:function:: PushManager.getInstance().unregisterPushService(Context context, JSONObject params); - GCM / UPNS 에 푸시 서비스를 해제 한다. :param Context context: 현재 Context :param JSONObject params: 정보셋팅 - JSONObject key 값에 대한 설명 ============================ ========== ============ ============= Key Type Necessary Description ============================ ========== ============ ============= PushConstants.KEY_CNAME String 선택 :ref:`CNAME` PushConstants.KEY_STB_ID String 선택 STB ID PushConstants.KEY_DEVICE_ID String 선택 Device ID ============================ ========== ============ ============= .. code-block:: java - 예시 : JSONObject params = new JSONObject(); params.put(PushConstants.KEY_STB_ID, "{A73E9E2E-9C6B-11E4-AFAE-C55006B96D3C}"); params.put(PushConstants.KEY_DEVICE_ID, "DEVICE-A73E9E2E9C6B11E4AFAEC55006B96D3C"); Read Push Message --------------------- .. c:function:: PushManager.getInstance().pushMessageReadConfirm (Context context, String notification); - 사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송한다. :param Context context: 현재 context :param String notification: 수신한 push message(JSONObject의 string값) .. c:function:: PushManager.getInstance().pushMessageReadConfirm (Context context, String notification, int badgeCountType); - 사용자가 메시지를 확인 하는 경우, 메시지 확인 전문을 전송하며, 서버와 badge count를 동기화 한다. .. versionadded:: 4.0 UPMC :param Context context: 현재 context :param String notification: 수신한 push message(JSONObject의 string값) :param int badgeCountType - badgeCountType key 값에 대한 설명 ================================ ========== =============================================================== Key Type Description ================================ ========== =============================================================== PushConstants.BADGE_TYPE_KEEP String 1개 읽음 처리, 다음 메시지 수신시, 동일한 값 유지(Default, -1 후 +1 이 됨) PushConstants.BADGE_TYPE_RESET String 입력 값으로 초기화, 다음 수신된 값은 입력값 +1로 처리됨 PushConstants.BADGE_TYPE_UPDATE String 카운트에 따라 업데이트 됨 (읽음여부에 상관없이, push 수신 ++) ================================ ========== =============================================================== Receive Push Message ------------------------ .. c:function:: PushManager.getInstance().pushMessageReceiveConfirm (Context context, String notification); - GCM Only - 메시지 수신 시 메시지 수신 전문을 전송한다. :param Context context: 현재 context :param String notification: 수신한 push message(JSONObject의 string값) .. c:function:: PushManager.getInstance().upnsMessageReceiveConfirm (Context context, String msgID); - UPNS Only - mqtt를 통해 수신한 메시지에 대한 응답 (Manifest.xml 에서 값이 "manual"인 경우 작동한다) :param Context context: 현재 context :param String msgID: 수신된 푸시 인텐트로부터 받은 MESSAGEID UPNS Subscribe -------------------- .. c:function:: PushManager.getInstance().upnsSubscribe(Context context); - UPNS Only - UPNS 서버에 subscribe 요청을 다시한다. (요청 시 오프라인 메시지 수신 [서버로 부터 발송이 실패되어 저장중인 메시지] – 부하가 될 수 있으므로 주의 사용) :param Context context: 현재 context Register Group -------------------- .. c:function:: PushManager.getInstance().registerUserGroup (Context context, String groupSeq); - 사용자 그룹에 등록한다. :param Context context: 현재 context :param String groupSeq: 등록하고자 하는 그룹의 sequence number UnRegister Group -------------------- .. c:function:: PushManager.getInstance().unregisterUserGroup (Context context, String groupSeq); - 사용자 그룹에서 등록을 해제 한다. :param Context context: 현재 context :param String groupSeq: 해제하고자 하는 그룹의 sequence number Init Badge Number -------------------------- .. c:function:: PushManager.getInstance().initBadgeNo (Context context, String badgeNo); - 서버의 Badge NO를 강제 셋팅 또는 초기화 - Badge NO 최소값 : 0 - Badge NO 최대값 : 1000 :param Context context: 현재 context :param String badgeNo: 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) Set DeviceBadge Count -------------------------- .. c:function:: PushManager.getInstance().setDeviceBadgeCount (Context context, String badgeNo); - 폰의 Badge NO를 표기함 - 폰의 설치된 런처에 따라, 작동하지 않을 수 있음 - Badge NO 최소값 : 0 - Badge NO 최대값 : 1000 :param Context context: 현재 context :param String badgeNo: 서버에서 관리되는 뱃지 count에 대한 초기값 (0을 셋팅하는 경우, push수신시 1로 셋팅됨) Get Reg Status -------------------------- .. c:function:: PushManager.getInstance().getPushRegStatus (Context context); - retry-regist-count 재시도 옵션이 auto 혹은 임의의 수일 경우 현재 등록 태스트의 상태 반환 - PushConstants.PushRegistStatus.REGISTER_RUNNING : 등록 수행중 상태 - PushConstants.PushRegistStatus.ALREADY_REGISTERED : 등록 완료 상태 - PushConstants.PushRegistStatus.NOT_REGISTERED : 미등록 상태 :param Context context: 현재 context 8. Push APIs 키값 정의 =================== ver 4.0 이상 ------------------- .. _BUNDLEKEY * API 호출에 따른 결과값 (BroadCastReceiver bundle key) ======================================================= =============================================================== Key Description (결과값) ======================================================= =============================================================== PushConstantsEx.COMPLETE_BUNDLE.REG_USER 사용자 등록 PushConstantsEx.COMPLETE_BUNDLE.UNREG_USER 사용자 등록 PushConstantsEx.COMPLETE_BUNDLE.UPDATE_PUSHSERVICE_DATE push service 갱신 PushConstantsEx.COMPLETE_BUNDLE.REG_PUSHSERVICE 푸시 서비스 등록 PushConstantsEx.COMPLETE_BUNDLE.UNREG_PUSHSERVICE 푸시 서비스 해제 PushConstantsEx.COMPLETE_BUNDLE.READ_CONFIRM 읽음 ack PushConstantsEx.COMPLETE_BUNDLE.RECEIVE_CONFIRM 수신 ack (gcm only) PushConstantsEx.COMPLETE_BUNDLE.IS_REGISTERED_SERVICE 서비스 등록 여부 (register service 호출 시, 수신 될 수 있음) PushConstantsEx.COMPLETE_BUNDLE.INITBADGENO 뱃지 넘버 초기화 PushConstantsEx.COMPLETE_BUNDLE.REG_GROUP 그룹 등록 PushConstantsEx.COMPLETE_BUNDLE.UNREG_GROUP 그릅 해제 ======================================================= =============================================================== .. _STATUSCODE: * BroadCastReceiver bundle key return 값 (STATUS CODE - 통신관련) ======================================================= =============================================================== Key Description (결과값) ======================================================= =============================================================== PushConstants.RESULTCODE_OK 정상 PushConstants.RESULTCODE_HTTP_ERR 통신 오류 - UPMC서버에 접속할 수 없을때 - connection 관련 error PushConstants.RESULTCODE_AUTHKEY_ERR 인증키 획득 오류 PushConstants.RESULTCODE_RESPONSE_ERR 응답 오류 - 오류코드를 수신한 경우 PushConstants.RESULTCODE_INTERNAL_ERR 정의되지 않은 예기치 못한 오류가 발생한 경우 PushConstants.RESULTCODE_AUTHKEY_ERR2 인증키 획득 오류 ======================================================= =============================================================== .. _BROADCASTINTENT: * BroadCastReceiver Intent 관련 키값 (처리 결과 ) ======================================================= =============================================================== Key Description (결과값) ======================================================= =============================================================== PushConstants.KEY_RESULT ACTION_COMPLETED에 Extras용 전체 호출값 PushConstants.KEY_BUNDLE 번들용 KEY PushConstants.KEY_ISREGISTER 서비스 등록 여부에 대한 결과값 PushConstants.KEY_RESULT_CODE 결과 코드 (정상 : 200) PushConstants.KEY_RESULT_MSG upmc 통신 이후, 수신된 메시지 ======================================================= =============================================================== 9. UPMC용 BroadcastReceiver 등록 방법 (예시) ======================================== receiver 등록 ------------- .. code-block:: java private BroadcastReceiver mLoginBroadcastReceiver; public void registerReceiver() { if (mMainBroadcastReceiver != null) { return; } // 화면에서 서비스 등록 결과를 받기 위한 리시버 등록 - 패키지명.ACTION_COMPLETED IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(MainActivity.this.getPackageName() + PushConstantsEx.ACTION_COMPLETED); mMainBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 수신된 인텐트(결과값 응답) 의 정상 데이터 여부 체크 (푸시 타입/액션 타입) - 반드시 구현 if(! PushUtils.checkValidationOfCompleted(intent, context)){ return; } //push 타입 판단 JSONObject result_obj = null; // 수신된 오브젝트 String result_code = ""; // 결과 코드 String result_msg = ""; // 결과 메세지 try { result_obj = new JSONObject(intent.getExtras().getString(PushConstants.KEY_RESULT)); result_code = result_obj.getString(PushConstants.KEY_RESULT_CODE); result_msg = result_obj.getString(PushConstants.KEY_RESULT_MSG); } catch (JSONException e) { e.printStackTrace(); } // 액션 타입 String bundle = intent.getStringExtra(PushConstantsEx.KEY_BUNDLE); //액션에 따라 분기 (이미 서비스 등록이 완료된 상태인 경우 다음 process 이동) if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.IS_REGISTERED_SERVICE)) { //mProgressDialog.dismiss(); Logger.e(result_code); String resultPushType = intent.getExtras().getString(PushConstants.KEY_PUSH_TYPE); if (resultPushType.equals(PushHandler.getInstance().getPushConfigInfo(getApplicationContext()).getPushType())) { if (result_code.equals(PushConstants.RESULTCODE_OK)) { Intent pageIntent = new Intent(mMainActivity, LoginActivity.class); startActivity(pageIntent); finish(); } } else { Toast.makeText(mMainActivity, result_msg, Toast.LENGTH_LONG).show(); } // 최초 서비스 등록이 완료된 경우 다음 process 이동 } else if (bundle.equals(PushConstantsEx.COMPLETE_BUNDLE.REG_PUSHSERVICE)) { // 등록 성공 if (result_code.equals(PushConstants.RESULTCODE_OK)) { Toast.makeText(context, "등록 성공!", Toast.LENGTH_SHORT).show(); Intent pageIntent = new Intent(mMainActivity, LoginActivity.class); startActivity(pageIntent); finish(); } // 통신 에러 else if (result_code.equals(PushConstants.RESULTCODE_HTTP_ERR)) { Toast.makeText(context, "[MainActivity] error code: " + result_code + " msg: " + result_msg, Toast.LENGTH_SHORT).show(); } // 인증키 오류 else if (result_code.equals(PushConstants.RESULTCODE_AUTHKEY_ERR)) { Toast.makeText(context, "[MainActivity] error code: " + result_code + " msg: " + result_msg, Toast.LENGTH_SHORT).show(); } // 서버 응답 에러 else if (result_code.equals(PushConstants.RESULTCODE_RESPONSE_ERR)) { Toast.makeText(context, "[MainActivity] error code: " + result_code + " msg: " + result_msg, Toast.LENGTH_SHORT).show(); } // 라이브러리 에러 - 파싱 에러 else if (result_code.equals(PushConstants.RESULTCODE_INTERNAL_ERR)) { Toast.makeText(context, "[MainActivity] error code: " + result_code + " msg: " + result_msg, Toast.LENGTH_SHORT).show(); } // 기타 else { Toast.makeText(context, "[MainActivity] error code: " + result_code + " msg: " + result_msg, Toast.LENGTH_SHORT).show(); //System.exit(0); } } } }; LocalBroadcastManager.getInstance(this).registerReceiver(mMainBroadcastReceiver, intentFilter); } receiver 해제 --------- .. code-block:: java public void unregisterReceiver() { if (mMainBroadcastReceiver != null) { LocalBroadcastManager.getInstance(this).unregisterReceiver(mMainBroadcastReceiver); mMainBroadcastReceiver = null; } } 10. UPNS Push Payload [ :ref:`UPNS` ] ============================ - 아래 기술된 메시지는 샘플에 대한 예시이며, 프로젝트에서 표현하고자 하는 방식에 따라, Interface 정의서에 의해, 변경이 가능함. - JSONObject key 값에 대한 설명 ================ =========================================================================== Key 활용방법 ================ =========================================================================== MESSAGE 메시지 타이틀로 이용 EXT 일반 메시지인 경우, 메시지로 이용가능하며, Rich 메시지인 경우, 세부 정보를 추가로 획득하여, 표현 SEQNO Push message의 고유 키값 PSID Push 서비스에 대한 고유 ID( :ref:`PSID`) APPID Push 서비스가 관리되는 앱 ID( :ref:`ApplicationID`) CUID 사용자 ID( :ref:`CUID`) PUBLIC Public 망을 이용하는 push 여부 SENDERCODE 발송자 코드 (서버관점) SENDDATE 발송된 시간 (서버관점) DB_IN DB에 저장 여부 (서버 관점) BADGENO 뱃지값 ================ =========================================================================== 일반(text) push 메시지 예시 -------------------------- { "BODY":{ "MESSAGE":"일반 알림", "EXT":"메세지 테스트", "SEQNO":"304", "PSID":"9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4", "APPID":"com.uracle.push.test", "CUID":"test1", "PUBLIC":"N", "SENDERCODE":"device-android", "SENDDATE":"2016041410", "DB_IN":"Y", "BADGENO":"9" } } 웹 브라우저 호출 push 메시지 예시 -------------------------- { "BODY":{ "MESSAGE":"Web 알림", "EXT":"1|웹페이지|http://lab.morpheus.kr/push/sample/image|http://lab.morpheus.kr/push/sample/webpage", "SEQNO":"305", "PSID":"9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4", "APPID":"com.uracle.push.test", "CUID":"test1", "PUBLIC":"N", "SENDERCODE":"device-android", "SENDDATE":"2016041410", "DB_IN":"Y", "BADGENO":"10" } } 이미지 push 메시지 예시 -------------------------- { "BODY":{ "MESSAGE":"이미지 알림", "EXT":"1|웹페이지|http://lab.morpheus.kr/push/sample/image", "SEQNO":"307", "PSID":"9ca385ad63c4cbd5eeda33c2e7a7a024ea83c2d4", "APPID":"com.uracle.push.test", "CUID":"test1", "PUBLIC":"N", "SENDERCODE":"device-android", "SENDDATE":"2016041410", "DB_IN":"Y", "BADGENO":"12" } } 11. UPNS Reallocate ============================ - 푸시 서버 버전 4.1이상에서 서버 장애 시 UPNS 재연결에 대한 동작 추가 (이하 버전에서는 해당 시나리오 동작안함.) - 재연결 3회 실패 시 랜덤한 시간 간격으로 UPMC에 새로운 UPNS IP/PORT를 요청 후 응답 정보를 이용하여 재연결 요청 Sequence Diagram ------------------- .. figure:: ../_static/push/android/upns/upns-reallocate.png