Розробка мобільного додатку для онлайн-навчання (EdTech)
EdTech-додатки — одна з найтехнічно різноманітних категорій. За простим інтерфейсом «урок → відео → тест» стоять: HLS-стриміинг з адаптивним бітрейтом, offline-завантаження зашифрованих відео, real-time взаємодія в live-сесіях, gamification-механіки, аналітика прогресу та часто — білий лейбл для B2B-клієнтів. Кожна з цих пунктів — джерело окремих складностей.
Відео — основне технічне навантаження
Більшість EdTech-додатків будуються навколо відеоконтенту. Стриміинг через HLS (HTTP Live Streaming): сервер нарізає відео на сегменти по 6–10 секунд, плеєр вибирає якість залежно від швидкості мережі. На iOS — AVPlayer + AVPlayerViewController, з підтримкою HLS з коробки. На Android — ExoPlayer (Media3): HlsMediaSource з DefaultTrackSelector для адаптивного ABR.
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. Правильний шлях: зашифровані сегменти на диску, розшифровка при відтворенні через ліцензійний ключ.
Прогрес та аналітика навчання
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)
}
Інтерактивний контент та тести
Квізи, завдання з вводом коду, matching-вправи — це не просто список запитань. 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
Лічильник серій, бейджі, таблиця лідерів, XP та рівні — стандартний набір. Технічно: локальний лічильник + синхронізація з сервером. Серії потребують обережного керування часовими зонами (користувачі подорожують, DST переходи). TimeZone.current на iOS та ZoneId.systemDefault() на Android — не зберігайте дати у UTC без коригування локальної опівночі.
Push-уведомлення для утримання (нагадування про серію, «ви забули свій курс»): 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. Автоматизація необхідна при 10+ клієнтах.
Графіки
MVP з відеоуроками, тестами та прогресом: 4–8 тижнів. Платформа з DRM, offline, live-сесіями та LMS-інтеграцією: 3–5 місяців. Вартість розраховується індивідуально після аналізу вимог.







