Як працює Booka Radio5 хв читання

Як Booka Radio запам'ятовує місце прослуховування і повертає до потрібної секунди

Аудіокнига може тривати багато годин, тому плеєр має пам'ятати не лише книгу й главу, а й точну позицію. Розповідаємо, як у Booka Radio ми підійшли до збереження прогресу між сесіями.
✍️Редакція Booka Radio · Редакційний матеріал

Для аудіокниги недостатньо запам'ятати тільки главу

У короткому відео можна без великої втрати почати відтворення трохи раніше. В аудіокнизі одна глава іноді триває десятки хвилин, тому простого запису «користувач був у главі 12» недостатньо. Потрібна точніша позиція — конкретна секунда, на якій слухання зупинилося.

Це особливо важливо для людей, які слухають уривками: десять хвилин у транспорті, двадцять хвилин під час прогулянки, ще пів години ввечері. Якщо кожного разу вручну шукати потрібне місце, сама перевага аудіоформату швидко зникає.

Прогрес зберігається не раз на завершення, а під час самого слухання

Закривати застосунок люди можуть по-різному. Хтось натискає паузу, хтось просто прибирає програму у фон, а інколи система завершує процес через нестачу ресурсів. Тому надійне збереження не можна будувати лише на події «користувач правильно закрив плеєр».

У Booka Radio позиція періодично фіксується під час відтворення, а також у важливих точках, наприклад після завершення глави. Завдання такої схеми — зробити втрату прогресу мінімальною навіть тоді, коли сесія завершилася неідеально.

Локальна позиція потрібна для швидкого повернення

Частина інформації про останнє прослуховування зберігається на самому пристрої. Це дає дві переваги. По-перше, плеєр може швидко відновити останній стан без зайвого очікування. По-друге, короткочасна відсутність мережі не повинна означати, що застосунок забув, де людина зупинилася.

Ми також зберігаємо історію позицій для обмеженої кількості нещодавно прослуханих книг. Це практичніше, ніж мати лише одну глобальну точку «останнього прослуховування», адже користувач може чергувати кілька історій.

Сервер потрібен, коли локальної пам'яті вже недостатньо

Локальне збереження добре працює в межах одного пристрою, але не вирішує ситуацію, коли людина перевстановила застосунок або продовжує слухати після входу в обліковий запис на іншому пристрої. Для цього прогрес також синхронізується із сервером.

При цьому виникає важливе питання: що робити, якщо локально записана одна позиція, а на сервері — інша? У Booka Radio ми орієнтуємося на час останнього оновлення. Новіший запис має пріоритет над старішим. Така логіка проста, але вона запобігає ситуації, коли старий серверний стан раптом відкидає слухача назад.

Чому ми не надсилаємо позицію на сервер щосекунди

Технічно можна було б відправляти мережевий запит на кожну секунду прослуховування, але це створило б багато зайвого трафіку й навантаження без помітної користі для слухача. Тому серверна синхронізація працює рідше, ніж локальний таймер плеєра.

Тут потрібен баланс: позиція має бути достатньо свіжою, але мережа не повинна використовуватися даремно. Кілька секунд різниці після аварійного закриття значно менш критичні, ніж постійні зайві запити протягом багатогодинної книги.

Хороше збереження прогресу майже непомітне

Користувач не повинен думати про синхронізацію, часові мітки чи локальне сховище. Він просто відкриває Booka Radio і бачить знайому книгу на приблизно тому самому місці, де зупинився.

Саме це ми вважаємо правильним результатом: складність залишається всередині застосунку, а назовні виходить проста поведінка — «продовжити слухати». Для довгого аудіоформату така непомітна функція часто важливіша за десяток ефектних елементів інтерфейсу.

Завершена глава — це окрема подія, а не просто ще одна секунда

Коли відтворення доходить до кінця глави, плеєр має не лише записати останню секунду. Важливо правильно перейти до наступного розділу й оновити стан так, щоб після повторного запуску застосунок не повернув слухача в уже завершений фрагмент. Для довгої книги це дрібниця лише на перший погляд: одна неправильна межа повторюватиметься щоразу при поверненні.

Тому завершення глави ми обробляємо окремо від звичайного періодичного збереження. Це допомагає уникати ситуації, коли людина вже почула фінал розділу, закрила застосунок, а наступного разу знову опинилася за кілька секунд до того самого місця. Завершена глава має залишатися завершеною.

Час останнього оновлення важливий не менше за саму позицію

У синхронізації легко уявити конфлікт: на телефоні збережено 42 хвилини, а сервер пам'ятає 35. Самі числа не пояснюють, яка позиція правильна. Можливо, 35 хвилин були записані пізніше після свідомого повернення назад, а можливо, це просто старий стан, який ще не встиг оновитися.

Тому разом із позицією Booka Radio враховує час її оновлення. Ми використовуємо принцип «новіший стан перемагає». Він не намагається вгадувати намір людини, а спирається на найсвіжішу відому дію. Це просте правило робить поведінку передбачуваною й не змушує користувача вручну вибирати між двома часовими мітками.

Кнопка «зберегти прогрес» тут була б зайвою

Ми спеціально не перекладаємо відповідальність за позицію на слухача. У книжці не повинно бути ситуації, коли перед закриттям застосунку потрібно згадати про окрему кнопку збереження. Людина може поставити паузу, отримати дзвінок, перейти до іншого застосунку або просто забути про плеєр.

Саме тому позиція фіксується автоматично. Після довгої паузи між сесіями користувач може вже не пам'ятати точну сцену, але очікує, що Booka Radio пам'ятає її замість нього. У цьому сенсі збережений прогрес працює як закладка, яку не потрібно ставити вручну.

Інші матеріали Booka Radio

Усі статті →
🗂️
Як працює Booka Radio

Чому каталог Booka Radio можна кешувати, а статус профілю — ні

Не всі дані в застосунку однаково швидко застарівають. Пояснюємо, чому список жанрів може спокійно жити в кеші годинами, а підписку й актуальний профіль потрібно перевіряти значно обережніше.

Читати →