В рубрике DOU Labsмы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.
Приложение Eventssion — это проект, который появился из жизни. Он помогает решить вопрос эффективной организации мероприятий разного характера. Не имеет значения, что вы задумали — шумную вечеринку или ответственную конференцию, — благодаря набору функций (от чатов внутри событий и уведомлений участников до голосований) организатор получает весь инструментарий в одном приложении. Просто, быстро и действенно. Хотите знать, как это получилось? Мы расскажем, как превратили банальный футбол в повод для разработки приложения.
Идея
Наша компания часто устраивает массовые мероприятия в целях тимбилдинга. Так, однажды решили организовать футбольный матч с участием сотрудников. Тема была принята «на ура», всем уже не терпелось покинуть удобные кресла и оторваться от светящихся мониторов. Но вопросы о выборе места, подходящего времени и учета всех нюансов решались по телефону о-о-очень долго! Оказывается, для реализации такой идеи требуется учитывать множество аспектов и с разными людьми, порой слишком занятыми для того, чтобы отвечать на звонки. Поэтому в качестве инструментов использовались еще и разные мессенджеры.
Сначала все шло хорошо, но тут наступил поворотный момент. Футбольные собрания стали популярны, команд становилось все больше и среди них устраивались турниры. Найти общий знаменатель по времени и дате стало практически невозможно. Оперативности не было, и мы снова вернулись к звонкам. А затем повторным наборам и контрольным наборам для подтверждения. В общем, слишком много нажатий на зеленую кнопочку.
Мы долго ломали голову над тем, как поступить, и наконец перед нами появился ответ с огромным знаком восклицания: «Да мы же айтишники!». Вот так появилась идея о создании простого приложениядля сбора знакомых на футбольные турниры.
Наша команда состоит из 11 человек, среди которых есть дизайнер, Project Manager, 3 Android- и 4 iOS-разработчика, 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. Там мы ведём блог нашего приложения и всегда рады комментариям.