0,0
рейтинг
18 ноября 2013 в 20:21

Разработка → История создания кроссплатформенного мобильного приложения из песочницы

Жесткая конкуренция на рынке мобильных платформ уже не позволяет выпускать приложения ориентированные на одну операционную систему, что ставит разработчиков перед сложным выбором. Они должны выбирать между разработкой нативных приложений для каждой ОС (на родных языках программирования для каждой из них), разработкой в виде сайта для мобильных устройств на HTML5 или же создавать приложения, используя фреймворки для кроссплатформенной разработки.

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

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

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

К основному функционалу системы необходимо отнести: онлайн-табло рейсов, push-уведомления пользователя при изменениях в интересующих его рейсах, а также популяризацию других сервисов аэропорта (конференц-залы, VIP-обслуживание, такси, гостиницы, магазины и другое).

Разработка клиентской части решения


Учитывая большой опыт наших сотрудников в создании приложений на С#, нами был выбран подход разработки клиентской части приложения с использованием фреймворка Xamarin. Вся работа проводилась в Visual Studio. И если для Windows phone и Windows 8 разработка в Visual Studio является инструментом по умолчанию, то для Android и iOS такая возможность стала доступной благодаря Xamarin (для этого необходима business-лицензия).

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

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

Xamarin позволяет использовать стандартные средства разработки пользовательского интерфейса и его элементов для iOS и Android.

Стоит отметить, что для разработки решения под iOS в любом случае необходим Mac. В нашем случае Mac потребовался по двум причинам: во-первых, для отладки приложений нужен эмулятор iPhone/iPad, который доступен только на Mac; во-вторых, эта операционная система была необходима для автосборки проекта.

Разработка серверной части решения


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

Работать с ним было очень удобно и довольно легко. Из положительных сторон работы с Azure хотим выделить следующие:
1) Удобное развертывание системы в облаке
Развертывание приложений в Windows Azure можно осуществлять двумя способами — при помощи портала Windows Azure или Service Management API (SMAPI).

2) Удобный механизм для тестового развертывания
Существует две ячейки развертывания – тестовая (staging) и боевая (production). Тестовое развертывание позволяет протестировать приложение в среде Windows Azure перед развертыванием в боевую среду. В свою очередь, переключение между staging и production выполняется в один клик.

Поскольку в Windows Azure размер оплаты зависит от потраченного процессорного времени, то для оптимизации расходов необходимо удалять staging развертывания. Если же просто нажать кнопку «Остановить» в портале, то сервис станет недоступным, но при этом процессорное время будет расходоваться.

Стоит отметить, что в нашем случае экономия составляла более 100 долларов в месяц.

В качестве ложки дегтя в бочку меда Microsoft скажем, что в Windows Azure неудобная работа с логами. Конечно же, для логов можно использовать платные решения, так как работать с их Table Storage очень неудобно.

Особенности функционала серверной части системы


Для передачи данных из системы аэропорта в наше приложение мы выбрали, возможно, не самый удобный и безопасный метод, но, в свою очередь, самый быстрый и менее затратный для заказчика − передачу xml-файлов через ftp-сервер. К примеру, аэропорт с заданной периодичностью формирует xml-файл с информацией обо всех рейсах, связанных с пассажирскими авиаперевозками и выкладывает его на ftp-сервер.

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

Минусы:
  • невозможность предотвращения всех сбоев со стороны аэропорта
  • безопасность FTP-протокола
  • поскольку Windows Azure отсутствует такой сервис как FTP, ftp-сервер должен разворачиваться у заказчика
  • система, которая получает данные из FTP, имеет динамический IP-адрес, вследствие чего доступ к информации должен ограничиваться по пулу адресов облака Azure или по доменному имени сервиса.

Стоит также обратить внимание на отправку push-уведомлений пользователям. Среди особенностей необходимо назвать следующие:
  • сервисы push-уведомлений не гарантируют доставку на клиент, а потому при плохом канале Интернет, существует вероятность потери сообщений
  • очередность доставки уведомлений не зависит от очередности отправки
  • в Wi-Fi сети необходимо открыть специальные порты для доставки push-уведомлений (в том случае, если политика безопасности построена по принципу «запретить все и разрешить только нужное»).

Особенности публикации


Аэропорт «Киев Борисполь» захотел получить приложение доступное на всех популярных смартфонах (iOS, Android, Windows phone), а так же на планшетах под управлением Windows 8.

Windows phone

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

iOS

Публикация в AppStore также прошла без затруднений, однако прохождение всех этапов заняло неделю.

Android

Публикация в магазине GooglePlay оказалась самой простой и быстрой. После заполнения всех описательных атрибутов и прикрепления пакета (apk-файла) приложению был присвоен статус «Опубликовано». В разделе «Новые» и в поиске магазина оно стало доступным в течение нескольких часов. Скорее всего, задержка связана с обновлением данных самого магазина.

Windows 8

Вдохновленные простотой публикации в магазине Windows phone мы ожидали того же и в работе с Windows 8. Однако, при публикации возникли некоторые сложности.

Первый отказ системы мы получили с формулировками:
  • Ваше приложение не соответствует требованию 4.1. (Если приложение имеет сетевые возможности, оно должно содержать заявление о конфиденциальности). Подробнее

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

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

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

Второй отказ был получен с формулировкой:
  • Ваше приложение не соответствует требованию 2.3 (Приложение не должно отображать рекламу с помощью собственного описания, плиток, уведомлений, панели приложения или после быстрого проведения пальцем от края). Подробнее

Такой результат нас сильно удивил, так как в приложении полностью отсутствовала реклама. Без каких-либо изменений мы отправили его на повторную сертификацию. В результате приложение ее прошло.

Плюсы и минусы выбранных подходов


У выбранного подхода, как и у всего в этом мире, есть как преимущества, так и недостатки. Среди преимуществ особенно хотелось бы выделить следующие:
  1. решение реализовать кроссплатформенное ядро на Xamarin позволило существенно сократить время разработки и тестирования бизнес-логики приложения
  2. решение разворачивать серверную часть в облаке Windows Azure дало возможность:

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

Недостатки у выбранного подхода такие:
  1. приложение получилось довольно тяжелым (около 19 Мб), поскольку Xamarin увеличил его размер (iOS и Android) − это вызвало негативные отзывы пользователей Android
  2. у Xamarin бывают некоторые баги, которые надо репортить (они их фиксят, но не моментально).

Для сравнения размер приложений получился следующий:
  • Android – 19 Мб
  • iOS – 19 Мб
  • Windows phone – 2 Мб
  • Windows 8 – 4,5 Мб.

Немного статистики по первому внедрению


Приложение «Киев Борисполь» – это нишевое приложение. Его целевая аудитория − пассажиры аэропорта, а также люди, встречающие и провожающие их.

Необходимо учитывать, что рекламное продвижение приложения не выполнялось. Отдел маркетинга аэропорта лишь опубликовал две обзорные статьи в СМИ. На момент написания этого материала на территории аэропорта не было ни рекламного объявления, ни даже бегущей строки на экранах.

Лояльность пользователей

В среднем ежедневно среди всех пользователей:
image
  • 8,3% − новые пользователи
  • 91,7% − пользователи, которые ранее уже запускали систему.

Среднее количество установок за день


  • iOS – 40/день
  • Android – 20/день
  • Windows phone – 18/день
  • Windows 8 – 20/день.

Нас, конечно, немного удивляет такая кучность по всем ОС, поскольку опубликованные данные аналитической компании Strategy Analytics свидетельствуют о том, что устройств под управлением ОС Windows в несколько раз меньше.

Количество установок во время маркетингового воздействия

image
График четко показывает, что публикация в СМИ влияет на скачивание приложения около месяца. В самый пик было около 1000 установок в день только для iOS.

Оценки и отзывы

Статистика по этим показателям для нас стала полной неожиданностью:
  • iOS – за все время было оставлено около 20 комментариев и оценок (в основном все оценки 5 звезд)
  • Android – пользователи этой операционной системы оказались самыми придирчивыми. Часть негативных отзывов мы получили в результате отсутствия поддержки планшетов, а часть − из-за размера приложения. Заметим, что пользователей iOS абсолютно не беспокоил размер приложения
  • Windows phone – всего 20 отзывов со средней оценкой 4+
  • Windows 8 – было поставлено 80 оценок с отзывами и все по 5 звезд. И это притом, что приложение опубликовано в магазине всего лишь два месяца, а iOS уже более полугода.

Трудозатраты на реализацию системы и кастомизацию под заказчика

Мы знаем, что всех разработчиков интересует, сколько человеко-часов было потрачено на проект. Однако, эти данные практически никогда не выкладываются в общий доступ.
Задача Трудозатраты (часов) Выполненные работы
Серверная часть 420 Проектирование и разработка
Ядро клиента 300 Проектирование и разработка
Графический интерфейс
Android 200 Разработка UI
iOS 140 Разработка UI
Windows 8 160 Разработка UI
Windows phone 180 Разработка UI
Создание дизайна 100 Создание макета
Администрирование 150 Настройка инфраструктуры, автосборок и развертывания решения в облако
Аналитика 350 Проектирование юзабилити системы и UI, написание спецификаций, коммуникации с заказчиком и ИТ-специалистами заказчика
Тестирование 300 Тестирование приложения на всех этапах разработки

Некоторые могут сказать, что затраты были слишком велики и их можно было сократить, но кажущаяся легкость приложения на самом деле обманчива. Была проделана очень сложная, но при этом до мелочей продуманная работа. В частности, за это время было реализовано много функционала, такого как, например: офлайн-работа, кеширование данных, система для управления контентом (все данные, которые отображаются в приложении, подгружаются с сервера и кешируются на клиенте) и другое. Кроме того, было реализовано много функционала, который является критичным для системы, хотя на первый взгляд может быть и не заметен.

Результатом масштабной работы стало создание уникального качественного решения, которое к тому же легко адаптировать под все требования и пожелания заказчика. Но самое главное − появилась возможность быстрого расширения системы (как ее функционала, так и пользовательской нагрузки).

P.S. Будем признательны Вам за ответы на такие вопросы:
  1. Что мотивирует пользователей Windows 8 оставлять такое количество хороших отзывов и оценок?
  2. Почему, несмотря на разницу в количестве устройств для различных ОС, ежедневное количество установок в среднем практически одинаково для всех платформ?
Борт Владимир @EleganceUkraine
карма
6,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (12)

  • 0
    Думаю что ответ на ваш первый вопрос — низкая конкуренция.
    • 0
      Возможно немного конкретизирую вопрос: Что мотивирует пользователей Windows 8 оставлять такое количество отзывов?
      Соотношение «количество отзывов»/«количество установок» существенно больше чем у других ОС.
      • 0
        Наличие клавиатуры? =)
      • 0
        Ну может потому что рынок Windows 8 и Windows Phone относительно молодой? И там нет такого кол-ва приложений, как на других платформах. И многие пользователи, которые приобрели себе планшет или телефон, будут рады появлению нового качественного приложения.

        Другими словами, на других платформах пользователи уже «зажрались», извините. На этой еще нет.
  • 0
    Спасибо огромное за статью и особенно за цифры.
    1)Скорее всего лояльность пользователей, так как на Win 8 все таки приложений мало. А такие казалось бы необходимые приложения не у всех есть под Win платформы.

    Расскажите пожалуйста подробнее о том какие разработчики занимались мобильными приложениями.
    Интересует их бэкграунд?
    Имели ли они уже опыт разработки на нативных инструментах или это чистые C# разработчики и походу осваивали iOS, Android?
    Как убедили заказчика использовать платформу Xamarin? А то многие о ней вообще не слышали и боятся, это ведь там C# и .NET аяяй))

    А не пробовали на Android настроить билд под разные ARM6, ARM7, x86? На выходе должны получиться 3 apk меньшего размера, по дефолту Xamarin добавляет рантаймы под все архитектуры.
    • 0
      1) Опыт у разработчиков разный — есть опыт разработки нативных приложений, а это был наш второй проект с использованием Xamarin.
      По поводу заказчиков, то тут вообще проблем не было — это была не кастомная разработка, а именно создание продукта с последующей кастомизацией под корпоративный стиль заказчика. Аэропорт понятия не имеет про используемые технологии и инструментарий.

      2) Собирать под разные архитектуры пробовали в качестве экспериментов, но это не выкладывали в магазин — это в планах на будущее для оптимизации.
      • 0
        Напишите пожалуйста о размере получившихся сборок?
  • 0
    Какой подход вы использовали для разделения кода? Статичные классы как в официальных мануалах? MVP? mVVMCross? Или что то более экзотическое?
    • 0
      Подход больше похож на MVP с максимальным использованием возможностей каждой из платформ.
  • 0
    Спасибо за опыт. Пару-тройку вопросов по теме: 1) скажите, вы использовали какие-нибудь sdk для сбора аналитики поведения в приложении? 2) Как у вас проходил этап стабилизации, вы пользовались системами для отправки ошибок типа bugsense? Пишут что в Xamarin с этим не так все прелестно в плане интеграции как в нативной разработке. И 3й) вопрос — Xamarin дал вам доступ к своему бета-сервису для тестирования? если дал, то какие впечатления?
    Жду еще ваших постов по этой тематике!
    • 0
      1) Конечно. Мы подключили гугл аналитику. Никаких подводных камней при этом не было.
      2) Мы не использовали системы для отправки ошибок, единственно мы подключили отправку ошибок в гугл аналитике (но это конечно же не то). А вообще, поскольку Xamarin только развивается, то не все API доступны и приходится допиливать.
      3) Мы не запрашивали бета-сервис для тестирования.
  • 0
    >> функционал
    ну сколько можно?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.