DOU Labs: як в RiverSoft створили додаток для зручної організації заходів

У рубриці DOU Labs ми запрошуємо IT-компанії ділитися досвідом власних цікавих розробок і внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на editors@dou.ua .

Додаток Eventssion — це проект, який з'явився з життя. Він допомагає вирішити питання ефективної організації заходів різного характеру. Не має значення, що ви задумали — гучну вечірку або відповідальну конференцію, — завдяки набору функцій (від чатів всередині подій і повідомлень учасників до голосувань) організатор отримує весь інструментарій в одному додатку. Просто, швидко і дієво. Хочете знати, як це вийшло? Ми розповімо, як перетворили банальний футбол в привід для розробки програми.

Ідея

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

Спочатку все йшло добре, але тут настав поворотний момент. Футбольні зібрання стали популярні, команд ставало все більше і серед них влаштовувалися турніри. Знайти загальний знаменник за часом і датою стало практично неможливо. Оперативності не було, і ми знову повернулися до дзвінків. А потім повторним наборів і контрольним наборів для підтвердження. Загалом, дуже багато натискань на зелену кнопочку.

Ми довго ламали голову над тим, як вчинити, і нарешті перед нами з'явився відповідь з величезним знаком оклику: «Так ми ж айтішники!». Ось так з'явилася ідея про створення простого додатка для збору знайомих на футбольні турніри.

Наша команда складається з 11 осіб, серед яких є дизайнер, Project Manager, 3 Android - і iOS 4-розробника, 2 бэкендщика. До речі, наш дизайнер в цьому році стала переможцем Dev Challenge 2018 в категорії mobile-design.

На фото наша команда або ті, хто не побоявся публічності ;)

Реалізація

Eventssion спочатку був орієнтований на маленькі групи людей, у яких є номери телефонів один одного. Тому організатору залишалося тільки вписати назву події, дату, час і запросити учасників, які були зареєстровані в додатку. Далі усі отримували повідомлення і вибирали статус (йдуть чи ні) + нагадування в день гри. Відповідно, кожен учасник бачить, що за подія його чекає, а також де і коли воно відбудеться. Так ми звели дії організатора до мінімуму. Він просто створював захід і після цього спостерігав за відгуками. Зникла необхідність в телефонних дзвінках і нагадуваннях. Радість дівчаток-організаторів неможливо було передати словами.

Але нас було не зупинити. Ми замахнулися на більш масштабні події, які також можна організувати за допомогою цього додатка. Наприклад конференції, тренінги, воркшопи, майстер-класи. На цьому етапі ми повністю змінили концепцію. Тепер наша цільова аудиторія — організатори заходів та ком'юніті-менеджери. Організатори можуть створити спільноту навколо себе.

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

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

Ми проводили дослідження серед користувачів, активно працювали над функціоналом. Головною метою стало втілення зрозумілого і універсального Eventssion, в якому б кожен зміг організувати захід будь-якого рівня складності.

З технічної точки зору це відбувалося наступним чином. Клієнт Android і iOS спілкується з беком через REST, сам бекенд реалізований на Spring. Оскільки API одне для всіх платформ, це призводило до деяких ускладнень. Наприклад, з push-повідомленнями з більш ранньої версії Android. Було зручно відправляти тільки деякі поля в пущі (назва, події, час), а на Android вже перехоплювати і відображати. На iOS виявилося, що коли користувач закриває додаток, воно ніяк не може обробити пуш. Його повинен формувати бекенд у вигляді, готовому для відображення системою (відразу в таймзоне і мовою пристрою). Тому доводиться слати різні пуши на різні пристрої, що досить накладно.

Версіонування API реалізували через HTTP-header. Є глобальний перехоплювач запитів, і при відповіді сервера про необхідність оновитися, він обробляється відповідним чином. А оскільки об'єктні моделі часто змінюються, ми орієнтувалися на використання MongoDB, але зв'язків в БД також багато. На даний момент ми зупинилися на MySQL.

Зовні ми змінили інтерфейс і можливості розкладу події.Тепер можна вказати таймінг конференції (наприклад, 9:00 — реєстрація; 10:00 — перший спікер; 12:00 — кава-брейк і т. д.). Так можна відмовитися від паперових флаєрів, а учасники конференції будуть мати швидкий доступ до плану заходу.

Також хотілося б поділитися тим, як ми реалізували відображення списків і обробку дій (actions) на Android. Підхід заснований на «делегування» відображення елементів списку спеціальним класів-делегатів. Дії теж обробляються через ActionHandler, який через data binding викликає Action. В результаті створення нового екрану зі списком будь-якої складності зводиться до формування списку делегатів для елементів списку. Сюди ж включено і список екшенів, які спрацьовують при натисканні на елементи в layout. Це рішення оформлено в якості бібліотеки .

Окремо хочемо розповісти про систему нагадувань. Це особлива історія. У нас їх два види: хард (у вигляді дзвінка на телефон) і софт (на шторку). Хард ми приділили великий відрізок часу, оскільки це цікава фіча. З одного боку, всі зайві звуки на смартфоні відволікають нас від роботи, а з іншого — саме вони є гарантією того, що учасник буде пам'ятати про подію.

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

Крім того, в якості кэширующей БД була обрана Realm . Про це ми жодного разу не пошкодували. Вона дійсно працює: швидше SQLite, підтримка Rx і це зручно. Реактивні підписки на дані дозволили домогтися того, що на багатьох екранах оновлюється інформація синхронно з оновленням даних. Наприклад, коли учасник події дає відповідь, організатор події realtime бачить це на UI.

Результати та плани

Чи ми хочемо зупинитися? Безумовно ні. Сервіс знаходиться в активній розробці. Ідеї про те, як його поліпшити, з'являються щодня. Звичайно, у нас немає Kotlin, але ми не поспішаємо переходити. Зараз всі переходять на bottom navigation (VK, Instagram, LinkedIn), тому ми намагаємося бути в тренді і теж переробляємо навігацію в додатку.

Сьогодні наше додаток перетворилося в подійно-орієнтовану соціальну мережу. На даному етапі ми тестуємо новий функціонал — «групи» з можливістю бронювання місць і впроваджуємо пошук усередині додатку.

Ми зробили додаток на Android і iOS. Перше вже доступно в Play Market в beta-версії, тому ви можете зробити тест та перевірити свої організаторські дані. Тримаємо парі, що у вас вийде провести успішне подія будь-якого масштабу. iOS-версія на останньому етапі розробки, тому чекайте швидкого її появи. Оскільки ми серйозно взялися на це додаток, планується публікація в App Store.

Новими фічами і релізом на iOS, поділимося з вами вже в наступному матеріалі. Будемо раді бачити Вас на сторінці в Facebook . Там ми ведемо блог нашого додатка і завжди раді коментарям.

Опубліковано: 03/09/18 @ 10:00
Розділ Блоги

Рекомендуємо:

Финстрип за Серпень 2018. Майже апнул 100К
C++ дайджест #7: оновимо знання з Qt
Ruby/Rails дайджест #21: реліз Rails 5.2.1, бета-версія Hanami 1.3.0, добірка матеріалів з конференції EuRuKo 2018
DOU Проектор: Escapewithpro — наш досвід розробки travel-сервісу для бронювання турів
Python Challenge, або Як я ознайомився з автоматизованим тестуванням за місяць