Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Критерии выбора средств разработки мобильных приложений (Разработка мобильного приложения для курьерской службы доставки «Ptichka»)

Содержание:

Введение

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

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

Проблемы критериев выбора инструментов для разработки мобильного приложения исследовались и основательно описаны в трудах таких отечественных и зарубежных ученых, как В. Василенко, В. Геец, В. Герасимчук, Г. Киндрацкая, П. Кливець, А. Ковтун, М. Корецкий.

Цель исследования – исследование критериев выбора инструментов для разработки мобильного приложения.

Задачи исследования:

- исследовать критерии критериев выбора инструментов для разработки мобильного приложения;

- провести сравнительный анализ средств разработки мобильных приложений по выбранным критериям;

- разработать мобильное приложение для курьерской фирмы.

Объект исследования – инструменты разработки мобильного приложения.

Предмет исследования – критерии выбора инструментов для разработки мобильного приложения

В результате выполнения данной работы было разработано кроссплатформенное мобильное приложения для курьерской службы доставки «Ptichka».

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

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

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

1. Теоретические аспекты выбора средств разработки мобильных приложений

1.1 Инструменты разработки мобильного программного обеспечения: критерии выбора

Для разработки мобильного программного обеспечения существует достаточно много инструментов. Каждый, кто хочет начать разрабатывать мобильные приложения, задумывается, какая среда разработки подойдет лучше всего. В данной статье будет проведен обзор наиболее популярных сред разработки мобильных приложений и выбрана наиболее подходящая для того, чтобы начать создавать собственные мобильные приложения [1].

Чтобы определиться, какой из инструментов выбрать, выделяют такие критерии сравнения, как:

1) платформа;

2) поддерживаемые языки программирования;

3) функциональные особенности;

4) стоимость.

1.2. Сравнительный анализ средств разработки мобильных приложений

В качестве первого примера рассмотрим официально рекомендуемую Google платформу Android Studio [2].

Android Studio

Android Studio основана на IntelliJ IDEA. Является официальной платформой для программирования Android приложений, доступна в бесплатном доступе. Обладает уже встроенным Android SDK [2].

Платформа Android Studio является обще признано самой удобной средой для тестирования и разработки приложений для Android. Компания Google сделала этот программный продукт с максимально полезным набором инструментов для разработки проектов под мобильные устройства. Процесс создания каждого приложения стал динамичней и проще, по сравнению с Eclipse. Это стало возможным, благодаря возможности отображения главных рабочих элементов в самой структуре будущего приложения, что позволяет более рационально подойти к разработке [11].

Пользователи отмечают такую полезную функцию, как просмотр в режиме реального времени всех дополнений. Так же среда позволяет разрабатывать приложения для разных версий Android [10].

Процесс работы на данной платформе значительно удобней Eclipse, благодаря доработке пользовательского интерфейса. В следствие чего написание кода стало более продумано, что позволяет легко ориентироваться при разработке больших по объёму проектов. Есть функция перетаскивания функциональных элементов в самой программе, что упрощает редактирование информации.

Главные функции Android Studio [12]:

- присутствие справочника;

- наличие динамичного эмулятора для устройств на базе платформы Android;

- понятный интерфейс;

- отправка push-сообщений для приложений через любые облачные сервисы сразу на устройства под Android.

- возможность быстро локализовать приложения;

- есть опция маркировки кода;

- доступно большое число вариантов смены разрешения, размеров экрана;

- наличие инструментов для повышения качества проектов и монетизации;

- поддержка отслеживания эффективной работы рекламных объявлений;

- дружественное отношение с бета-тестерами;

- отображение всех действий (изменений) в проекте в режиме реального времени.

Инструменты Android Studio [9]:

- Плагин Gradle для сборки приложений;

- Облачная среда Google;

- Функция ProGuard;

- Редактор WYSIWYG;

- Инструмент lint, создан для мониторинга проблем связанных с производительностью и совместимости версий;

- мастера основанные на шаблонах для разработки конструкций и компонентов Android.

- Google Cloud Messaging и App Engine сервисы могут быть интегрированы с помощью поддержки Google Cloud Platform.

Одним из основных преимуществ Android Studio является система сборки Gradle, которая интенсивно развивается компанией Google. Gradle обладает такими полезными функциями как [2]:

- Создание различных вариантов сборки вашего приложения.

- Создание простых задач в виде скрипта.

- Возможность управления зависимостями и автоматически подгружать их.

- Настройка хранилища ключей.

Основные возможности среды «Android Studio» [2]:

- Посредством пользовательского интерфейса можно перетаскивать компоненты;

- для ускорения разработки доступен многофункциональный редактор с различными инструментами;

- удобный плагин Gradle, позволяющая производить сборку автоматически;

- для проверки совместимости с различными платформами, а так же для анализа производительности возможно проведение тестирование;

- инструменты улучшения функций рекламы и управления монетизацией в приложениях;

- инструменты для обозначения и обработки кода;

- Google Cloud Messaging - push уведомления для ваших приложений посылающихся с сервера на мобильные устройства;

- рекординг видео с экрана, данная опция доступна только для Android 4.4.2 и выше;

- комфортная локализация приложений;

- для разработки кода доступны шаблоны и помощники;

- реорганизация кода;

Eclipse IDE

Платформа имеет стандартный набор для разработчика, но Eclipse различается от других IDE по нескольким основным аспектам [4]. Данная среда разработки абсолютно нейтральна к платформе и языку программирования. Eclipse поддерживает языки: Cobol, Java, C++, C. Но в добавок к этому есть функция добавления интересующего вас языка, к примеру таких как: C#, PHP, Python, Ruby. Проекты по реализаций данных языков уже доступны на данный момент [7].

Среда Eclipse доступна, при помощи Eclipse Consortium под видом скомпилированного исполняемого файла для Windows, Linux и др [8].

Eclipse представляет из себя платформу, в которой разрабатываются плагины, далее встраиваемые в неё. Одним из таких является Android Development Tools (ADT). Плагин ADT намного расширяет возможности данной среды разработки, с помощью него можно быстрей разрабатывать свои проекты под Android, создавать интерфейсы приложений, импортировать компоненты Android Framework API, отлаживать приложения, использовать Android SDK инструменты, а так же можно экспортировать подпись (без знака) APKs в порядке распространения своего приложения.

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

- Редактор макетов Android. Макеты интерфейса в ADT создаются на языке XML. Среда предоставляет пользователю визуальный редактор для просмотра макетов. Когда вы открываете файл шаблона, плагин ADT автоматически запускает этот редактор для просмотра и редактирования файла. У данного инструмента удобный интерфейс предоставляющий удобное переключение между XML - редактором и визуальным редактором. На данный момент редактор макетов претерпел много изменений по сравнению с предыдущими версиями которые отличались более скромным функционалом и поэтому редко использовались. Теперь после его редактирования и дополнения редактирования макетов Android считается как основной метод работы. Для более корректной работы макетов на устройствах предусмотрена их авто –спецификация [6].

- Редактор описаний Android. Файл описания входит в состав проекта Android. Его роль заключается в том, что он информирует о том, как установить и использовать архивные программы, в котором состоит разработанный проект. В плагине ADT присутствует XML - редактор специально для изменения описаний. И это не единственный инструмент в котором можно изменять описания, так же это можно сделать в компоновщике приложений [10].

- Сборка приложении Android. Автоматизированная сборка в Eclipse позволяет объединять в готовый продукт исходный код и ресурсы проекта реализуя его к развёртыванию на устройстве, либо на эмуляторе. В ADT инструментом для выполнения таких операций является система Ant. В Android конечным результатом сборки проекта является файл АРК [5].

- Запуск и отладка приложений Android. Инструментом для запуска и отладки в Eclipse является adb и DDMS позволяющие развёртывать проект на реальном или виртуальном устройстве. DDMS реализует обмен информаций с AVD, так же в нём учавствует среда времени исполнения Dalvik. DDMS

- Виртуальные устройства Android. QUME - подобные эмуляторы служат основой для виртуальных устройств в Eclipse, эмитирующие аппаратное обеспечение Andriod. Для конфигурирования виртуальных устройств Android используется диспетчер SDK и AVD, задающий такие параметры, как объем эмулируемых запоминающих устройств и параметры экрана. Кроме того, он позволяет указывать, какой образ системы Android будет использоваться с каким эмулируемым устройством [4].

- Виртуальные устройства Android обеспечивают тестирование программ в довольно широком диапазоне системных параметров. Для обеспечения такого широкого диапазона потребовалось бы достаточно большое количество реальных устройств, достать которые для тестирования может быть затруднительно. Поскольку QEMU - подобные эмуляторы оборудования являются универсальными в них можно тестировать устройства и образы систем которые пока не являются доступными [5].

- Диспетчер SDK и AVD. Android SDK управляет конфигурацией QEMU с помощью специального пользовательского интерфейса.

- Layoutopt - инструмент диагностирования проблем связанных с компоновкой элементов Andriod, написанных на языке XML.

- Monkey - это компонент для автоматизированного тестирования, работающий на эмуляторе или устройстве. В состав SDK входит система adb которая активирует Monkey.

- Keytool используется для создания временных отладочных ключей. Он генерирует ключи шифрования.

- Zipalign в готовых версиях приложений обеспечивает оптимизированный доступ к данным [11].

- Draw9patch - это специализированный инструмент для рисования состоящий в арсенале ADT.

Intel XDK

Инструмент для разработки кросс - платформенных приложений, так как используется язык HTML5 (сочетает в себе HTML язык разметки, CSS, JavaScript). Поддерживает все ступени разработки, то есть редактирования кода, функция эмулятора мобильного устройства, отладка, профилирование и публикация в магазине. Одной из полезных возможностей XDK является постройка приложения в облачном сервисе. В нём не нужно устанавливать дополнительные плагины, как Android SDK в Android studio или XCODE для IOS, просто код пересылается на сервер и там собирается автоматически. Так же XDK поддерживает все основные платформы мобильных устройств, что выгодно его выделяет перед нативными средами разработки [11].

XDK поддерживает такие игровые среды как: Cocos2d, Phaser, Pixi и EaselJS. С помощью XDK разрабатывать игры стало ещё удобней.

Данная среда содержит удобные инструменты для отладки, тестирования, сборки и анализа ваших приложений [10].

Intel Mobile Development Kit for Android

Специализированная среда разработки под Android от Intel. Обладает мощными инструментами для создания отличных приложений и игр, содержащие все основные компоненты платформы Intel System Studio. Поддерживает языки C, C ++, C #, Fortran, Java.

Благодаря мощным инструментам для отладки графической составляющей программного продукта, отлично подходит для разработчиков игр, которые в свою очередь положительно отзываются об инструментах MDK for Android. Рассмотрим, какими основными компонентами обладает данная среда:

- Intel VTune Amplifier. Инструмент для оценки системы, обладает расширенным анализом и настройкой производительности ЦП [9].

- Intel Energy Profiler. Средство разностороннего анализа энергопотребления и производительности для разработчиков системного ПО.

- Intel C++ Compiler. Передовой отраслевой компилятор С++ для совершенствования производительности высокооптимизированных систем Android и оригинального кода С++.

- Intel Integrated Performance Primitives. Обширная библиотека высокопроизводительных компонентов для создания программного кода, обработки сигналов, данных и мультимедиа [10].

- Анализатор видеосистем. Оптимизирует производительность видеосистем на базе GPU. Осуществляет анализ системной производительности в режиме реального времени.

- Анализатор платформ. Позволяет выполнять исчерпывающий автономный анализ разрабатываемого приложения.

- Анализатор кадров. Анализирует нагрузку видеосистем с получением подробных данных на уровне схем Open GL ES.

Intel Beacon Mountain

По сравнению с XDK данная среда ориентирована только на Android платформу. Имеет полезную функцию автоматического обновления, что позволяет пользователю не сосредотачиваться на поддержке актуальности своей платформы. Beacon Mountain разработана на базе Eclipse и оптимизирована рядом инструментов произведенных Intel:

- Intel* Threading Building Blocks (Intel* TBB) - очень популярная библиотека шаблонов C++ [12];

- Intel* Integrated Performance Primitives (Intel* IPP) Preview -библиотека адаптированной обработки информаций и графики.

- Intel* Graphics Performance Analyzers (Intel* GPA) System Analyzer - позволяет производить мониторинг загруженности системы при работе с элементами OpenGL в реальном времени [3].

- Процессор ускоряющий работу эмулятора с помощью технологии Intel*VT.

XCode

Среда программирования для платформ IOS, OS X, WatchOS, tvOS разработанная компанией Apple. Поддерживаемые языки программирования: С, C++, Objective-C,Objective-C, Swift, Java, AppleScript, Python, Ruby.

Основные инструменты XCode [4]:

- IOS Simulator. Инструмент для быстро просмотра разрабатываемого приложения.

- Dash. Это менеджер сниппетов и браузер документаций.

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

- TestFlight - отличный сервис для передачи тестовых билдов команде бета-тестеров. Этот сервис собирает отчеты об ошибках, пользовательские отзывы, и позволяет вам отслеживать пользовательские сессии [5].

- GDB. Отладчик кода.

«1С: Предприятие 8. Расширение для КПК».

Нельзя обойти вниманием и российского производителя программных продуктов компанию 1С, которая разработала платформу «1С:Предприятие 8. Расширение для карманных компьютеров». Среда предназначена для работы с базами данных «1С Предприятия 8» на мобильных гаджетах, а так же разработки приложений для них. Обладает хорошим инструментарием для разработки [6]:

- Редактор мобильных приложений;

- Платформа для исполнений мобильных приложений;

- Сервер мобильных приложений;

- Компонента обмена данных.

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

Ниже приведена таблица сравнения сред для разработки мобильных приложений, составленная на основе анализа выше перечисленной информации. Основными критериями, которой являются: многообразность языков программирования, удобство пользовательского интерфейса, разнообразие для разработки мобильных платформ, монетизация среды разработки [7].

Исходя из проведенного сравнения, более рентабельно использовать платформу Android Studio. В первую очередь, потому что у неё самый удобный пользовательский интерфейс, много доступного материала для обучения, вполне достаточный спектр языков программирования, бесплатность пользования и самый большой рейтинг целевой платформы в мире (согласно Kantar Worldpanel Comtech доля пользователей Android в мире составляет 68%. Так же можно отметить, что эта среда постоянно развивается и совершенствуется благодаря компаний Google и за её актуальность можно не переживать [8].

2. Разработка мобильного приложения для курьерской службы доставки «Ptichka»

2.1. Описание предприятия

Курьерская служба доставки «Ptichka» предоставляет услуги по доставке документов и посылок по городу. На данный момент служба представлена в Москве, Санкт-Петербурге, Екатеринбурге и Алмате.

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

2.2. Необходимость создания приложения

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

Для этого необходимо предоставить определенное решение, доступное работникам службы. Изначально данное решение было представлено в виде использования мессенджера “Telegram”. Данный мессенджер предоставляет удобное API для создания необходимых команд и вывода информации при получении уведомлений на мобильное устройство. Например, о том, что доступен новый заказ для выполнения. При использовании мессенджера не нужно было проектировать и создавать новое приложение, поэтому для начала работы службы он был отличным решением. Отсутствие необходимости в регистрации – курьер и так уже был идентифицирован по номеру мобильного телефона.

Тем не менее, в перспективе от использования “Telegram” необходимо было отказываться.

У “Telegram” есть ограничение по количеству уведомлений, отправляемых за секунду, поэтому было невозможно отправлять сразу всем курьерам информацию о новом доступном заказе.

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

И главной причиной для поиска альтернативного решения была реальная возможность блокировки мессенджера на территории России.

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

2.3. Требования к разработке

Данное приложение должно предоставлять возможность пользователям [11]:

● просматривать ближайшие к ним по геолокации заказы и подробную информацию по каждому. Далее выбирать один из них для выполнения;

● просматривать информацию по выполняемым заказам и проводить операции с ними: отменить заказ или передать заказ другому курьеру, указать время прибытия к клиенту или оповестить клиента, что курьер не может с ним связаться;

● получить оповещение (например, о том, что через 30 минут курьеру нужно быть на указанном адресе, чтобы взять посылку);

● пополнить баланс для работы;

● просмотреть информацию о работе в «Ptichka».

Приложение должно состоять из ряда страниц:

● страница с доступными заказами;

● страница с активными заказами;

● страница с информацией о работе в «Ptichka»;

● страница с уведомлением для пользователя;

● страница с информацией о балансе пользователя.

В верхней части приложение должна быть расположена иконка, при нажатии на которую должно появится меню со списком всех страниц, представленных в приложении. При выборе одной из страниц в списке в меню, пользователь должен перенаправляться на нее [12].

На странице с доступными заказами должен выводится список заказов, которые может взять курьер. По каждому заказу должна предоставляться информация о [7]:

● адресах, по которым нужно доставить посылки;

● промежутках времени, в которые нужно забрать и доставить посылку;

● типе посылки;

● дополнительном поручение, если оно есть у заказа;

● комментарии от клиента, если оно есть у заказа;

● стоимости заказа.

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

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

В подробной форме заказа должна отображаться вся информация по заказу, кнопки для отказа или согласия на его выполнение и кнопка для открытия карты, на которой будут отображены адреса указанные в заказе [8].

Список заказов должен обновляется через нажатие на соответствующую кнопку, расположенную на страницы или при получении оповещения на мобильное устройство [6].

На странице с активными заказами должен выводиться список всех заказов, исполняемых в данный момент курьером.

При выборе одного из них пользователю должно предоставляться полное описание по заказу [6]:

● адреса, по которым нужно доставить посылки и номер телефона по каждому их них, на который нужно будет позвонить при прибытии;

● промежутки времени, в которые нужно забрать и доставить посылку;

● тип посылки;

● дополнительное поручение, если оно есть у заказа;

● комментарий от клиента, если оно есть у заказа;

● полное описание формирование стоимости заказа: оплата за саму доставку, надбавка за срочность, надбавка за дополнительное поручение, комиссия курьерской службы.

Для пользователя должны быть доступны кнопки, при нажатии на которые:

● пользователю откроется карта с адресами указанными в заказе;

● пользователь сможет уведомить клиента о том, в какое время он прибудет на адрес или о том, что он не может с ним связаться;

● пользователь сможет отказаться от выполнения заказа, если не может с ним справиться или отменить из-за некорректных данных, указанных в заказе.

На странице с информацией для работы должен выводиться список с информационными разделами. При нажатии на один из них пользователю должна предоставляется информация по нему [7].

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

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

На странице с уведомлением для пользователя должно отображаться сообщение, отправленное ему с сервера. Сообщение может содержать ссылку на один из информационных разделов, при нажатии на который пользователь должен перейти на страницу с соответствующей информацией по нему [7].

На странице с балансом должен отображаться текущий баланс пользователя и кнопки для его пополнения на разные суммы “50”, “150”, “300” и “500”. Также на странице должна быть кнопка, при нажатии на которую пользователю покажется история операция по его балансу: пополнения баланса и снятие с баланса по комиссии за заказы.

Перед регистраций пользователю должен быть представлен список городов для работы, в которых на данный момент реализована «Ptichka».

После выбора города пользователю должны быть представлены поля ввода для номера и согласия на обработку персональных данных [7].

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

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

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

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

Приложение должно предоставлять возможность определения геолокации пользователя и отправки ее на сервер.

Приложение должно иметь возможность взаимодействовать с веб- сервером путем отправления запросов к нему за информацией о:

● доступных пользователю заказах;

● выполняемых пользователем в данный момент заказах;

● завершенных заказах пользователем за последние 48 часов;

● текущем балансе пользователя;

● истории операций, проводимых с балансом пользователя;

● материалах, содержащих информацию о работе «Ptichka».

Передаваемая и получаемая информация должна быть представлена в формате JSON [9].

Для каждого запроса к веб-серверу в заголовке должен быть указан токен, полученный при регистрации пользователя.

Приложение должно иметь возможность получать push-уведомления от сервера, содержащие информацию о:

● новом доступном заказе;

● отмене клиентом заказа, который выполняет пользователь;

● уведомлении для пользователя.

Приложение должно быть доступно на:

● Android версии 4.4 или более поздней;

● IOS версии 9.0 или более поздней.

2.4. Выбор технологии для реализации приложения

Обязательным требованием при разработке приложения является кроссплатформенность. Соответственно, приложение должно быть доступно на платформах Android и IOS. Данное требование сильно усложняет разработку в короткие сроки и при отсутствии большой команды разработчиков:

● у каждой платформы есть свои ограничения и особенности в разработке, которые нужно учитывать при реализации функций приложения;

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

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

Возможные варианты реализации приложения:

● проектировать и реализовывать приложение для каждой платформы отдельно на нативных языках: Java для Android и Swift для IOS;

● использовать технологии, позволяющие писать один код для обеих платформ.

Создание приложения для каждой платформы отдельно имеет ряд плюсов:

● приложение будет оптимизировано: быстрый запуск и быстрая работа, а также малый размер установочного файла;

● при реализации можно будет использовать все возможности, предоставляемые платформой.

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

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

Данный подход позволяет

● экономить ресурсы, требуемые для получения знаний необходимых для реализации проекта, и время, затрачиваемое на его реализацию;

● переиспользовать написанный код;

● легко добавлять новый функционал и обновлять версии существующих приложений;

Среди таких технологий самыми популярными и развитыми являются Xamarin и React Native. Обе технологии являются фреймворками для разработки кроссплатформенных приложений и позволяют определять один пользовательский интерфейс и привязывать к нему единственную логику приложения для разных платформ [1].

При использовании Xamarin исходный код приложения пишется на языке C#. При использовании React Native исходный код реализуется на языке JavaScript.

В связи с наличием практического опыта разработки с использованием JavaScript и его технологий, и отсутствие такового в разработке с использованием C#, было принято решение реализовывать приложение при с использованием React Native.

React Native – это фреймворк для разработки кроссплатформенных приложений для IOS и Android от компании Facebook.

На протяжении всего периода разработки и поддержки проекта, с использованием этого фреймворка, разработчик работает с кодовой базой, написанной на JavaScript. При необходимости написанный код компилируется в нативные форматы: .apk для Android и .ipa для IOS, которые можно будет добавить в магазины: PlayMarket для Android и Appstore для IOS, где их смогут загрузить потенциальные пользователи.

Проектирование архитектуры приложения, описание классов, функций, методов реализуется основываясь на функционале и возможностях этого языка. React Native никак не ограничивает разработчика в использовании JavaScript – фреймворк лишь предоставляет элементы, которые могут быть скомпилированы в нативные и методы для работы с функциями мобильного устройства: получение геолокации, работа с камерой устройства, доступ к локальному хранилищу устройства и тд. [2].

Поэтому все преимущества работы с JavaScript, также доступны и в разработке мобильных приложений, используя React Native:

● JavaScript очень популярный язык: это единственный язык для разработки клиентский приложений и у него огромное сообщество разработчиков. Поэтому существует множество библиотек и готовых модулей, написанных другими разработчиками, которые находятся в открытом доступе и которые можно использовать в своем проекте;

● JavaScript имеет низкий порог вхождения: этот язык можно изучить в короткие сроки и сразу же начать писать код для решения реальных задач;

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

● для создания мобильных приложений разработчику не нужны будут знания и опыт в их разработке. Достаточно иметь опыт в разработке клиентский приложений с JavaScript. Соответственно, гораздо легче будет найти людей для разработки/поддержки проекта;

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

Как было описано ранее, использование React Native не накладывает никаких ограничений на структуру проекта и работу с JavaScript. Поэтому можно было использовать разные архитектурные подходы при реализации приложения.

При создании приложения было принято решение использовать Flux, как архитектурный подход. Такое решение было обосновано:

● наличием опыта работы с данным подходом ранее;

● популярностью Flux в сообществе разработчиков. Поэтому в большинстве примеров и обучающих материалах (в том числе по React Native) использовался именно он;

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

Flux-архитектура – архитектурный подход или набор шаблонов программирования для построения пользовательского интерфейса веб- приложений, сочетающийся с реактивным программированием и построенный на однонаправленных потоках данных [3].

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

Flux-архитектура состоит из трех компонентов:

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

● хранилище – объект, в котором хранятся все данные, используемые в приложении. Данные из хранилище можно считывать, но нельзя изменять напрямую. Для их изменения существуют действия, которые можно отправлять в хранилище из представлении и других модулей проекта. И уже в зависимости от типа действия и данных, указанных в нем, хранилище само определит, какие изменения нужно произвести с данными;

● действие – простой объект. На самом деле, может иметь любую структуру, но общепринято имеет два поля: поле, определяющее тип действия, и поле, хранящее данные для этого действия. Тип действия представляется строкой, в зависимости от типа будет вызван нужный обработчик в хранилище. Данные для действия представлены объектом с произвольной структурой.

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

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

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

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

Язык программирования JavaScript имеет динамическую типизацию: типы для всех переменных определяются уже во время выполнения программы [4]. Этой несет за собой большие недостатки при создании приложений на нем:

● во время разработки на динамически типизированных языках много времени уходит на решение ошибок связанных с неправильным обращением к данным. Например, вызов метода у объекта, у которых этих методов нет или передачей некорректных данных в функцию или метод класса [5];

● типы переменных, помимо того, что сразу указывают на ошибки при неверном обращении к данным, так же хорошо документируют код. Хорошо семантически названный класс или интерфейс позволяют быстро понимать назначение созданных объектов, что является очень полезным при работе над большим проектом или при работе в команде;

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

Ускорить работу JavaScript не предоставляется возможным, но возможность добавить статическую типизацию в процесс разработки приложения на нем есть. Существует ряд технологий, позволяющих реализовать статический контроль типов в языке JavaScript. Самыми популярными на данный момент является TypeScript от компании Microsoft и Flow от компании Facebook. Обе технологии являются статическими типизаторами кода и предоставляют набор синтаксических конструкций, для прямого указания типа переменной [6].

В связи с тем, что Flow существенно проще интегрировать в проект, чем TypeScript и то, что его разрабатывает та же компания, что и используемый при разработке фреймворк React Native, а из этого следует, что поддержка React Native у Flow лучше, чем у TypeScript, было принято использовать при разработке именного его.

Expo – это набор утилит, библиотек и сервисов, упрощающих разработку на React Native. Использование Expo при разработке мобильных приложений с React Native избавляет от решение некоторых технических вопросов, и также позволяет использовать дополнительный функционал при разработке и после создания приложения [7]:

● для компиляции JS-файлов в формат исполняемых файлов- приложений (.apk/.ipa) не будут требоваться инструменты для нативной разработки (такие как Xcode для IOS и Android Studio для Android). Компиляция JavaScript кода в исполняемые файлы будет происходить на сервере Expo. После завершения установочный файл можно будет загрузить с сервера на свой компьютер. Данное преимущество очень весомое, как минимум из-за того, что Xcode, который необходим для сборки приложений под IOS, может быть установлен только на устройствах с операционной системой MacOS;

● Expo предоставляет удобный интерфейс для отладки кода при его разработке. Все ошибки и логи можно выводить в консоль клиентского приложения от Expo или же в консоль браузера при отладке через него. Также предоставляется функционал для запуска разрабатываемого приложения на эмуляторах мобильных устройств или же на реальном мобильной устройстве при подключении к одной wifi сети;

● Expo предоставляет свой интерфейс для взаимодействия с возможностями устройства: камера, контакты, локальное хранилище данных и тд. Поэтому не нужно загружать различные отдельные библиотеки под эти задачи;

● еще одной особенностью Expo является обновление приложения, установленного на устройстве, в реальном времени: после сборки и публикации новой версии, все приложения, ранее установленные пользователями, будут обновлены. Это очень мощный функционал, он решает одну из главных проблем в мобильной разработке - совместимость между версиями. Без возможности обновления приложений в реальном времени, при выпуске новых версий для него всегда нужно реализовывать совместимость со старыми, так как пользователи не всегда сразу же обновляют установленные приложения [8].

3. Реализация мобильного приложения для курьерской службы доставки «Ptichka»

Архитектура приложения

Структура реализации архитектуры разработанного мобильного приложения изображена на рисунке 1.

Рисунок 1 – Структура разработанного приложения

В проектировании реализованного приложения использовался Flux в качестве архитектурного подхода, суть которого была описана ранее. Поэтому весь объем данных, используемых в приложении хранится в общем хранилище, которое представлено классом AppState. Хранилище содержит все сущности, используемые в приложении:

  • cities – города доступные для работы;
  • profile – данные пользователя;
  • location – геоданные пользователя;
  • activeOrders – выполняемые пользователем заказы;
  • availableOrder – доступные пользователя заказы;
  • balance – данные по балансу пользователя;
  • messagesFAQ – информационные материалы о работе;
  • notifications – системные уведомления для пользователя.

Для работы с API серверов был реализован соответствующий класс. Все запросы к API серверу осуществляются через протокол https. Метод loadCities загружает список городов обращаясь к базовому API серверу – московскому. Все остальные запросы отправляются к API серверу, соответствующему выбранному для работы городу – у каждого города есть свой API сервер.

Помимо обращения к API серверу данные на мобильное устройство могут прийти с push-уведомлением. В уведомлении содержится тип данных, чтобы на мобильном устройстве можно было понять, как их обработать, например orderPublished, и сами данные. Для работы с данными был реализован класс NotificationManager.

Приложения, написанные на React Native, не сохраняют своего состояния после выключения, поэтому при запуске приложения общее хранилище будет пустым. Преимущество такого поведения в том, что приложение будет занимать минимум памяти, необходимой для хранения данных на устройстве. Однако есть ряд данных, которые должны храниться на устройстве и быть доступными при запуске приложения без обращения к серверу. Например, токен для аутентификации, выбранный для работы город, данные пользователя и т.д. Для таких данных React Native предоставляет AsyncStorage – это хранилище, в которое можно добавлять, удалять и извлекать данные, но, в отличие от общего хранилища, данные в AsyncStorage будут сохранены после выключения приложения или телефона и будут доступны при следующем запуске. Для работы с AsyncStorage был реализован класс Storage.

Интерфейс пользователя реализован через классы представлений:

  • MesageForCourierView – страница с системным уведомлением для пользователя;
  • SelectCityView – страница со списком городов, доступных для работы;
  • ManageBalanceView – страница с управления балансом курьера: просмотр текущего баланса, пополнение баланса и просмотр списка операций с балансом;
  • PhoneConfirmationView – страница ввода номера при регистрации;
  • CodeConfirmationView – страница ввода кода подтверждения номера при регистрации;
  • FAQVIew – страница с информацией о работе;
  • AvailableOrdersView – страница со списком доступных заказов;
  • ActiveOrdersView – страница со списком выполняемых заказов.

Реализация приложения

Курьерская служба «Ptichka» распространена в нескольких городах. У каждого из городов есть свой API сервер. Соответственное, перед регистрацией, пользователю нужно будет выбрать город, в котором он будет работать (рисунок 2).

Рисунок 2 - Страница с выбором города для работы

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

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

Рисунок 3 – Страница для ввода номера телефона при регистрации

Далее он перенаправляется на страницу ввода кода подтверждения номера телефона, который пришел ему по смс (рисунок 4).

Рисунок 4 – Страница с для ввода кода подтверждения номера телефона

После ввода корректного кода подтверждения телефона пользователю нужно ввести свое имя и фамилию (рисунок 5).

Рисунок 5 – Страница для ввода имени и фамилии

После ввода имени и фамилии регистрация завершается, и пользователь перенаправляется на страницу с доступными заказами.

Страница с доступными заказами представлена кнопкой “Обновить список заказов” и списком с доступными заказами. При нажатии на кнопку “Обновить список заказов” на API сервер отправляются текущие геоданные пользователя и совершается запрос за данными о доступных для него заказах. Каждый из заказов размещен в списке в отдельном блоке (рисунок 6).

Изначально, при добавлении нового заказа в список, через обращение к API или при получении push-уведомления, данные по заказу отображены в короткой форме: отображены только первый и последний адреса, причем у адресов указано только близлежащая к ним станция метро, но не отображены дополнительное поручение и комментарий от клиента. При нажатии на кнопку “Нет” пользователь может убрать заказ из списка доступных, а при нажатии на кнопку “Подробнее” просмотреть всю информацию по заказу и открыть карту с пунктами назначения, указанными в нем (рисунок 7).

Рисунок 6 – Короткая форма отображения информации по доступному заказу

Рисунок 7 – Отображение подробной информации по доступному заказу

При нажатии на кнопку «Показать карту» пользователю отобразится карта, на которой отображено местоположение адресов, которые указаны в заказе (рисунок 8). Карта реализована при помощи API Google Maps.

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

Рисунок 8 – Карта с адресами, указанными в заказе

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

Рисунок 9 – Список активных заказов

При нажатии на один из элементов в списке пользователю отображается подробная информация по соответствующему заказу: адреса, которые нужно посетить, контактные данные к каждому из них и время к которому нужно забрать и доставить посылки (рисунок 10); тип посылки, описание дополнительного поручения и комментарий от клиента, если они указаны в заказе, а также полное описание составляющих цены заказа (рисунок 11).

Рисунок 10 – Список адресов у выполняемого заказа

Рисунок 11 – Информация по выполняемому заказу

Также на странице с подробной информацией по выполняемому заказу расположены кнопки (рисунок 12):

«Показать карту», при нажатии на которую пользователю откроется карта с адресами указанными в заказе (рисунок 8);

«Выехал» для уведомления клиента о том, в какое время курьер прибудет на адрес (рисунок 13);

«Клиент недоступен» для уведомления клиента о том, что курьер не может с ним связаться (рисунок 14).;

«Передать заказ» для отказа от выполнения заказа;

«Отменить заказ» для отмены из-за некорректных данных (рисунок 15).

После нажатия на одну из кнопок на API сервер отправляется POST запрос и далее через смс сообщение клиент будет оповещен о соответствующей информации или статус заказа будет изменен на доступный/отмененный.

Рисунок 12 – Пользовательские кнопки на странице описание выполняемого заказа

Рисунок 13 – Уведомление клиента о времени прибытия

Рисунок 14 – Уведомление клиента о том, что с ним не получается связаться

Рисунок 15 – Выбор причины отмена заказа

Заключение

Чтобы определиться, какой из инструментов выбрать, выделяют такие критерии сравнения, как:

1) платформа;

2) поддерживаемые языки программирования;

3) функциональные особенности;

4) стоимость.

Работа в курьерской службе доставки «Ptichka» подразумевает под собой доставку посылок по указанным клиентам адресам. Соответственно, для коммуникации с клиентами, управления выполняемыми заказами и получения новых, у работника должна быть возможность в любом месте и в любое время взаимодействовать с сервером службы для получения необходимой информации.

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

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

Список использованных источников

  1. Белов П.М. Основы алгоритмизации в информационных системах: Учебн. Пособие.- Спб.: СЗТУ, 2003. – 85с
  2. Войт Н. Н. Информатика и вычислительная техника. - Ульяновск: УлГТУ 2013. 362 с.
  3. Голощапов А. А. Google Android: программирование для мобильных устройств. - Спб.: БХВ - Петербург 2014. 163 с.
  4. Макаров В.Л. Программирование и основы алгоритмизации.: учебн. пособие.-Спб., СЗТУ, 2003, - 110с.
  5. Медникс З., Дорнин Л., Мик Б., Накамура М. Программирование под Android. – O’Reilly: Питер, 2013 – 559 с.
  6. Основы алгоритмизации и программирования : учебное пособие / Г. Р. Кадырова. – Ульяновск : УлГТУ, 2014. – 95 с
  7. Основы алгоритмизации и программирования: учеб. пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. гос.ун-та, 2011. – 56 с.
  8. Пискунова Н. В. Заработать миллионы с Iphone и Android пользователей. - М.: Финансы и статистика 2015. 162с.
  9. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. Казань: Изд-во Казанского национального исследовательского технического ун-та - КАИ, 2013, 153 с.
  10. Соколов В. В. Вычислительная техника и информационные технологии. Разработка мобильных приложений. Учебное пособие. - М.: Юрайт 2016. 176 с.
  11. Фадеев А.Ю., Волкова Е.А. Сравнительный анализ программного обеспечения для разработки мобильных приложений // Наука и перспективы. 2016. №3. URL: https://cyberleninka.ru/article/n/sravnitelnyy-analiz-programmnogo-obespecheniya-dlya-razrabotki-mobilnyh-prilozheniy (дата обращения: 03.02.2019).
  12. Цхошвили Д.З. О выборе инструментов для разработки мобильных приложений // Современные научные исследования и инновации. 2017. № 11 [Электронный ресурс]. URL: http://web.snauka.ru/issues/2017/11/84703 (дата обращения: 23.09.2018).