6. DRM 라이선스 갱신
오프라인 저장소에 보관된 다운로드 콘텐츠의 DRM 만료 여부를 판별하고, 만료된 권한을 실시간 또는 일괄로 안전하게 갱신하는 방법을 설명합니다.
이 문서의 모든 예제 코드는 공식 샘플 앱인 kollus_player_ios를 바탕으로 작성되었습니다.
라이선스 만료 확인
콘텐츠 객체의 DRM 만료 상태를 사전에 체크하여 갱신 프로세스 진입 여부를 판단하는 기준 코드입니다.
func isExpired(_ c: KollusContent) -> Bool {
return c.DRMExpired
|| (c.drmTotalExpirePlayTime > 0 && c.DRMExpirePlayTime <= 0)
|| (c.drmExpireCountMax > 0 && c.drmExpireCount <= 0)
}
라이선스 일괄 갱신 API
updateDownloadDRMInfo 메서드를 사용하면 스토리지에 등록된 콘텐츠들의 DRM 라이선스를 한 번에 일괄 갱신할 수 있습니다.
func renewDRMContents(isAll: Bool) {
storage.updateDownloadDRMInfo(isAll)
}
파라미터 명세
| 파라미터 | 설명 |
|---|---|
isAll = true | SDK에 등록된 모든 다 운로드 콘텐츠의 라이선스 갱신을 시도합니다. |
isAll = false | 만료되었거나 곧 만료될 예정인 콘텐츠만 선택하여 갱신을 시도합니다. |
메서드가 호출되면 주입된 델리게이트 콜백 루프(kollusStorage(_:cur:count:error:))를 통해 현재 몇 번째 항목이 처리 중인지 전체 진행률 상태가 애플리케이션 레이어로 통지됩니다.
백그라운드 갱신 제약 사항
iOS는 백그라운드 실행 시간에 엄격한 제약(Background Execution Limits)이 있어, 앱이 화면에서 벗어난 상태에서 라이선스 갱신을 완벽히 수행하도록 보장할 수 없습니다. 안정적인 연동을 위해 아래와 같은 패턴을 권장합니다.
- 포그라운드 전환 시점 활용: 사용자가 앱을 다시 실행하거나 활성화하는 타이밍인
applicationDidBecomeActive진입 시점에 맞추어 호출합니다. - 재생 직전 타이밍 활용: 사용자가 다운로드된 콘텐츠를 재생 직전에 동기(Sync) 방식으로 API를 호출하는 구조가 가장 확실하고 안정적입니다.