Приложение тут, приложение там

Что поняли в Росбанке, когда сделали свое мобильное приложение на Flutter

Росбанк первым в России выпустил мобильный банковский клиент на платформе Flutter. Это SDK для разработки кросс-платформенных приложений под Android и iOS, разработанный Google в 2017 году. C чем сталкиваются первопроходцы в использовании Flutter, кому он подойдет и есть ли у него большое будущее на рынке мобильных приложений, N + 1 выяснил у руководителей цифрового направления Росбанка.

Расскажите для начала, в чем состоит принципиальная разница между созданием приложений для Android и для iOS?

Алексей Ясаков, глава центра развития цифровых решений Росбанка: Главное различие состояло и состоит в особенностях построения файловой системы на Android и на iOS. На iOS файловая система закрыта, и работа с ней ведется через связку «приложение — его данные». На Android файловая система открыта, и с ней можно свободно взаимодействовать. У этого есть много следствий: различные языки программирования и различный подход к работе с устройством.

С точки зрения конечного пользователя принципиальной разницы становится все меньше. Если раньше считалось, что Android для людей с более скромным достатком, а iPhone для пользователей с более высоким, то сейчас, мне кажется, это уже стереотип из прошлого, особенно с появлением более совершенных устройств и некоторым выравниванием клиентского опыта на обеих платформах.

Чем было вызвано решение о кросс-платформенности нового приложения? Почему отказались от создания двух разных приложений для двух разных систем?

АЯ: В первую очередь причины были коммерческими, но мы были также заинтересованы в быстром выводе продукта на рынок. Для разработки нативных приложений необходимо держать две независимые команды. В случае с Flutter нельзя сказать, что платформа сокращает половину расходов, но экономия все равно очень существенная. Большое количество времени также экономится на дизайне и тестировании приложения.

Развивая тему дальше, расскажите, почему выбор для создания кросс-платформенного приложения пал именно на Flutter. Это ведь не первая подобная система и не единственная.

АЯ: Flutter, конечно, не первая такая система. Есть и Xamarin, и ReatNative, Ionic и другие, а также игровые Cordova, Unity. Вопрос всегда дискуссионный, но, считаем, у них большое количество недостатков, в основном связанных с производительностью или сложностью поддержки. Чтобы приложение одинаково эффективно работало и на iOS, и на Android, в этих системах требуется приложить большее количество усилий, чем на Flutter — это все-таки проект Google. На гитхабе очень активное сообщество с более чем 110 тысячами звезд и сотнями контрибьютеров, что тоже указывает на растущую технологическую зрелость этого продукта. И, поскольку Flutter не первая подобная платформа, ее создатели исследовали недостатки предшественников и ушли от них, начиная с реализации нормального FPS и заканчивая работой «платформенного» дизайна элементов интерфейса «из коробки». В качестве альтернативы мы рассматривали React Native, но нас не устроила и производительность, и особенности поддержки, и то, что крупные игроки сами переходят в натив или на Flutter.

Приложением «РОСБАНК Бизнес» занималась та же команда, которая до этого делала одноплатформенные приложения для iOS и Android?

Нет, предыдущим приложением занимался подрядчик. В середине 2019 года мы приняли решение писать новое приложение на Flutter и, поскольку у нас тогда своей команды разработки не было, мы нашли студию, которая обладала определенным опытом создания приложений на этой платформе. С их помощью мы собрали и организовали команду из ребят, которые имели какой-то небольшой опыт работы с Flutter или быстро учились, а дальнейшей разработкой занимались уже мы сами, построив внутреннюю команду. В 2020 году мы уже полностью перевели клиентов со старого нативного приложения на новую версию.

Вы сказали, что для создания приложения набирали ребят, которые в том числе раньше не имели опыта работы с Flutter. То есть платформа достаточно проста в освоении?

АЯ: Оказалось, что да. Как у любой относительно новой платформы для разработки, у Flutter есть свои особенности, но я бы не сказал, что у него высокий порог входа. Во-вторых, у Flutter быстрорастущее сообщество в том числе и в России, а какие-то системные баги довольно быстро обнаруживаются и устраняются.

Сообщество разработчиков на Android и iOS действительно огромно и существует множество пользовательских библиотек. А как с ними обстоят дела на Flutter?

АЯ: Нам их точно хватает. У нас не было сложностей, связанных с отсутствием каких-то библиотек, которые были бы нам очень нужны для работы.

Андрей Давыдов, владелец продукта мобильное приложение «РОСБАНК Бизнес»: Если какие-то библиотеки нужны, их всегда можно написать самому. Если нет желания — они появляются достаточно быстро, потому что сообщество расширяется и библиотек написано огромное множество.

Какая среда разработки используется при создании приложений на Flutter? Насколько она удобна в сравнении со средами для нативной разработки?

АД: Для разработки на Flutter можно использовать и Android Studio, и IntelliJ, и Microsoft VSCode — кому что удобнее. Что касается симуляторов отдельных устройств, их можно вызвать из любой среды, поэтому это вопрос личных предпочтений разработчика. Одно условие: учитывая, что приложение нужно на iOS так же, как и на Android? — критичным для разработки является Mac.

Насколько удобно создавать приложения на Flutter?

АД: Если отбросить игры, то очень удобно. Большая часть разработки приложения заключается в создании внешнего вида приложения, его интерфейса. И на данный момент возможно субъективно, но работа с UI у Flutter самая удобная среди всей мобильной разработки (включая «натив»). iOS пытается приблизиться к этому за счет Swift UI, Android тоже идет к этому, но и там не реализовано то, что есть у Flutter. А в отличие от React Native, Flutter самостоятельно отрисовывает все элементы, поэтому экран полностью под контролем разработчика.

Вопрос про дизайн. Часто говорят о серьезных различиях в дизайне для самих платформ: iOS и Android. Как с этим мирится Flutter?

АЯ: Flutter, разумеется, не подстраивается сам под нужную платформу. Как приложение запрограммируют, так оно себя и поведет. Мы старались максимально усреднить дизайн приложения, чтоб оно смотрелось органично на обеих системах и не было привязано к нативным особенностям iOS и Android. Интерфейс приложения мы стремились сделать максимально простым, утилитарным и понятным пользователю без дополнительных подсказок. Каких-то причин для того, чтоб делать разный дизайн для двух систем, я не вижу. С оговоркой, конечно, на «системные» элементы: списки, календари, всплывающие сообщения и так далее. Тем более, что визуально операционные системы все ближе и ближе друг к другу.

АД: Да, рынок приложений сейчас идет по пути сближения с точки зрения дизайна. Пользовательский опыт все меньше и меньше зависит от платформы, что по сути устраняет зависимости пользователя от устройства. На первый взгляд все сложнее отличить, что держит в руках наш пользователь. Мы не видим в такой унификации ничего дурного — пользователям все проще пользоваться разными приложениями, разными устройствами. Но если вдруг необходимо использовать что-то конкретное для определенной платформы — это элементарно реализуется в коде.

Что касается производительности. Требуется ли больше ресурсов приложению, созданному на Flutter, в сравнении с аналогичным нативным приложением?

АЯ: В нашем случае каких-то существенных вычислений на клиентской стороне не происходит. Производительность сводится к времени отклика интерфейса и к скорости взаимодействия с сервером. Мы измеряли частоту FPS, и она была больше 60Гц на всех устройствах. Приложения с большой нагрузкой на клиентское устройство, возможно, могут столкнуться с просадкой производительности. Но и в этом случае, думаю, ее можно грамотно обойти.

АД: Приложения на Flutter могут весить чуть больше в сравнении с обычными приложениями, другой большой разницы в производительности нет. Единственная, может быть, ахиллесова пята Flutter в том, что Dart — это однопоточный язык, и в нем не очень удобно распараллеливать некоторые сервисы.

А как Flutter справляется с лидарами, алгоритмами распознавания плоскостей и иными тонкостями, свойственными для конкретных платформ или даже отдельных устройств?

АД: Для взаимодействия с особенностями железа используется специальный механизм каналов, где пишется платформозависимый код и пишутся вызовы из Flutter к необходимым функциям устройств. Производительность команды это все равно затрагивает минимально, если есть опыт любой мобильной разработки.

Как отреагировали пользователи на новое приложение? Много ли встречалось багов на этапе запуска и какая оценка успешности эксперимента внутри компании?

АЯ: Оценка исключительно позитивная. Чтоб выявить баги, мы перешли после внутреннего тестирования к бета-тестированию, а затем к ограниченной дистрибуции. Какое-то количество ошибок было обнаружено и исправлено. Но это была нормальная процедура раскатки нового приложения. При этом нельзя сказать, что плотность системных дефектов приложения на Flutter заметно отличалась бы в сравнении с аналогичным приложением, к примеру, на Swift.

Мобильный клиент банка — это по сути интерфейс для взаимодействия с сервером. Похожие приложения есть у многих магазинов розничной торговли, к примеру. Стоит ли ждать, что в ближайшее время компании проявят большой интерес к переводу своих приложений на Flutter?

АЯ: На мой взгляд, ответ однозначно да. Приложения продуктовых магазинов, всевозможных каталогов, книжных магазинов как класс очень подходят для разработки на Flutter.

АД: Я думаю, что это будет очень сильно зависеть от момента развития бизнеса. Если подобраны хорошие команды и приложения давно в продакшне, то особого смысла переходить на Flutter нет. Но если создается приложение с нуля или заменяется старое, как в нашем случае, то Flutter будет использоваться гораздо чаще.