6. DRM 라이선스 갱신
오프라인 저장소에 보관된 다운로드 콘텐츠의 DRM 만료 여부를 판별하고, 만료된 권한을 실시간 또는 일괄로 안전하게 갱신하는 방법을 설명합니다.
이 문서의 모든 예제 코드는 공식 샘플 앱인 kollus_player_v2_android를 바탕으로 작성되었습니다.
라이선스 만료 확인
콘텐츠 객체의 DRM 만료 상태를 사전에 체크하여 갱신 프로세스 진입 여부를 판단하는 기준 코드입니다.
KollusContent c = ...;
boolean expired =
c.getDrmExpireDate() < System.currentTimeMillis()
|| c.getDrmExpirePlayTime() <= 0
|| c.getDrmExpireCount() >= c.getDrmExpireCountMax();
라이선스 일괄 갱신 API
updateDownloadDRMInfo 메서드를 사용하면 스토리지에 등록된 콘텐츠들의 DRM 라이선스를 한 번에 일괄 갱신할 수 있습니다.
메서드가 호출되면 주입된 KollusPlayerDRMUpdateListener 콜백 루프를 통해 콘텐츠별 갱신 진행률, 완료 상태, 갱신 오류 결과가 애플리케이션 레이어로 통지됩니다.
multiStorage.updateDownloadDRMInfo(
diskIndex, // 물리 저장소 인덱스 (-1 지정 시 전체 디스크 갱신)
drmUpdateListener, // 갱신 이벤트를 수신할 KollusPlayerDRMUpdateListener 객체
bAll); // true: 목록 내 전체 콘텐츠 강제 갱신 / false: 만료된 콘텐츠만 선택 갱신
백그라운드 갱신 제약 사항
Android의 Doze 모드 및 앱 대기 상태(App Standby) 배터리 최적화 정책으로 인해, 앱이 화면에 보이지 않는 백그라운드 상태에서의 무중단 라이선스 갱신이 제한될 수 있습니다. 안정적인 연동을 위해 아래와 같은 패턴을 권장합니다.
- 포그라운드 서비스 활용: 다운로드 작업이 진행 중이어서 이미 포그라운드 서비스(Foreground Service)가 활성화되어 있는 시점에 갱신 API를 함께 결합하여 호출합니다.
- 포그라운드 전환 시점 활용: 사용자가 앱을 다시 실행하거나 화면을 활성화하는 시점에 맞추어 갱신 프로세스를 실행합니다.
연동 권장 정책
WorkManager 컴포넌트와 주기적 작업(Periodic Work) 구조를 결합하여 백그라운드 갱신을 시도할 수도 있으나, 운영체제 사양에 따라 정확한 실행 시점이 보장되지 않습니다.
서비스 안정성을 위해서는 사용자가 영상을 재생하기 직전 타이밍에 만료 여부를 검사하고 동기(Sync) 방식으로 API를 호출하는 구조가 가장 확실합니다.