Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Нашли способ развивать мобильные приложения и проверять гипотезы, даже если разработчики в компании загружены на месяцы вперёд. И при необходимости постепенно превращать нативные приложения в полностью кроссплатформенные.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Вы в блоге Surf. Здесь рассказываем о том, как мобильные и веб-приложения решают бизнес-задачи банков, ритейлеров, производственных предприятий и других компаний. Мы разработали приложения для Росбанка, Евраза, Mars, KFC, Бургер Кинга, Магнита и ещё 200 компаний. Делимся их кейсами на нашем сайте.

Подписывайтесь на наш блог, чтобы узнавать о технологиях, которые прокачивают бизнес.

Ситуация 1. Бывает так, что компания развивает нативные приложения, но в какой-то момент это становится невыгодно или компания понимает, что в перспективе нескольких лет это станет таковым. Например, приложение устаревает, тормозит и перестает масштабироваться, меняется стратегия компании, резко сокращается бюджет онлайн-направления из-за падения спроса в сегменте и закрытия целого бизнеса-юнита, или появляется новый закон, напрямую влияющий на работу компании. Причины могут быть разными, но в таких случаях компания оказывается в ситуации, когда экономически невыгодно финансировать работу двух проектных команд и развитие двух приложений — под iOS и Android.

Ситуация 2. Бывает и случаи попроще, когда корпорация успешно развивает нативные приложения, и отдельные продуктовые команды хотят внедрять новую функциональность, проводить эксперименты и проверять свои продуктовые гипотезы через A/B тесты. Например, внедрить новый блок рекомендаций ресторанов и оценить его эффективность в сравнении со старым, добавить функцию онлайн-регистрации на рейс и проверить активность пассажиров; заменить сторис на первом экране приложения на баннеры с предложениями новых продуктов.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

«Гипотезы могут быть разными, но в больших корпорациях и сложных нативных приложениях, релизный план формируется на месяцы, кварталы и полугодия вперед. Вписать проверку новой гипотезы в рамки плана может оказаться проблематичным из-за особенностей согласования, проектной работы и сложности продукта. В результате такие функциональные эксперименты разрабатываются настолько долго, что откат в случае провала становится нецелесообразным, а тестирование в рамках недель или пары месяцев становится невозможным».

Марк Абраменко, Engineering Manager в команде Flutter, Surf

Что делать. Использовать технологию, которая позволяет объединить нативное приложение и кроссплатформенные компоненты. Проще говоря, изолированно и оперативно встраивать в объёмное нативное приложение небольшие кроссплатформенные фичи, чтобы их тестировать в реальных рыночных условиях. Такие модули также позволяют плавно и постепенно заменять нативные части приложения на кроссплатформенные без приостановки поддержки уже существующего приложения. Такая технология называется add-to-app и реализуется на Flutter. В этой статье расскажем, как работает Flutter add-to-app на реальных примерах, когда стоит использовать технологию в продукте, какие сложности могут возникнуть и как их обходить.

Add-to-app: самая недооценённая возможность Flutter

Add-to-app позволяет добавлять новую функциональность на Flutter в работающее нативное iOS или Android-приложения. Если в приложении не хватает какого-то экрана с новым продуктом или ещё нет программы лояльности,, то их можно разработать как кроссплатформенный Flutter-модуль и встроить в существующее приложение, например на Swift, Kotlin или React Native. Часть пользовательского интерфейса отобразится при помощи Flutter, не затрагивая нативные сценарии и части приложения.

Например, команда необанка Simply разработала платежи через add-to-app.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Add-to-app помогает сократить бюджет, потому что внедрение кроссплатформенной функциональности на Flutter обходится дешевле, чем нативная разработка. В этом случае созданием и внедрением модуля занимается одна команда Flutter-разработчиков, а в случае натива над этим работают две команды — iOS и Android. При этом, кроссплатформенный кусок интерфейса выглядит и ощущается как нативный. Тот же Simply внедрил модули на Flutter, чтобы не загружать нативных разработчиков и сэкономить время.

Что можно реализовать с помощью add-to-app

Можно реализовать отдельные сценарии. Если в приложение нужно быстро внедрить новую фичу и проверить гипотезу, то лучше всего подойдёт что-нибудь отдельное. То есть нужно выбрать функциональность, которая не относится к основному сценарию использования приложения. Например, корзину, чат-бота, модуль оплаты, программу лояльности или отдельный виджет новой услуги — аренды самокатов или заказа продуктов. Это связано с тем, что отдельный изолированный сценарий создается в одном модуле и подключается к нативному приложению, при этом не меняя логику и навигацию других элементов приложения. Пользователь бесшовно переходит из нативной части приложения в кроссплатформенную и обратно либо использует кроссплатформенные блоки, встроенные в нативные интерфейсы. В любом случае с точки зрения пользователя разницы не видно.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Или целое приложение. С помощью Flutter add-to-app можно реализовать полный переход с нативного приложения на кроссплатформенное, которое будут поддерживать только Flutter-разработчики. Каждый нативный функциональный модуль постепенно заменяется, пока приложение полностью не станет кроссплатформенным. При этом компания продолжает развивать продукт.

Например, мы помогали fashion-бренду Love Republic переходить с натива на Flutter за пять месяцев. Мы провели редизайн устаревшего приложения, обновили логику оформления заказа, доработали основные сценарии и смогли повысить конверсию в покупку в 2 раза. Мы заменили нативное приложение кроссплатформенным и на «Чёрную пятницу» приложение принесло компании рекордную прибыль.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Зачем Яндекс, Alibaba и необанк Simply внедряли Flutter-модули в нативные приложения

Продуктовые команды из крупных компаний используют Flutter add-to-app гораздо чаще, чем рассказывают об этом публично. С одной стороны это странно при весьма активном сообществе, а с другой, это может быть связано с тем, что еще несколько лет назад эта технология работала неидеально и вызывала большие сложности при внедрении — про них расскажем позже. Тем не менее есть некоторые успешные кейсы применения технологии.

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

Яндекс разрабатывает свои сервисы на Flutter. Фреймворк используют команды Яндекс Про и Go. Например, в приложении Яндекс Go в разделе для каршеринга Драйв нативные части были постепенно переписаны на Flutter через add-to-app, чтобы упростить дальнейшую поддержку. А Яндекс Про использует Flutter add-to-app, чтобы перевести Android-приложение на кроссплатформу и одновременно создать приложение для iOS.

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

Один из примеров использования Flutter add-to-app в Яндекс Про — финансовый раздел для водителей такси. Яндекс добавил новый модуль, чтобы отобразить баланс, доступные банковские предложения и историю транзакций. При этом раздел с пластиковой картой и кешбэка остались нативными — разработчики использовали готовый BankSDK, тот же, что и в основных нативных приложениях Яндекс Банка.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Казахстанский необанк Simply внедрял модули, чтобы добавить функцию платежей

Simply — первый мобильный необанк в Казахстане. Пользователи Simply могут оплачивать счета и услуги онлайн, расплачиваться в магазинах бесконтактно, переводить деньги на карты других казахстанских банков и зарубеж, копить кешбэк и открывать сервисы банка без доступа к интернету. Команда Simply разработала модуль платежей в приложениях для iOS и Android при помощи Flutter add-to-app. Разработчики выбрали такой вариант, чтобы объединить лучшие возможности от Flutter и Kotlin Multiplatform в одном продукте.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

В результате скорость разработки новых фичей увеличилась в 2 раза, а переход внутри нативных приложений во Flutter-модуль для совершения платежей проходит незаметно для 100% пользователей. Команда подчеркивает еще одно преимущество add-to-app — расширяемость, которая очень нужна молодому банку. Проверенный платежный модуль от команды Simply будет интегрироваться в приложение Мой Beeline.

Xianyu, Alibaba внедрял модули, чтобы ускорить обработку транзакций

Xianyu — сайт для продажи подержанных товаров или аналог Авито от Alibaba Group. Команда Xianyu начала изучать возможность внедрения Flutter-модулей еще в 2020 году. Код для цепочки транзакций был в плохом состоянии и не мог обеспечить адекватную поддержку бизнеса. Их гипотеза состояла в том, что использование Flutter поможет настроить архитектуру и ускорить обработку транзакций.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Результат: Xianyu решили две глобальные бизнес-задачи.

  1. Создали новую архитектуру и ускорили запуск новых продуктов.
  2. Повысили эффективность исправления багов.

В процессе внедрения команда Xianyu столкнулась с трудностями:

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

Бинг Сун (Bing Sun), разработчик в Alibaba Group

Трудности с внедрением вполне объяснимы: в 2020-м году во Flutter уже был add-to-app, но он работал очень плохо. Технология не была готова для широкого использования. Но в течение трёх последних лет команда Flutter вносила технические изменения во фреймворк, например, добавили FlutterEngineGroup, поэтому сейчас add-to-app работает лучше. Настолько лучше, что с ним строит свои сервисы Яндекс. Наши разработчики провели исследование (R&D) и протестировали технологию. Сейчас её можно использовать и эффективно решать бизнес-задачи.

На нашем сайте мы рассказываем, как Flutter помогает крупным компаниям сокращать расходы на мобильную разработку на 40% и ускорять релиз.

Как мы внедряем фичи на Flutter в нативные приложения

Чтобы новая фича оказалась внутри существующего приложения, мы проходим через пять шагов:

  1. Создаём кроссплатформенный модуль под iOS и Android. Этот модуль содержит все необходимые экраны и функциональность вместе с необходимыми зависимыми модулями.
  2. Интегрируем модуль в iOS и Android-приложения. Чтобы интегрировать Flutter-модули в Android-проект мы запаковываем их в .aar модули и подключаем через Gradle, а для интеграции в iOS-проект мы используем Podfile. На iOS также можно интегрировать модуль как фреймворк.
  3. Настраиваем обмен данными между Flutter-модулем и нативным кодом. Есть два способа передавать данные: через входные параметры и через платформенные каналы.
  4. Запускаем модуль в нативных приложениях. Разработчик запускает модуль, указав точку входа в любом месте приложения, где это необходимо.
  5. Тестируем. Можно тестировать модуль в рамках нативного приложения, это удобно и эффективно. Запускать модуль сам по себе в большинстве случаев не имеет смысла из-за отсутствия общения с платформой.

Когда мы заменяем натив кроссплатформенными модулями

Бывает так, что компания, например, Яндекс, поддерживает сложные приложения с тысячами строк кода. Они работают и приносят деньги. Если идти по обычному сценарию и разрабатывать новую версию на Flutter, то придётся переносить всю функциональность на кроссплатформу, и это может занять несколько лет. При этом команда приложения не может просто остановить развитие продукта: приложение разрастается, в него внедряются новые фичи. Кроссплатформенный проект тоже будет разрастаться. В итоге запустить новый полноценный продукт со всеми фичами можно только через несколько лет.

Можно выпускать кроссплатформенное приложение итерационно: сначала сделать MVP и включить в него 20-30% от того, что уже умеет нативное приложение. Часть функциональности при релизе уйдёт, а пользователям и бизнесу это невыгодно. Крупным компаниям лучше переходить на Flutter постепенно через add-to-app. В этом случае мы встраиваем модули, чтобы помочь нашим клиентам перейти на кроссплатформу параллельно основной работе приложения и релизу обновлений. И компаниям не нужно будет поддерживать свои нативные приложения и в это же время платить за разработку нового.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Для компаний с простыми приложениями, например, Love Republic, вполне возможно разрабатывать на Flutter с нуля. Если компания финансово может поддерживать натив, то мы разрабатываем новый продукт полностью и потом заменяем одно приложение на другое.

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

Обсудить проект с Surf

Какие ограничения у Flutter add-to-app

Немного технических деталей. У add-to-app есть ограничения, но в ходе исследования мы выяснили, что каждое из них так или иначе можно обойти.

Ограничение №1. Нельзя встроить несколько модулей

Решение. Можно через вложенность модулей

На официальном сайте Flutter в техническом руководстве сказано, что интеграция нескольких Flutter-модулей в одно приложение не поддерживается. То есть правильный ответ на вопрос, можно ли использовать несколько Flutter-модулей в одном приложении — нет.

Однако несмотря на то, что можно подключить только один модуль, нет никаких причин, по которым этот модуль не может содержать в себе другие модули. Дополнительные модули просто будут зависимостями корневого модуля.

Flutter add-to-app. Как проверять гипотезы и добавлять новые фичи в нативные приложения, когда нет ресурсов разработки

Именно технического ограничения, которое бы сделало внедрение нескольких модулей в одно приложение невозможным, нет. Возможно, «под капотом» это не очень красиво выглядит, но работает и на производительности не отражается. И скорее приносит неудобства разработчикам, а не клиентам и пользователям.

Ограничение №2. Неудобная разработка модулей под нативное приложение

Решение. Неудобства испытывает только разработчик, который пишет код

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

В Яндексе тоже с этим столкнулись:

«Чем сложнее приложение, в которое встраивается Flutter, и чем более инвазивно он туда встраивается, тем менее всё гладко. Если функциональность — не отдельный автономный экран на Flutter и необходимо настроить плотное взаимодействие с другими функциями, будет сложнее.»

Геннадий Евстратов, разработчик Яндекс Про

Ещё один фактор, отнимающий удобство разработчиков — процесс дебага. И помимо устранения неполадок нужно следить за тем, чтобы Flutter-модуль не перекрывал остальные элементы экрана. Для этого разработчик устанавливает соответствующий режим рендера. В остальном процесс не сильно отличается от обычной Flutter-разработки.

Почему выбираем Flutter add-to-app

Позволяет дорабатывать уже существующие приложения

Если бизнес-проект ведётся много лет, и в приложении накопилось много легаси, из-за чего оно теряет в производительности и плохо масштабируется, можно подумать о внедрении модуля на Flutter. Во-первых, не будет необходимости переписывать все приложение сразу. Во-вторых, новый модуль заменит устаревший код и улучшит работу приложения. И в-третьих, компания сможет продолжить развитие продукта, добавляя модули без остановки работы приложения и без новых релизов в сторах. Потери некоторых функций, которая могла бы быть, если резко переходить с нативного приложения на Flutter MVP, тоже не будет.

Поддерживает разные нативные технологии

Интеграция Flutter не исключает использования нативных языков и фреймворков. Add-to-app «дружит» с разными технологиями, поэтому в приложении можно использовать нативные SDK Android и iOS, Swift, Kotlin Multiplatform, React Native и Flutter одновременно. У компании просто появляется возможность внедрения Flutter-компонентов в существующее приложение и плавного перехода на кроссплатформу. Если речь идёт о внедрении дополнительных функций для тестирования, add-to-app — возможно лучший подход.

Можно развивать проект или разрабатывать новые функции без нативных разработчиков

Даже если у компании уже есть нативные приложения и она выделяет бюджет на содержание двух отдельных команд, не всегда есть смысл нагружать нативных разработчиков задачами, связанными с тестированием гипотез. И если команда уже занята на других проектах, для внедрения функциональности приходится искать и нанимать новых сотрудников. Найти двух хороших native-разработчиков сложнее, чем одного Flutter-разработчика, и внедрить новые фичи с add-to-app быстрее и дешевле. А при долгосрочном переходе на кроссплатформу можно нанять полноценную Flutter-команду.

И ещё несколько преимуществ:

  • Flutter обеспечивает высокую производительность и плавную анимацию.
  • С Flutter можно масштабировать приложение без дополнительных усилий, и вес приложения с новыми модулями меняется предсказуемо.
  • Add-to-app — путь к поэтапной миграции легаси-натива на Flutter.
  • Add-to-app подойдёт для тех, кто не хочет переписывать приложение с нуля и параллельно поддерживать и Flutter, и нативные приложения.
  • В случае перехода с коробочных решений, схемы White Label и фреймворка React Native, add-to-app тоже будет рабочим вариантом.
  • Вместо разработки функциональности для Android и iOS отдельно, можно написать код на Flutter, который запустит фичу на обеих платформах. Это сэкономит время и ресурсы как при A/B-тестировании, так и при плавном переходе на кроссплатформу.

Резюмируем. Когда подходит Flutter add-to-app

Интеграция Flutter-модулей нужна в двух основных случаях: для плавного перехода на кроссплатформу и для внедрения экспериментальной функциональности и проверки гипотез. Add-to-app лучше подойдет крупным компаниям с большими многофункциональными приложениями. Например, финтех-компаниям, крупным ритейлерам и авиакомпаниям.

Сколько это стоит: примерно столько же, сколько обычная разработка функциональности на Flutter. Использование add-to-app может быть дороже, но незначительно. Это связано с неудобствами для разработчиков во время интеграции и тестирования.

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

Где еще почитать и послушать об add-to-app:

Если вам нужно добавить функциональность в ваше приложение или запустить процесс перехода на кроссплатформу, давайте обсудим подходящее именно для вас решение, его сроки и окупаемость.

1616
22
2 комментария

как решаете проблему с устареванием нативных приложений? Как часто проводится обновление?

Автор

Здравствуйте, Катерина. Спасибо за вопрос. Чтобы мы ответили на него развернуто, расскажите пожалуйста какую проблему имеете ввиду? что за ситуация или кейс у вас были?