Опыт разработки мобильных приложений

21 июня 2016 года

Как всё начиналось

В нашем подразделении компании «Прогноз» разработка мобильных приложений началась в 2010-2011 годах,. Несмотря на то, что первый действительно популярный смартфон – iPhone – вышел на рынок в 2007 году, основной переход на мобильную платформу среди бизнес-пользователей произошел с появлением именно iPad. Тогда стало понятно, что мобильные приложения могут предоставлять пользователям удобный доступ к большим объемам информации и конкурировать в этом даже с приложениями для настольных компьютеров.

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

Нашим первым крупным приложением стал WDI DataFinder. Приложение было выпущено сразу для трех мобильных платформ: iOS, Android и BlackBerry. Мы делали его для Всемирного банка, который собирает около 30 коллекций данных по разным отраслям и тематикам. И наше первое мобильное приложение предоставляло доступ к информации из этой коллекции. Долгое время это было наше флагманское решение, мы его обновляли каждый год. Разрабатывали на его базе для Всемирного банка тематические приложения с другими коллекциями данных.

Что было интересного в этой разработке для нас? Это был новый формат. Первые три с половиной года в этой сфере постоянно что-то менялось, появлялись новые типоразмеры устройств, гаджеты становились более производительными, с большим числом возможностей, с другим уровнем графики, с большим разрешением экранов. Стремительно менялся размер приложения, который можно было установить на устройство. В первые годы мы не знали, как разместить в приложении все данные. Например, в сборнике содержалось около 1500 индикаторов по разным странам, примерно 80% которых велись с 1960 года. Из этих индикаторов выделялось порядка 250 наиболее важных, которые банк хотел включить в приложение на постоянной основе, чтобы они были доступны. А 5 лет назад мобильный Интернет был ещё весьма дорог, скорость его невысока, а основной способ использования мобильного приложения за пределами офиса – это когда человек сидит где-нибудь в аэропорту или другом виде транспорта и пытается посмотреть данные. Понятно, что рассчитывать на качественный Интернет в таком случае было бессмысленно.

Поэтому стояла задача включить эти 250 индикаторов в основной установочный файл приложения. Тогда существовал весьма жесткий лимит на объем установочного файла, да и объемы памяти мобильных устройств были на порядки меньше, чем у компьютеров, и нам приходилось придумывать свои полукустарные решения. Например, мы создавали собственный бинарный файл, в котором данные помещали так, как они хранятся в памяти компьютера: по 4 байта на одно значение. Расположение каждой такой ячейки данных определялось как произведение порядкового номера страны на число индикаторов плюс номер индикатора. В общем, почти как на уроках информатики в школе. Но это работало. Сейчас, конечно, нет такой необходимости, потому что и объем памяти увеличился, и для мобильных платформ стали доступны более технологичные средства.

Да здравствует революция!

Сейчас разрабатывать приложения стало намного проще. Что касается самих мобильных операционных систем, то здесь четко обозначились два лидера: iOS и Android (BlackBerry перешла на прямую поддержку Android-приложений, Windows Phone так и не смогла снискать большой популярности).

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

Оборотной стороной такой заботы о пользователе является практически полная закрытость системы. Android же изначально был открытой системой, которую любые производители мобильных устройств могли использовать в своей продукции бесплатно. Ограничений на установку различных приложений и на используемую аппаратную начинку тоже почти не было. Но и сама компания Google, которая продвигала Android, не снабжала первые версии ОС красивой графической оболочкой. Для разработки предлагалось использовать распространяемые бесплатно инструменты разработки, устанавливая в них только некоторые дополнительные модули Google. Тем не менее, если сравнить современные устройства и среды разработки для обеих этих платформ с тем, что было ещё 5 лет назад, то очевидно, что произошла революция как в дизайне пользовательского интерфейса, возможностях устройств, так и в разработке.

В начале нашей работы была версия Android 2.х. Она изначально была рассчитана только на телефоны, т.к. массового планшета еще не существовало. Потом, когда Apple выпустила коммерчески успешные планшеты, производители Android-устройств тоже стали создавать планшеты на Android. Эта ОС не была ограничена по размеру экрана, и в принципе работала, но становилось всё более очевидно, что система не отвечает современным требованиям к поддержке новых аппаратных решений и уступает iOS по красочности интерфейса.

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

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

Раскрываем карты

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

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

Сначала карта была просто жестко фиксированная внутри экрана. Для того чтобы приблизить какой-нибудь регион мира, пользователь выбирал этот регион в меню, и карта полностью перестраивалась. Постепенно с ростом производительности устройств и появлением на них реализации Open GL стало возможным сделать приближение/удаление регионов т.н. «щипками», а перемещение карты внутри экрана – жестами скроллирования.

Также в создании карты приняли участие и дизайнеры «Прогноза», которые подготовили нам топооснову в формате SVG. Но эта топооснова была сделана для web-порталов и отображалась на настольных компьютерах. Она содержала множество деталей, которые были бы не видны на маленьком экране устройства. Нам пришлось самим упрощать карту. Число точек на ней было сокращено в разы, были удалены все кривые, т.к. они очень медленно рисуются на слабых устройствах. В итоге пришлось осваивать много смежных профессий: погружаться в типы картографических проекций, основы рисования в графических редакторах, форматы файлов с векторной графикой и т.д.

 

Все растет, все изменяется

Производительность последнего iPad выше, чем у первого, в 630 раз (так заявил сам Apple). iPad первого поколения уже не поддерживается даже самой Apple, поддержка идет со второго iPad. Мы тоже стараемся писать приложения, чтобы они работали на iPad второго поколения, хотя разница в производительности между вторым и четвертым поколением – раз в 30 по каким-то операциям.

При этом само четвертое поколение уже выглядит «дедушкой» современного iPad. Сейчас для Android мы можем создавать приложения размером до 100 Мбайт. А раньше ограничение на размер приложения было 16 Мбайт. Хотя и сейчас, и раньше можно было делать «прицепные вагончики», два файла по размерам до 1 Гбайт, но это было не очень удобно с точки зрения разработки, да и размещать в них можно только ресурсы, а не код.

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

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

Восток – дело тонкое

Недавно мы завершили разработку ряда приложений для арабских стран. Их специфика в том, что в них мы добавляем поддержку right to left (поскольку они читают справа налево). Это усложняет разработку, но не добавляет интересности самому приложению: это просто специфика языка, данные те же самые.

Все приложения берут данные из определенного источника: некоторые заказчики нам присылает данные в Excel или в Access. У более продвинутых в информационном плане заказчиков есть онлайн-сервисы, которые имеют свой API (прикладной интерфейс). В нем можно отправлять запрос (например, указывать интересующие нас страны, индикатор, источник) и получать в ответ данные. Чтобы мобильное приложение предоставляло всегда свежие данные, важны две вещи – API back end, который возвращает ответ, и собственно мобильное приложение, которое его быстро визуализирует.

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

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

У ОАЭ своя специфика. Если посмотреть их приложения, созданные, к сожалению, не нами, то это больше приложения для рекламы достижений страны в области производства продуктов разных секторов экономики. Например, у них есть приложение по производству пищевой продукции, оно выглядит как детское: это карта, на которой нарисовано мясо, хлеб, иные продукты и указаны объемы их производства. Они используют эту разработку как средство коммуникации с широким кругом населения. Они понимают, что iPad, мобильные приложения – это не только бизнес-аналитика, это в большей степени массовый продукт, его нужно сделать красивым и , привлекательным. С его помощью можно популяризировать информацию о своих достижениях. Всемирный банк это тоже понимает. Поэтому мы не добавляем каких-то сложных функций типа анализа временных рядов, чтобы не отпугнуть неподготовленного пользователя.

 

С экономической пользой

Одна из основных функций, которая всегда вызывала наибольший интерес заказчика, – функция экспорта. Есть т.н. функция share, раньше она позволяла «отправить-поделиться» в Facebook, Twitter. Потом в системах появился универсальный экспорт: теперь мы просто выбираем, как мы хотим экспортировать данные – как csv-файл (если хотим где-то использовать сами цифры), либо как html, либо просто одну картинку, либо серию картинок. Дальше операционная система сама предлагает все приложения, которые способны «переварить» такой контент и разместить у себя, и предлагает пользователю эти приложения на выбор: те же Facebook, Twitter плюс любые другие соцсети и приложения, установленные на устройстве. В дальнейшем пост или иное послание в каждом таком приложении генерируются автоматически.

DataFinder – это больше имиджевый проект, для популяризации данных Всемирного банка. Но в любом случае он имеет экономическую пользу. Скажем, в отчете Всемирного банка World Development Indicators, который лег в основу приложения, много разделов. Раньше банк публиковал бумажный отчет каждый год. Это требовало много бумаги, расходов на доставку и т.д. Сейчас этот отчет в виде pdf включен в наше приложение и в ещё одно отдельное приложение.

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

Также мы делали мобильное приложение для ЕЦБ, где используются очень сложные коллекции данных. Например, в дата-сете есть 8 измерений: страна, единица измерения и т.д. Чтобы облегчить человеку работу, мы сделали автозаполнение: если в измерении остается всего 1 элемент после того, как выставлена отметка в каких-то других измерениях, то автоматически ставится галочка на этом элементе, чтобы человек не кликал её вручную.

Кстати, о цифрах…

Если посмотреть статистику установки разработанного «Прогнозом» для Всемирного банка приложения DataFinder, то первые места занимают США, Великобритания, Австралия (они обычно составляют до 50% от всех установивших приложение, причем 80% из них – это пользователи из США). Это связано с тем, что данным инструментом в основном пользуются сотрудники самого Всемирного банка при проведении своих внутренних конференций, совещаний, презентаций, отчетов. Россия по числу установок находится на 13-м месте.

Есть интересная зависимость от того, какая коллекция индикаторов Всемирного Банка в какой стране пользуется популярностью. В России очень много установок сборника Education Statistics, здесь мы выходим на 3-е место в мире. И по климату Россия тоже на 4-м месте по числу загрузок. Возможно, это связано с тем, что само приложение больше известно в академической, учебной среде, и её представителям интереснее прежде всего информация о себе. Такие темы, как работа, бедность, гендерные данные россиян не слишком интересуют, там у нас 15-24 места. США везде на 1-м месте. Очень много установок на испанском языке. Например, по приложению LAC Macrostats испанский язык занимал высокое место, поскольку в приложении содержалась статистика по латиноамериканским странам и 20 крупнейшим странам мира. Позже приложение было перевыпущено с коллекцией по всем странам мира.

Статистика по соотношению между платформами: обычно на iOS ставится как минимум вдвое больше приложений, чем на Android. Единственное наше приложение, которое устанавливали поровну и на Android и на iOS, это LAC Macrostats. Возможно, это связано с тем, что латиноамериканское население не очень богатое и там популярна платформа Android. Для России iOS – дорогая платформа, у нас также больше распространен Android, хотя число российских установок на iOS-платформу всё равно вдвое выше, чем на Android.

 

И про языки: Всемирный банк – организация, существующая при ООН, у которой есть 6 официальных языков: английский, французский, испанский, русский, арабский и китайский. Мировые показатели развития пока публикуются только на 4 языках, нет русской и арабской версии. Но в 2015 году мы впервые выпустили приложение, которое содержит все 6 языков. Это было приложение для Всемирной организации здравоохранения NCD Data Finder, посвящённое неинфекционным заболеваниям.

Антон Суслопаров, эксперт компании «Прогноз»
IT-Weekly