Два бренда онлайн-финансирования одной компании — и у каждого свой сайт и свой личный кабинет, через который клиент проходит весь путь. Мы поддерживаем и дорабатываем сайты и кабинеты обоих брендов, а существующие iOS- и Android-приложения одного из брендов переписали на Flutter и сопровождаем в App Store и Google Play. Компания — лицензированное финансовое учреждение под надзором НБУ. Её название не раскрываем: проект под NDA.
Клиент: финансовая компания на регулируемом рынке
Компания внесена в реестр НБУ как небанковское финансовое учреждение и работает по лицензии регулятора. Под двумя брендами она предлагает онлайн-финансирование частным лицам, и весь путь клиента дистанционный: от заявки до последнего платежа не нужно ни приходить в офис, ни подписывать бумажные документы. В проект входят также iOS- и Android-приложения одного из брендов. Ими уже пользуются клиенты, поэтому каждый релиз сразу попадает к реальным пользователям.
Требования к такому продукту задают сразу несколько сторон. НБУ определяет, что должно быть на сайте и как идентифицировать клиента без личной встречи, закон — как заключается и изменяется договор, App Store и Google Play — что разрешено финансовому приложению. Каждое из этих требований в итоге превращается в конкретный экран, поле или шаг в пути клиента.
Два бренда — две отдельные системы
У каждого бренда свой сайт и свой личный кабинет, то есть бренды работают как две отдельные системы, которые не зависят друг от друга. Общие у них только лицензия, регулятор и требования закона. Вот за что в этих системах отвечает ANIART:
| Слой | Что внутри | Роль ANIART |
|---|---|---|
| Публичные сайты (по одному на бренд) | Своя подача и аудитория, одинаковые обязательные разделы по требованиям НБУ | Поддержка и доработки |
| Личные кабинеты (отдельный у каждого бренда) | Весь путь клиента: вход, заявка, идентификация, подписание, выплата, погашение, изменения условий, карты, история договоров | Поддержка и доработки |
| Мобильные приложения одного из брендов (iOS и Android) | Нативная оболочка вокруг кабинета этого бренда: JS-мост, push-уведомления, глубокие ссылки | Переписали на Flutter, сопровождаем в App Store и Google Play |
Путь клиента: от входа до последнего платежа
Ниже — путь клиента в кабинете бренда, приложения которого мы переписали. Кабинет второго бренда — отдельная система, которая отвечает тем же требованиям закона и регулятора.
- Вход. Номер телефона и одноразовый код по SMS или в мессенджере — вместо пароля.
- Заявка. Анкета онлайн. Одновременно может быть открыт только один договор.
- Идентификация. На выбор — несколько дистанционных способов, среди них BankID НБУ, Дія и видеоверификация; часть из них дополняется селфи с проверкой «живости». Глубина проверки зависит от суммы: ниже порога достаточно базовой онлайн-идентификации, выше нужна расширенная.
- Условия и подписание. Клиент выбирает условия и может применить промокод программы лояльности. Далее — два шага с отдельными одноразовыми кодами: сначала документ с преддоговорной информацией, затем — сам договор.
- Выплата. Только на собственную карту клиента или на его IBAN. Сохранённые карты отображаются в маскированном виде, а сменить карту можно заявлением, подписанным одноразовым кодом.
- Погашение и изменения. Оплата в кабинете или без входа в него — по реквизитам договора, под защитой reCAPTCHA; платёжного провайдера выбирает сервер. Онлайн доступны и досрочное погашение, и дополнительные средства в пределах лимита, и реструктуризация: новый график платежей и дополнительное соглашение, подписанное кодом.
Регулятор и закон: что стоит за сайтами и кабинетами
| Требование | Что это означает для сайтов и кабинетов |
|---|---|
| Раскрывать на сайте существенные характеристики услуг, предупреждения, примеры расчёта, ссылку на реестр НБУ и порядок подачи жалоб | На сайтах обоих брендов — блок раскрытия информации по требованиям НБУ; калькулятор стоимости показывает реальную годовую ставку |
| Не изменять условия договора в одностороннем порядке | Дополнительные средства, реструктуризация и другие изменения — только через оферту, которую клиент подписывает в кабинете: документ и подпись, а не переключатель в админ-панели |
| Доступность для людей с инвалидностью (требования НБУ) | На сайтах — режим доступности: повышенный контраст, светлая и тёмная темы, увеличенный шрифт |
Что мы сделали: переписали приложения на Flutter
У одного из брендов уже были приложения для iOS и Android. Мы переписали оба на Flutter и сопровождаем их: собираем, публикуем, проводим через модерацию App Store и Google Play, исправляем и обновляем.
Переписывать приложение, которым уже пользуются, сложнее, чем запускать новое: у пользователей в нём действующие договоры, графики платежей, сохранённые карты и история. Здесь помогает архитектура. Кабинет бренда — веб-приложение на Laravel и Vue 3, а новое приложение — нативная оболочка вокруг него: финансовые правила и данные остаются в кабинете бренда, а приложение отвечает только за то, что требует нативного кода.
Один код — две платформы
Версии для iOS и Android собраны из одной кодовой базы на Flutter: большинство исправлений и новых функций делаем один раз для обеих платформ.
Мост с кабинетом
В приложении тот же кабинет, что и в браузере. Через JS-мост кабинет знает, откуда пришла сессия — из приложения или из веба.
Возврат из приложения Дія
После подтверждения в сервисе Дія клиент возвращается в приложение бренда и продолжает оформление, а не теряется между приложениями.
Push-уведомления
Нативные уведомления через Firebase Cloud Messaging — отдельный канал рядом с web push на сайте бренда.
Глубокие ссылки
Universal Links и App Links: ссылка с сайта бренда или из сообщения открывает нужный экран приложения.
Современные платформы
Новые версии собраны под современные iOS и Android; минимальная поддерживаемая версия Android повышена.
Две скорости изменений
Изменения в логике заявки, подписания или погашения мы вносим в кабинет, и они доходят до пользователей приложения без нового релиза в магазинах. Нативный слой — уведомления, глубокие ссылки, возврат из приложения Дія — мы меняем в единой кодовой базе на Flutter для iOS и Android, а платформенные части и публикацию ведём отдельно для каждой платформы.
Релиз финансового приложения — отдельная дисциплина
App Store и Google Play проверяют финансовые приложения строже обычных: в Google Play действует отдельная политика для финансовых услуг, у Apple — специальные правила App Review. Поэтому каждый релиз проходит придирчивую модерацию, и это не формальность. Мы ведём каждый релиз от сборки до публикации в обоих магазинах.
Поддержка и доработки
Помимо приложений, мы постоянно работаем с сайтами и кабинетами обоих брендов:
- доработки — новые сценарии, разделы и исправления в обеих системах;
- внешние сервисы — BankID НБУ и Дія, омниканальный чат и мессенджеры, web push, Google Tag Manager и GA4, обмен данными с учётными системами (ERP): следим, чтобы эти связи работали после каждого изменения;
- защита — reCAPTCHA на входе, регистрации и оплате без входа, отпечаток устройства, одноразовые коды на каждом шаге подписания, Cloudflare перед публичными сайтами: доработки делаем так, чтобы ни одна новая функция не открывала лазейку в обход этих слоёв.
Результат
Приложения одного из брендов переписаны на Flutter: одна кодовая база для iOS и Android, собственный нативный слой — уведомления, глубокие ссылки, возврат из приложения Дія — и тот же кабинет, что и в браузере. Одна команда ANIART сопровождает обе независимые системы, то есть сайт и кабинет каждого бренда, а также приложения одного из брендов — от страницы бренда до релиза в App Store и Google Play.
Развиваете финансовый продукт в регулируемой среде, ведёте несколько брендов или планируете переписать на Flutter приложение, которым уже пользуются? Посмотрите, как мы работаем с финтех-проектами и мобильными приложениями, или свяжитесь с нами.