Мы сотрудничаем с Хабром с 2014 года. Активная фаза создания и развития нативных приложений приходилась на период 2014—2018 года, затем работа над нативными приложениями была приостановлена, а позднее приложения были сняты с продажи из магазинов. Команда Хабра сосредоточилась на разработке веб-приложений в формате PWA.
В 2022 году мы вернулись к сотрудничеству и сделали для Хабра простые нативные обертки для их PWA приложений с небольшим количеством нативных функций. Приложения доступны в App Store и Google Play.
Мы использовали различные инструменты для обмена информацией и коммуникаций во время проекта. Это наш стандартный workflow в заказной разработке:
«Мобильные приложения — совершенно новое для нас направление. При этом у нас не было желания, сил и средств создавать с нуля еще один отдел разработки для этой категории продуктов. В общем, мы подумали, пообщались и решили аутсорсить»
— Денис Крючков Издатель «Хабра»
Хранение кода Bitbucket, хранение графики Dropbox,
учёт задач и багов Pivotal Tracker, инхаус чат Hipchat,
согласование дизайн-макетов и скетчей Trello, сбор крешей Crashlytics, аналитика Flurry/Google Analytics, внешняя коммуникация Skype/Telegram
Функциональность
Поиск по публикациям
Просмотр ленты лучших публикаций (за сутки, за неделю и т.п.)
Посмотр публикаций по подписке
Добавление публикаций в закладки
Работа с хабами
Темная тема на Android
Работа с профилем
Настройки оформления публикаций и алгоритмов загрузки контента
Виджет с кармой и рейтингом
Поддержка Safari iCloud Keychain и Handoff на iOS
Разработка
Пока дизайнеры проектировали интерфейс, разработчики уже писали компоненты, отвечающие за общение с API. Под все платформы были использованы только нативные средства разработки и ноль кросс-платформенных фреймворков.
Комментарий iOS-разработчика
«Хотелось сразу сделать крутое приложение-хранилище статей, подключив Core Data с нормализованной базой данных для постоянного хранения постов и других сущностей. Но, как оказалось позже, приложение получалось совсем непонятным для пользователя. Одна из ряда спорных ситуаций для примера: юзер, находясь в сети, добавлял в избранное какой-нибудь пост и сразу после этого терял связь с интернетом, затем в оффлайне переходил в раздел «Избранное», который, естественно не мог скачать посты с сервера, и видел в нём всего один пост — тот самый, который минутами ранее был сохранён локально при загрузке ленты — это сбивало с толку бывалого хабраюзера: «куда делись остальные избранные? У меня на "Хабре" их куча была! Всё пропало!». Показывать тот одинокий избранный пост нам было как-то неловко, но и скрывать от юзера его было ещё более нелогично — ведь в локальном хранилище он существует и он помечен как избранный. Нами было решено тупо идти User Experience'ным путем: «хочешь увидеть ленту — запроси её с сервера». Это не значит, что посты теперь совсем не хранятся локально и приложение не юзабельно в офлайне — просто я дополнил уникальный ключ флагами принадлежности к определённому экрану. Так нормализация БД была принесена в жертву UX»
— Андрей Кадочников
iOS-разработчик
Хабр
Комментарий Android-разработчика
«Первые проблемы касались размещения различного типа контента в постах, а особенно в комментариях. В случае поста решение нашлось быстро. Полученный с сервера html-контент парсится и оптимизируется под небольшие экраны, затем навешиваются свои css-стили, и итоговый html отображается в WebView. С комментариями же всё оказалось намного сложнее. Во-первых, они имеют древовидную структуру, а во-вторых, по содержанию являются почти тем же постом. У нас появилось несколько идей отображения комментариев разной степени нереализуемости. Среди них даже проскочила мысль вывести все комменты в одном WebView. Но так как среди нас не оказалось гуру вёрстки и javascript, то эту идею серьёзно не рассматривали. Остановились же на нативной реализации: комментарии парсятся так же, как и пост, но на выходе получается не html, а Spanned-строка, которая в свою очередь отображается в TextView. Весь медиа-контент, спойлеры и код открываются в новом окне по клику на соответствующую ссылку. Считаю, что при такой реализации нам удалось решить проблему представления полной информации и удобства её получения на небольших экранах смартфонов»
— Евгений Раткин Android-разработчик
Релиз и немного цифр
На наш взгляд релиз прошёл успешно. В момент анонса все приложения уже были доступны в магазинах, а также легко находились по ключевым словам. «Хабр» испытал некоторые проблемы на серверной стороне, связанные с авторизацией, но они были быстро исправлены. Начал поступать первый фидбек на ящик саппорта и в отзывах Google Play.