8. 다운로드 이벤트/콜백
다운로드 파이프라인 실행 중에 발생하는 트래픽 상태 변화와 DRM 검증 이벤트를 애플리케이션 레이어로 통지하는 콜백 인터페이스 연동 방법을 설명합니다. SDK는 역할에 따라 크게 두 종류의 리스너 콜백 인터페이스를 제공합니다.
다운로드 진행 이벤트 리스너
MultiKollusStorageListener를 구현하여 파일의 백그라운드 수신 진행 상태 및 완료/실패 여부를 추적합니다.
각 콜백 메서드는 상태 변화를 실시간 반영하고 있는 KollusContent 최신 객체 소스와 함께 전달됩니다.
실시간 진행률 정보는 수신된 객체 내부의 content.getDownloadPercent() 속성값 또는 content.getReceivingSize() / content.getFileSize() 연산을 통해 직접 확보할 수 있습니다.
public interface MultiKollusStorageListener {
void onComplete(KollusStorage storage, KollusContent content);
void onProgress(KollusStorage storage, KollusContent content);
void onError(KollusStorage storage, KollusContent content, int nErrorCode);
}
DRM 이벤트 리스너
MultiKollusPlayerDRMListener를 구현하여 DRM 검증 결과와 만료 이벤트를 수신합니다.
public interface MultiKollusPlayerDRMListener {
int DCB_INFO_DELETE = 0; // kind2 또는 kind3 응답에 의한 콘텐츠 강제 삭제
int DCB_INFO_EXPIRED = 1; // kind3 응답에 의한 강제 만료
int DCB_INFO_RESET = 2; // kind3 응답에 의한 콘텐츠 초기화
void onDRM(KollusStorage storage, String request, String response);
void onDRMInfo(KollusStorage storage, KollusContent content, int nInfoCode);
}
참고 문서
콜백 내부 분기 조건에 바인딩되는 kind1, kind2, kind3의 세부 명세는 DRM 다운로드 콜백 문서를 참고하세요.
이벤트-콜백 대응표
| 표준 이벤트 | 실제 콜백 위치 |
|---|---|
| 다운로드 시작 | storage.download(mck) 메서드가 0 이상을 반환한 직후 |
| 진행률 변경 | MultiKollusStorageListener.onProgress(storage, content) |
| 다운로드 일시 중단 | 전용 콜백 없음 (취소와 동일) |
| 다운로드 재개 | 전용 콜백 없음 (시작과 동일) |
| 다운로드 완료 | MultiKollusStorageListener.onComplete(storage, content) |
| 다운로드 실패 | MultiKollusStorageListener.onError(storage, content, errorCode) |
| 라이선스 만료 | MultiKollusPlayerDRMListener.onDRMInfo(storage, content, DCB_INFO_EXPIRED) |
| 라이선스 갱신 결과 | updateDownloadDRMInfo 호출 시 전달한 KollusPlayerDRMUpdateListener |
리스너 콜백 등록 및 해제
Android 컴포넌트(Activity/Service) 라이프사이클에 맞춰 리스너를 등록하고 해제해야 합니다.
@Override
protected void onCreate(...) {
...
multiStorage.registerKollusStorageListener(mStorageListener);
multiStorage.registerKollusPlayerDRMListener(mDRMListener);
}
@Override
protected void onDestroy() {
multiStorage.unregisterKollusStorageListener(mStorageListener);
multiStorage.unregisterKollusPlayerDRMListener(mDRMListener);
...
}