Как быстро запустить мобильное приложение для магазина с 20 тысячами SKU
на главную спецпроекта
Как быстро запустить мобильное приложение для магазина с 20 тысячами SKU

Гипотеза, план, действия, результат.

Агентство panfilov.digital успешно протестировало гипотезу о том, что мобильное приложение будет эффективно для крупного интернет-магазина в Казахстане akvilon.kz. Как запустить приложение быстро и дёшево? Рассказывает основатель агентства Максим Панфилов.

В 2021 мы за полгода запустили MVP интернет-магазина akvilon.kz с нестандартными фичами. Он позволил компании стать одним из крупных игроков на рынке Казахстана.

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

Мы решили сделать кроссплатформенное мобильное приложение на React Native и запустили его тоже за полгода. Расскажу, что позволило нам сжать сроки и к каким результатам мы пришли.

Максим Панфилов

Зачем интернет-магазину приложение

Мобильное приложение магазина — это реклама, которая всегда перед глазами у покупателя. Пользователь постоянно видит иконку приложения и получает пуш-уведомления, а значит, постоянно о вас помнит. Но повышение вовлечённости ― не единственный аргумент.

  • Повысить скорость загрузки — приложение работает быстрее сайта, потому что часть данных уже загружена на смартфон.

  • Открыть новый канал продаж — например, для клиентов, у которых нет ноутбуков или ПК.

  • Не отставать — у многих крупных магазинов есть приложения.

  • Отстроиться от конкурентов ― на рынке Казахстана аналогов мало.

4 сценария для тестирования гипотезы

PWA

Прогрессивное веб-приложение — это по сути не приложение, а ярлык сайта, который можно сохранить на смартфоне.

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

Зато такое приложение можно дёшево и быстро вывести на рынок.

Казалось бы, если нужно просто проверить гипотезу, это хороший вариант. Но с таким же успехом можно провести на сайте опрос «Нужно ли вам приложение?».
Такое приложение сложно обновлять и развивать, полноценного цифрового продукта из него не получится. От этого варианта мы отказались.

Нативное приложение

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

Но это решение — самое долгое и дорогое из возможных. Много времени уходит на дизайн, потому что магазины приложений требуют соответствия их гайдлайнам. Версии для iOS и Android пишутся отдельно, разными командами, которым будет платить клиент. Этот вариант был слишком рискованным.

Кроссплатформенная разработка

Кроссплатформенные приложения, в отличие от нативных, работают в нескольких операционных системах — в данном случае iOS и Android. Фронтенд в таких приложениях написан на JavaScript с использованием мобильных фреймворков. Самые популярные фреймворки для кроссплатформенных приложений — React Native и Flutter.

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

Гибридная разработка

Гибридное приложение — это сайт, который оптимизируется под смартфон и запускается через WebView. WebView — это браузер, который отображает веб-страницы внутри приложения. Например, если вы кликнули по ссылке из сообщения в Telegram, по умолчанию страница откроется не в Google Chrome, а в самом мессенджере с помощью WebView. Но Telegram использует этот браузер только для внешних страниц. В гибридных приложениях через Webview отображается весь контент, кроме отдельных элементов, например, кнопок навигации.

Это решение — не только компромисс по цене и скорости между PWA и нативными приложениями. Так как часть функций будет в браузере, можно не писать их с нуля, а взять с сайта. А если гипотеза подтвердится, мы сможем по частям переписывать эти функции и сделать полноценное приложение — в нашем случае на React Native.

На этом варианте и остановились.

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

Если гипотеза подтвердится, вместо переписывания кода целиком можно развивать продукт, которым уже пользуются.

3 базовых функции для быстрого запуска

Напомню, что компании нужно было запустить мобильное приложение быстро. Чтобы сократить time-to-market, в приложении мы оставили только базовые фичи:

  • каталог и поиск с фильтрацией;
  • корзина и оформление заказа;
  • профиль пользователя с бонусной картой.

Какие были челленджи

Бэкенд у сайта и приложения был общий, но это всё равно разные сущности. Главной проблемой в разработке стала синхронизация — нужно было «подружить» приложение с сайтом.

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

Фронтенд мы писали на Vue Native, где у нас не было переходов как таковых — мы просто подменяли компоненты и показывали их в WebView. Проблемы начались на этапе перехода на React Native. Мы внедрили React Navigation — библиотеку для навигации внутри приложения на React Native.

Тут мы и столкнулись с проблемой синхронизации — сайт не знает, какие страницы есть у приложения, и наоборот.

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

Поясню подробнее. Представьте, что у вас на рабочем столе лежит папка «Фотографии». В ней — много папок с названиями «Фото 2010», «Фото 2012» и так далее. Когда вы заходите в корневую папку, слева видно список всех вложенных разделов. Но вы почему-то не можете напрямую через боковую панель перейти из одной вложенной папки в другую — скажем, из «Фото 2010» в «Фото 2012».

Вы можете это сделать, только если вернётесь в корневую папку с фотографиями.

В этом и есть ограничение React Navigation — эта библиотека не видит информацию о вложенных разделах и не может переходить между ними, если вы не находитесь в корне.

Проблему мы пробовали решить разными способами.

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

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

Начали передавать более подробную информацию о страницах через PostMessage — и этот вариант сработал лучше всех, но тоже не без проблем.

В результате мы все страницы сделали корневыми (страницы, которые не являются вложенными по отношению к каким-либо другим страницам).

Для этого мы дописали часть компонентов этой библиотеки.

  • Кастомный routes — добавили методы, которых нам не хватало.

  • Свой TabNavigators, который скрывает все ненужные корневые страницы, кроме тех, которые нужны на экране прямо сейчас.

Это решение помогло решить проблемы с синхронизацией и переходами между страницами и ускорило работу приложения.

Как мы продвигали приложение

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

Позже люди начали сами находить приложение в магазинах через поиск. В магазинах мы приложение не продвигали — только заполнили все нужные поля и подготовили скриншоты для product page.

Как мы поднимали рейтинг приложения

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

Публикация прошла без проблем, но случилось другое ― у приложения поначалу был низкий рейтинг, потому что оценки ставили в основном те пользователи, которые столкнулись с проблемами.
Мы быстро добавили форму обратной связи в само приложение сразу после оформления заказа. Так пользователи могли напрямую сообщить о сложностях в обход магазинов приложений.
После добавления формы фидбэка оценки выросли. Сейчас у нас рейтинг 4.4 Android и 5 на iOS. 80% пользователей заходят через Android и 20% — с устройств Apple.

Наш проект показал, что гипотеза компании была верна ― клиентам полезно приложение. Сейчас через приложение оформляется 30% заказов.

Мы хотим, чтобы у приложения были преимущества перед сайтом. Для этого уже добавили push-уведомления и в будущем планируем запускать через них кампании для повышения retention rate, а также добавили штрихкод бонусной карты, чтобы можно было не носить пластиковую версию.

Мнение редакции может не совпадать с мнением автора. Ваши статьи присылайте нам на 42@cossa.ru. А наши требования к ним — вот тут.