오프라인 학습 운영
다운로드 학습을 열 때
기한·네트워크·기록 규칙을 정합니다
다운로드를 허용하면 학습자는 이동 중에도 강의를 듣고, 운영자는 기기 안에 남는 파일과 늦게 도착하는 시청 기록을 관리하게 됩니다. 오프라인 재생 기한 설계, 플랫폼별 설정 위치, 모바일 데이터 제한, 다운로드 상태, 오프라인 기록 합산, 만료와 저장소 관리, 운영 점검표 순서로 정리했습니다.
최종 수정
과정별 오프라인 재생 기한 정하기
기한은 다운로드를 시작할 때 DRM 설정 값 offlineAccessPeriod에 담깁니다. null은 무기한, 0은 오프라인 재생 불가, 양수는 그만큼의 기간입니다. 아래 값은 과정 성격별 권장 예시입니다.
| 과정 성격 | 권장 기한 | 웹(Agent)에 넣는 값 |
|---|---|---|
| 대외비·보안 교육 | 오프라인 재생 불가. 다운로드 자체를 열지 않는 편이 낫습니다. | 0 |
| 기간제 수강 | 남은 수강 기간 이하. 예를 들어 7일 | 604800 |
| 출장·현장 교육 | 일정 길이에 하루 여유. 예를 들어 3일 | 259200 |
| 대여 상품 | 남은 대여 시간 이하 | 남은 초를 계산해 넣음 |
| 기한 없는 소장 | 제한 없음 | null |
기한을 세기 시작하는 시점은 300초 같은 짧은 값으로 직접 시험해 운영 문서에 적어 두세요. Android에서 null을 쓴다면 null일 때의 오동작을 고친 2026년 3월 30일 이후 SDK를 쓰는 것이 안전합니다.
플랫폼별 설정 위치
같은 정책이라도 넣는 자리와 값의 형식이 플랫폼마다 다릅니다. 앱 개발팀에 이 표를 그대로 넘기면 됩니다.
| 항목 | Android SDK | iOS SDK |
|---|---|---|
| 오프라인 기한 | MediaItem.withDrmConfiguration() 인자, java.time.Duration 형식, 생략하면 null | DrmConfiguration.Builder 메서드, SDK 자체 Duration 형식, 생략하면 nil |
| 다운로드 추가 | add(mediaItem, allowsCellularAccess). 둘째 인자를 생략하면 셀룰러 허용 | add(mediaItem:allowsCellularAccess:). 생략하면 셀룰러 허용 |
| 스트리밍 셀룰러 | 재생 화면 설정 MediaPlayerActivityConfiguration의 같은 이름 값, 생략하면 허용 | present()에 넘기는 Configuration의 같은 이름 값, 생략하면 허용 |
| 동시 다운로드 | maxParallelDownloads로 조정, 처음 값 3개 | 같은 속성, 처음 값 3개 |
| 사전 준비 | AndroidManifest.xml에 DOWNLOAD_COMPLETE를 받는 DownloadCompleteReceiver 등록 | handleEventsForBackgroundURLSession에서 setBackgroundCompletionHandler 호출 |
| 저장 위치 | downloadsUri 아래에 저장, 항목 경로는 displayPath(상대 경로)와 toUri(전체 경로) | downloadsUrl 아래에 저장, 항목 경로는 displayPath와 toUrl |
PC에서는 웹 페이지가 넘기는 MediaItem의 drm 항목에 초 단위 기한을 적습니다. 한 편은 launch()를 Downloading 타입으로 부르고, 여러 편은 playnplay.download()에 배열로 한 번에 넘깁니다. 다운로드 파일 경로로 보일 값은 metadata.downloadPath에 적습니다. 화면 흐름은 PC 플랫폼 안내를 보세요.
모바일 데이터 사용 규칙
Android·iOS SDK는 다운로드와 스트리밍의 셀룰러 허용을 따로 정합니다. 학습자 데이터 요금과 문의량을 함께 고려해 조합을 고르세요.
-
Download
다운로드는 Wi-Fi 전용으로
다운로드 항목을 넣는 add()에 allowsCellularAccess: false를 주면 모바일 데이터로는 받지 않습니다. 용량이 큰 강좌 묶음을 내려받게 하는 서비스에 권합니다.
-
Streaming
스트리밍은 별도 판단
재생 화면 설정의 같은 이름 값은 스트리밍에 적용됩니다. 다운로드만 Wi-Fi로 묶고 스트리밍은 열어 두는 운영도 가능합니다.
-
Error
Wi-Fi가 끊기면 오류
스트리밍 셀룰러를 막아 둔 앱에서 Wi-Fi까지 끊긴 채 재생을 누르면 셀룰러 차단 오류(Android NoCellularAccessException, iOS noCellularAccess)가 납니다. 안내 문구에 Wi-Fi 연결 방법을 넣으세요.
다운로드 상태와 다운로드함 안내
Android·iOS SDK의 다운로드 항목은 같은 다섯 상태를 씁니다. 다운로드함 화면의 문구를 상태마다 미리 정해 두면 문의가 줄어듭니다.
| 상태 | 문서상 의미 | 다운로드함 안내 예 |
|---|---|---|
| Pending | 다운로드할 수 있거나 기다리는 상태 | 대기 중. 동시에 받는 수를 넘으면 앞선 항목이 끝난 뒤 시작합니다. |
| Downloading | 다운로드 중 | 진행률 표시. Android는 받은 크기와 전체 크기를 바이트로, iOS는 두 숫자의 묶음으로 줍니다. |
| Paused | 일시 정지 | 이어받기 버튼. 개별 재개와 전체 재개 메서드가 있습니다. |
| Completed | 다운로드 완료 | 남은 오프라인 시청 기간을 함께 표시 |
| Failed | 다운로드 실패 | 실패 사유별 문구. Android는 실패 사유 13종, iOS는 문자열 |
고객사 서버에는 NotifyDownloadStatus로 시작(Started), 완료(Completed), 취소(Canceled), 실패(Failed)가 생성 시각과 함께 옵니다. 실패 사유별 처리는 오류 대응 가이드에 있습니다.
늦게 도착하는 시청 기록 합산하기
오프라인 시청 기록은 학습자가 다시 연결해야 들어옵니다. 진도 마감과 집계 규칙을 이 지연에 맞춰 두세요.
-
도착 조건 알기
시작이나 종료 순간에 네트워크가 없던 세션은 기기에 쌓였다가, 다시 연결되는 시점에
NotifyOfflinePlaybackLog의 세션 목록(items)으로 전송됩니다. 요청마다 mediaUrl이 하나씩 실리니 미디어 단위로 받아 처리하세요. 처음부터 끝까지 온라인이던 세션은 여기에 들어가지 않습니다. -
세션 키로 합치기
목록의 각 세션에는 sessionId가 붙어 있습니다. 실시간 보고를 쌓는 테이블에 같은 키로 넣으면 한 세션이 두 번 세어지지 않습니다.
-
마감 유예 두기
진도 마감 직후 며칠을 오프라인 기록 반영 기간으로 공지하고, 그 기간에 들어온 기록까지 이수 판정에 넣기를 권합니다.
-
이어보기 위치 맞추기
다음 실행 때 시작 시간에 syncedAt을 붙이면 서버 값과 기기에 남은 재생 시간 중 더 최근 값으로 시작합니다. 세부 계산은 진도 데이터 설계 가이드를 보세요.
이 보고는 모바일 SDK가 2025년 6월 24일, PC 앱이 1.0.26에서 처음 지원했습니다. 관련 콜백 오류 수정이 2026년 3월 17일 두 모바일 SDK에 들어갔으니 그 뒤 배포본을 쓰기를 권합니다.
만료 처리와 기기 저장소
기기 안 파일은 학습자 화면과 저장 공간 양쪽에 영향을 줍니다. 만료와 정리 규칙을 앱 화면에 반영하세요.
-
Expiry
기한이 지난 파일
기간이 끝난 파일을 열면 오프라인 접근 권한 만료로, 기한 0으로 받은 파일을 오프라인에서 열면 오프라인 접근 권한 없음으로 처리됩니다. 두 경우 모두 인터넷에 연결해 스트리밍으로 이어 보도록 안내합니다.
-
Display
남은 기간 미리 보여 주기
두 모바일 SDK의 재생 정보 저장소에서 미디어별 만료 일시와 마지막 재생 위치를 꺼낼 수 있습니다. 다운로드함 목록에 남은 기간과 이어볼 지점을 적어 두면 만료 문의가 줄어듭니다.
-
Storage
저장 공간 관리
Android 실패 사유는 저장 공간 부족, SD 카드 없음, 저장소 문제를 따로 알려 줍니다. 완료 항목을 한 번에 지우는 removeCompleted()가 두 SDK에 있으니 다운로드함에 정리 버튼을 두세요. Android는 2024년 4월부터 저장소 선택을 지원합니다.
-
Security
받은 파일의 보안과 자막
받은 파일의 DRM 키 보관 방식은 2026년 2월 2일 두 모바일 SDK에서 바뀌었고, 7월 2일부터는 자막이 영상과 함께 저장됩니다. 오프라인 재생 때의 녹화 차단 문제는 Android SDK 2026년 6월 4일 배포본에서 수정됐습니다.
오프라인 학습 운영 점검표
오픈 전, 매주, 앱 업데이트 때 세 번으로 나눠 점검합니다.
-
Before Launch
오픈 전
- 과정별 기한 값과 초 환산 검증
- 짧은 기한으로 만료 오류와 안내 문구 확인
- 비행기 모드로 시청한 뒤 오프라인 기록 수신 확인
- 셀룰러 비허용 상태의 다운로드·재생 확인
-
Weekly
매주
- 다운로드 실패 건수와 사유를 강의별로 집계
- 늦게 도착한 오프라인 기록의 진도 반영 확인
- 오프라인 만료 문의 건수 추이
-
On Update
앱 업데이트 때
- 변경 이력의 다운로드·오프라인 항목 확인
- 2026년 5월 21일 iOS SDK의 iOS 15 이하 다운로드 파일 재생 수정처럼 OS별 수정이 자사 앱에 들어갔는지
- 이전 버전으로 받은 파일의 재생 점검
접근 권한 응답과 오프라인 기한을 함께 설계하는 방법은 접근 권한 서버 설계에 있습니다.
오프라인 학습 운영 FAQ
-
수강 기간이 끝났는데 오프라인 기한이 남아 있으면 어떻게 하나요?
네트워크가 없는 동안에는 고객사 서버가 판정에 끼어들 수 없습니다. 그래서 다운로드를 실행할 때 오프라인 기한을 남은 수강 기간 이하로 계산해 넣는 것이 기본 규칙입니다. 다운로드 요청의 접근 권한 검사에는 offline 값이 true로 오므로, 다운로드를 열지 않는 과정은 그 요청에서 거절합니다.
-
재생 횟수를 제한하는 과정도 다운로드를 열 수 있나요?
재생 제한 초과 응답은 재생 중 진행 보고에 답하는 방식이라 온라인일 때 동작합니다. 오프라인 시청분은 나중에 기록으로만 들어오므로, 횟수 제한 과정은 기한을 짧게 두거나 다운로드를 닫기를 권합니다.
-
한 번에 몇 편까지 받게 하면 좋을까요?
앱 SDK는 기본 3개를 동시에 받고 나머지는 대기시킵니다. 이 값은 앱에서 바꿀 수 있고, PC는 여러 편을 한 번에 다운로드 목록에 넣습니다. 한 차시 묶음의 용량을 다운로드 버튼 옆에 적어 두면 저장 공간 부족 실패가 줄어듭니다.
PlaynPlay 도입을 위한
기술적 지원과 서비스를 제공합니다.
제품 문의부터 데모 시연까지, 모든 지원을 위해 세일즈 및 기술 지원 팀이 준비되어 있습니다.
-
제품 및 도입 문의
도입 범위, 일정, 견적을 상담합니다. 서비스 형태와 사용자 규모를 알려주시면 맞는 연동 방식과 보안 설정을 제안합니다.
-
Trial 신청
PlaynPlay의 기능을 먼저 테스트해 보세요. 트라이얼 기간 동안 귀사의 제품과 PlaynPlay를 연동하고 성능과 기능을 직접 검증할 수 있습니다.
-
PlaynPlay 기술 문의
SDK 연동, Callback URL 설계, DRM 패키징 중에 생기는 질문에 기술팀이 답합니다. 공개된 개발 문서와 샘플 프로젝트도 함께 확인하세요.
기능
가이드