Розробка мобільного додатку для онлайн-навчання (EdTech)
EdTech-додатки — одна з найбільш технічно різнорідних категорій. Ми стикаємося з цим щодня: за простим інтерфейсом «урок → відео → тест» стоять HLS-стрімінг з адаптивним бітрейтом, offline-завантаження зашифрованих відео, real-time взаємодія в live-сесіях, gamification-механіки, аналітика прогресу та часто — біла марка для B2B-клієнтів. Оцінимо ваш проект за 2 дні та запропонуємо рішення під ключ.
Відео — головне технічне навантаження
Більшість EdTech-додатків будується навколо відеоконтенту. Стрімінг через HLS (HTTP Live Streaming): сервер нарізає відео на сегменти по 6–10 секунд, плеєр вибирає якість залежно від швидкості мережі. На iOS — AVPlayer + AVPlayerViewController, з підтримкою HLS з коробки. На Android — ExoPlayer (Media3): HlsMediaSource з DefaultTrackSelector для адаптивного ABR. ExoPlayer дає більше контролю над буферизацією, що критично для слабких мереж.
DRM. Платний контент має бути захищений від збереження екрану та копіювання. FairPlay (iOS) та Widevine L1 (Android) — стандарт для EdTech платформ з монетизацією. Widevine L3 (програмний захист) працює на всіх Android-пристроях, але менш надійний. L1 вимагає TEE (Trusted Execution Environment) — присутній на Snapdragon 800-серії та вище.
Offline-перегляд. Завантаження уроку для перегляду без інтернету — ключова функція. На iOS: AVAssetDownloadTask зберігає HLS-потік в HLSAssetDownloadDirectory, FairPlay-ліцензія кешується окремо. На Android: DownloadManager в ExoPlayer з шифруванням через Android Keystore. Не можна просто завантажити MP4 — це обходить DRM. Правильний шлях: зашифровані сегменти на диску, розшифровка при відтворенні через ліцензійний ключ.
Чому HLS, а не MP4?
HLS дозволяє адаптивно змінювати бітрейт залежно від мережі, а MP4 — лише фіксовану якість. Для EdTech це означає менше буферизації у користувачів з поганим з'єднанням. Крім того, HLS легко поєднується з DRM: кожен сегмент шифрується індивідуально. MP4-файл довелося б шифрувати цілком, що збільшує затримку при старті відтворення.
Як захистити контент від піратства?
Використовуємо комбінацію DRM та водяних знаків. DRM (FairPlay/Widevine) запобігає копіюванню сегментів, а динамічні водяні знаки (наприклад, NexGuard) дозволяють ідентифікувати витік через унікальні патерни на відео. На мобільних пристроях також відключаємо запис екрану через UIScreen.main (iOS) та FLAG_SECURE (Android).
Прогрес та аналітика навчання
Learning Record Store (LRS) та xAPI (Experience API) — стандарт для трекінгу навчання: «користувач X пройшов урок Y за Z хвилин, відповів правильно на 7 з 10 запитань». Tincan.io як популярна реалізація. Для корпоративного EdTech, де потрібна інтеграція з SCORM-сумісними LMS (Moodle, Cornerstone) — SCORM 1.2 або 2004.
На мобільних xAPI-події надсилаються в LRS через REST API: POST /statements з JSON-payload. При offline-використанні — черга подій в SQLite (Room на Android, CoreData на iOS), синхронізація при відновленні мережі через WorkManager/BGTaskScheduler.
// Android — отправка xAPI statement через Room + WorkManager @Entity data class PendingStatement( @PrimaryKey val id: String = UUID.randomUUID().toString(), val statementJson: String, val createdAt: Long = System.currentTimeMillis() ) // При потере сети — ставим в очередь fun trackLessonCompleted(lessonId: String, durationSec: Int) { val statement = buildXApiStatement(verb = "completed", object = lessonId, duration = durationSec) db.pendingStatementDao().insert(PendingStatement(statementJson = statement.toJson())) WorkManager.getInstance().enqueueUniqueWork("sync_xapi", KEEP, SyncStatementsWorker) } Докладніше про специфікацію xAPI читайте на Wikipedia.
Інтерактивний контент та тести
Квізи, завдання з введенням коду, matching-exercises — це не просто список питань. H5P — відкритий формат для інтерактивного контенту, підтримується Moodle та багатьма LMS. Для мобільних: WebView з H5P.js або нативна реалізація через JSON-схему завдань.
Оцінка коду в browser-based sandbox: WebView + Monaco Editor або CodeMirror, виконання через Pyodide (Python в WASM) для простих задач, або backend sandbox (Judge0, Piston) для компільованих мов. На iOS WKWebView має обмеження на виконання JS: WKWebViewConfiguration.preferences.javaScriptEnabled = true, але WASM працює з iOS 14+.
Gamification
Streak counter, badges, leaderboard, XP та рівні — стандартний набір. Технічно: локальний лічильник + синхронізація з сервером. Streak потребує акуратної роботи з часовими зонами (користувач подорожує, DST transitions). TimeZone.current на iOS та ZoneId.systemDefault() на Android — не зберігати дати в UTC без поправки на локальну північ користувача.
Push-повідомлення для утримання (streak reminder, «ваш курс закинуто»): Firebase Cloud Messaging + локальні сповіщення через UNUserNotificationCenter (iOS) та NotificationManager (Android). Частота — не більше 1–2 сповіщень на день, інакше відписка.
Біла марка та мультитенантність
Для B2B EdTech, де кожен корпоративний клієнт хоче свій додаток з логотипом: мультитенантна архітектура з конфігураційним файлом per-tenant (кольори, шрифти, логотип, доступний контент). iOS: Remote Config через Firebase або власний config endpoint, @Observable view-model з темою. Android: Dynamic theme через Material You dynamicColorScheme або власний Theme.kt.
Окремий App Store listing на кожного клієнта — через App Store Connect API + fastlane deliver. Automation необхідна при 10+ клієнтах.
Що входить в роботу
| Етап | Результат |
|---|---|
| Аналітика та прототипування | Технічне завдання, карта екранів, вибір стеку |
| Проектування архітектури | ERD, діаграми компонентів, план безпеки |
| Розробка MVP | Робочий функціонал: відео, тести, прогрес |
| Інтеграція DRM та offline | Захищений стрімінг, кешування з ліцензіями |
| Тестування | QA на реальних пристроях, навантажувальне тестування |
| Деплой та підтримка | Публікація в App Store/Google Play, моніторинг |
Терміни: MVP — 4–8 тижнів, повне рішення — від 3 місяців. Вартість розраховується індивідуально. Зв'яжіться з нами, щоб отримати консультацію та попередню оцінку.
Замовте розробку EdTech-додатку під ключ — пишіть, ми підготуємо комерційну пропозицію протягом 2 робочих днів.







