Разработка мобильного приложения для онлайн-обучения (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-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+ клиентах.
Сроки
MVP с видеоуроками, тестами и прогрессом: 4–8 недель. Платформа с DRM, offline, live-сессиями и LMS-интеграцией: 3–5 месяцев. Стоимость рассчитывается индивидуально после анализа требований.







