notice


notice는 2.6.4 버전 이상 부터 제공되며 해당 라이브러리를 추가하여 사용해야 된다.

notice 은 HSP 에서 확장 라이브러리로 제공하는 API 로 aar 라이브러리 파일과 build.gradle 파일을 수정하여 사용할 수 있다. 

라이브러리 추가 방법은 Android 개발 가이드의 내용을 참조하면 된다.

notice 은 Operation 에 등록하는 공지사항 정보를 단말에 표현하는 기능을 가진다. 공지사항은 텍스트, 이미지 형태를 가지고 있고 외부 링크를 추가할 수도 있다. 


사용 설정

INetworkDelegate

notice 는 Operations Center 에 Notice 관련 데이터를 요청/응답 받아야 하는데 notice 자체는 Operations Center와 통신하기 위한 코드가 별도로 존재하지 않기 때문에 NetworkDelegate 가 필요 하다.

NetworkDelegate 는 보통 MainActivity 내에 구현되어야 하며 그에 대한 예제는 아래와 같다. 

Example

DAPNotice.setNetworkDelegate(new INetworkDelegate() {
@Override
   public Object post(@NonNull NetworkDelegateParams params) {
        Network.Builder builder = Network.builder();

       // container 가 존재하면 구현해 두었던 DAPNetwork 를 통해 처리 하고
       if (params.container != null) {
           if (params.typeRef == null) {
               return DAPNetwork.doRequest(HoneMobileActivity.this,
                        DAPNetwork.METHOD_POST, params.container);
           } else {
               return DAPNetwork.doRequest(HoneMobileActivity.this,
                        DAPNetwork.METHOD_POST, params.container, params.typeRef);
           }
       } else {
           // 일단 url 로 호출했을 경우는 NetworkDelegate 를 통해 처리 한다.
           if (!TextUtils.isEmpty(params.url)) {
                builder.url(params.url);
           }

           if (params.forceDownload) {
                builder.forceDownload(true).retrieveDownloadPath();
           }

           if (params.multipartBody != null) {
                builder.multipartBody(params.multipartBody);
           }

            NetworkBase network = NetworkDelegate.get().net(HoneMobileActivity.this);

           return networkInternal(false, network, builder, params);
       }
   }

   @Override
   public void asyncPost(@NonNull NetworkDelegateParams params) {
        Network.Builder builder = Network.builder();

       if (params.container != null) {
           if (params.typeRef == null) {
                DAPNetwork.asyncDoPost(HoneMobileActivity.this, params.container,
                        params.successCallback, params.errorCallback);
           } else {
                DAPNetwork.asyncDoPost(HoneMobileActivity.this, params.container,
                        params.successCallback, params.errorCallback, params.typeRef);
           }
       } else {
           // 일단 url 로 호출했을 경우는 NetworkDelegate 를 통해 처리 한다.
           if (!TextUtils.isEmpty(params.url)) {
                builder.url(params.url);
           }

           if (params.forceDownload) {
                builder.forceDownload(true).retrieveDownloadPath();
           }

           if (params.multipartBody != null) {
                builder.multipartBody(params.multipartBody);
           }

            NetworkBase network = NetworkDelegate.get().net(HoneMobileActivity.this);

            Executors.newSingleThreadExecutor().execute(() -> networkInternal(true, network, builder, params));
       }
   }});

IConfigDelegate

notice 를 이용하기 위해서는 서버에서 전달하는 이미지 파일을 저장할 경로를 지정해야 하며, 이를 위해 IConfigDelegate 를 구현해야 한다.
MainActivity 에 IConfigDelegate 를 implements 한 뒤 getConfig 를 Override 하고 DAPNotice.NOTICE_DOWNLOAD_DIR 에 해당하는 값을 반환 하면 된다. 

Example

public class MainActivity extends HoneMobileActivity implements IConfigDelegate {
   // ...
   
   @Override
   public String getConfig(@NonNull String key) {
       switch (key) {
           case IConfigDelegate. DOWNLOAD_PATH
               return HoneMobile.get().resource().downloadPath();
       }

       return null;
   }
   
   // ...
}

show

show 는 Operation 서버에서 Notice 데이터를 읽은 후 이를 파싱하여 화면에 출력한다. 

Example

DAPNotice.show(this@MainActivity, {
  //ToDo
}) {
  //ToDo
}
DAPNotice.show(MainActivity.this, result -> {
       //ToDo
    }, e-> {
       //ToDo
    });

get

get 은 Operation 서버에서 전달 하는 JSON 객체를 반환 하며 반환되는 정보는 아래와 같다.

JSON Format

{
   "header": {},
   "payload": {
       "noticeInfos": [{
           "id": 104,
           "launcherAppId": null,
           "title": "이미지테스트입니다.",
           "type": "image",
           "priority": "high",
           "url": "www.daum.net",
           "imagePath": "https://hone.hanwha.co.kr/smartop_2_6_3_1/download?type=noticeImage&imageName=1477877977777_null",
           "content": null,
           "startDate": 1477580400000,
           "endDate": 1478030400000
        }, {
           "id": 103,
           "launcherAppId": null,
           "title": "텍스트 테스트입니다.",
           "type": "text",
           "priority": "normal",
           "url": "www.naver.com",
           "imagePath": null,
           "content": "텍스트 공지 테스트입니다.",
           "startDate": 1477580400000,
           "endDate": 1478012400000
        }]
    }
}
필드필드설명
noticeInfosid공지사항 인덱스
launcherAppId앱 아이디
title공지사항 제목
type공지사항 타입
priority공지사항 레벨 (high/normal/low)
url공지사항 경로
imagePath공지사항 이미지 경로
startDate기재 시작 날짜 (Timestamp 기준)
endDate기재 종료 날짜 (Timestamp 기준)
content공지사항 내용
   

이를 이용하여 사용자는 자신이 원하는 형태의 Notice 를 생성할 수 있다. 

Example

DAPNotice.get(this@MainActivity, {
   // TODO
}) {
   // TODO
}
DAPNotice.get(MainActivity.this, result -> {
      // TODO
   }, e -> {
      // TODO
   });

Error Code

CodeCauseComment
E11100파라메터 값이 잘못되어 있을 경우 
E11101전달된 액션 값이 알 수 없는 액션일 경우 
E11150실행 중 오류가 발생 되었을 경우 
E11151서버로 부터 전달받은 응답 메시지가 없는 경우 
E11152서버로 부터 전달받은 응답 메시지가 잘못되어 있는 경우 
E11199알 수없는 오류가 발생 되었을 경우