Розробка мобільного додатку для читалки електронних книг
Зробити читалку, яка просто відкриває EPUB — задача на тиждень. Зробити читалку, якою приємно користуватися — зовсім інша історія. Плавний скролл довгих глав, коректний рендеринг CSS з EPUB3, синхронізація позиції чтения між пристроями, ночний режим без артефактів — кожна з цих деталей потребує окремих рішень.
Формати та рендеринг
Основні формати: EPUB 2/3, PDF, FB2, іноді MOBI/AZW3.
EPUB
EPUB — це ZIP-архів з HTML/CSS/XML всередині. Рендерити його нативними засобами не отримається без проміжного шару.
Readium — де-факто стандарт для мобільних читалок з відкритим вихідним кодом. Readium Swift Toolkit (iOS) та Readium Kotlin Toolkit (Android) підтримують EPUB 2/3, PDF, аудіокниги, LCP DRM. Це те, що використовують Бібліотека Літрес, Storytel та багато інших.
Readium рендерить EPUB через вбудований WKWebView / WebView з інжекцією свого JavaScript-movimento. Це дає повну підтримку CSS з книги, включаючи кастомні шрифти та складну типографіку.
// iOS — відкриття книги через Readium
let publication = try await streamer.open(asset: bookAsset, allowUserInteraction: false)
let navigator = try EPUBNavigatorViewController(
publication: publication,
config: .init(
editingActions: EditingAction.defaultActions,
fontOverrides: userSettings.fontOverrides
)
)
На iOS — PDFKit (нативно, швидко, підтримує анотації). На Android — PdfRenderer (вбудований, але базовий) або PdfiumAndroid для складних документів з векторною графікою.
FB2
Власний парсер XML + рендеринг через TextView (Android) / AttributedString (iOS). Або конвертація на EPUB на сервері/на пристрої через fb2c або Calibre-подібну логіку.
Користувацькі налаштування читання
Шрифт, розмір, міжрядковий інтервал, відступи, тема (світла/темна/сепія) — зберігаються локально в UserDefaults / SharedPreferences та застосовуються через CSS-інжекцію в Readium:
val preferences = EPUBPreferences(
fontFamily = FontFamily.GEORGIA,
fontSize = Percentage(1.2),
lineHeight = Double(1.5),
theme = Theme.SEPIA
)
navigator.submitPreferences(preferences)
Важливо: тема додатку та тема ридера — різні речі. Якщо користувач читає в темному режимі, але перемикає систему на світлу — читалка не повинна автоматично змінювати тему. Налаштування ридера незалежні від системних.
Прогрес та закладки
Поточна позиція чтения — Locator в термінології Readium. Це об'єкт з href (шлях до глави), progression (0.0–1.0 всередину глави) та текстовим фрагментом для точного відновлення позиції після оновлення книги.
Закладки, анотації, виділення — зберігаються в Room / Core Data як Annotation(bookId, locator, text, color, note).
Синхронізація між пристроями
Якщо потрібна синхронізація — позиція та анотації йдуть на сервер при кожній зміні. WorkManager / BGTaskScheduler відправляє накопичені зміни при появлені сети. Конфлікти розв'язуються по timestamp: перемагає більш пізня позиція.
Readium підтримує OPDS Annotations — якщо сервер це підтримує, синхронізація майже безкоштовна.
Бібліотека книг та завантаження
Книги зберігаються у Files (iOS) / filesDir (Android) — не в cacheDir, інакше ОС видалить їх при нехватці місця. На iOS з iOS 16+ можна використовувати FileManager з ubiquityContainerIdentifier для iCloud-синхронізації файлів.
Завантаження через URLSession.downloadTask (iOS) / DownloadManager (Android) з відновленням (resumeData). Прогрес відображається в бібліотеці.
Пошук по вмісту книги (full-text search всередину EPUB) — через індексацію тексту всіх глав в FTS4/FTS5 таблицю Room.
Типові проблеми
- Кастомні шрифти з EPUB3 (
@font-face) не завантажуються, якщо шлях у CSS указаний з../Fonts/— потрібна нормалізація шляхів -
WKWebViewна iOS обрізає довгі сторінки, якщо включенийisScrollEnabled = false— потрібна правильна конфігурація пагінації - PDF з embedded CJK-шрифтами на
PdfRendererAndroid — артефакти рендеринга, потрібен Pdfium
Що входить у роботу
- Підтримка EPUB 2/3 через Readium Toolkit
- PDF-рендеринг нативними засобами
- Налаштування шрифту, теми, інтервалів
- Закладки та виділення з замітками
- Синхронізація прогресу між пристроями (при необхідності)
- Бібліотека з офлайн-завантаженням та пошуком по вмісту
Терміни
Базова читалка EPUB/PDF з налаштуваннями та закладками: 3–5 тижнів. Повноцінний додаток з синхронізацією, пошуком по тексту, анотаціями та підтримкою кількох форматів: 8–10 тижнів. Вартість розраховується після визначення набору форматів та вимог до синхронізації.







