DOU Проектор: мобільний застосунок для читання статей на DOU
У рубриці DOU Проектор всі охочі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про що розповісти — запрошуємо взяти участь. Якщо ні — можливо, серія надихне на створення власного made in Ukraine продукту. Питання і заявки на участь надсилайте на Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .
Усім привіт. Я Максим, Android-розробник, і в цій статті я хотів би представити вам DOU Reader — мобільний застосунок для читання статей на DOU.
Декілька слів про себе: я займаюсь мобільною розробкою вже понад 4 роки. Із самого початку знайомства з програмуванням я зрозумів, що мене надихає створення своїх проектів, які були б корисними для інших людей. Думка про те, що моя робота може принести комусь задоволення, заощадити час та зусилля, була дуже захопливою.
Крім основної роботи, я завжди виділяв час на реалізацію своїх ідей. Згодом я об’єднався зі своїм товаришем UX-дизайнером Олексієм. І невеликою командою ми почали втілювати наші ідеї у життя.
Ідея
Я, як і більшість сучасних програмістів, читаю доволі багато публікацій на ІТ-теми, щоб дізнаватися про нові технології та підходи. Щодня дорогою на роботу я читаю статті на багатьох ресурсах, зокрема DOU. Одного разу мені стало цікаво: чи існує мобільний застосунок для DOU, адже, переважно, застосунок більш зручний у навігації і має додаткові функції та можливості (як, наприклад, перегляд статей офлайн), що зручніше порівняно з мобільною версією сайту. Пошук застосунку на Google Play та сайті DOU не дав результатів. Тому ми з Олексієм вирішили власноруч реалізувати такий проект.
Реалізація
Передусім нам необхідно було дізнатися, чи існує API для DOU. Звернувшись до працівників DOU, ми одержали список команд для отримання статей з фільтрами по категоріях, автору, даті і т. п. На цьому етапі ми зіткнулися з першими труднощами: у відповідь поверталися тільки короткі описи, проте не тіло статті. Для вирішення цієї проблеми я став отримувати статті напряму з сайту і парсити за допомогою бібліотеки Jsoup.
Визначившись із вхідними даними, ми з Олексієм почали окреслювати концепт застосунку. Зважаючи на особливості наданого API, ми вирішили, що в першій ітерації застосунку зосередимося на найважливіших складових контенту, а саме списку статей, рубриках та закладках зі збереженими публікаціями. Після цього я почав реалізацію технічної сторони проекту, а Олексій — створення прототипів.
Зі своєї сторони, я обрав такий технологічний стек: застосунок побудований із використанням архітектурного патерну MVP і розбитий на прості компоненти, кожен з яких виконує одну логічну функцію. На базі RxJava я реалізував патерн EventBus для спілкування між різними компонентами, а також модулями проекту. Використав Dagger 2 для впровадження та зручного керування залежностями. Для збереження даних використовувався Realm. Вибір цього стеку був зумовлений планами на майбутнє, щоб і надалі вдосконалювати та маштабувати наш проект.
На етапі розробки ми також зіткнулися з труднощами. Однією з них був парсинг сайту. Було досить складно відформатувати тіло статті, не загубивши при цьому стилі і щоб відображалися тільки необхідні блоки. Також ми витратили багато часу на побудову загальної дизай-концепції, створення та тестування всіх сценаріїв на основі клікабельного прототипу.
Крім базового функціоналу, ми додали декілька цікавих можливостей. Одна з них — обчислення часу читання статті. Така ідея з’явилася спонтанно при перегляді публікацій на Medium. Натрапивши на статтю про те, як у Medium визначають цей час, я зрозумів, що алгоритм розрахунку достатньо простий: необхідно порахувати кількість слів та поділити на середню швидкість читання, котра складає приблизно 275 слів на хвилину. Наче проста в реалізації «feature», а користувачеві приємно :)
Варто також зазначити, що в застосунку реалізовано кешування. Статті можна додавати в закладки для перегляду офлайн. Крім цього, усі відкриті за сесію публікації зберігаються в runtime, що дає можливість повернутися до них у разі відсутності інтернету.
Отож, у першій ітерації застосунок надає користувачу такі можливості:
- перегляд статей у Стрічці;
- сортування статей за рубриками;
- створення закладок;
- можливість переглядати закладки офлайн;
- можливість поділитися статтею;
- обчислення часу читання статті.
Факап
Не обійшлося і без промахів. Вже при публікації готового, відтестованого застосунку на Play Market, ми отримали відмову з такою причиною: «Issue: Violation of Device and Network Abuse policy».
Для нас це стало неприємним сюрпризом. Виявилося, що в статтях можуть міститися вбудовані відео з YouTube, відтворення котрих у фоні заборонено політикою використання ресурсу. А в нашому випадку оброблення цього сценарію не було. Тому довелося пофіксити цю проблему, після чого я залив оновлену версію, яка успішно пройшла перевірку. Сподіваюсь, цей невеликий досвід допоможе комусь із розробників у майбутньому.
Результати і плани
За три місяці роботи у вільний час ми змогли створити простий і зручний у використанні застосунок для перегляду статей на улюбленому ресурсі. Ми сподіваємось, він стане у пригоді багатьом користувачам.
Плануємо й надалі підтримувати і вдосконалювати проект. Найближчі цілі, яких ми хотіли б досягти:
- реалізація пошуку;
- вдосконалення стрічки статей;
- можливість відкривати посилання зі сторонніх ресурсів у статті через застосунок;
- реалізація сповіщень про вихід нових статей.
У майбутньому хотілося б зробити повноцінний застосунок із авторизацією та навігацією по ресурсу. Будемо дуже вдячні за ваші зауваження та побажання і будемо їх враховувати.
Також висловлюємо подяку команді DOU за надання API і можливість реалізувати цей проект.