Что представляет из себя Cordova и PhoneGap?

После того как мы разработали фреймворк Ionic, нас завалили вопросами о Cordova и PhoneGap. Вопросы были разными, начиная с путаницы с названиями ("а Cordova и PhoneGap - это одно и то же?"), заканчивая непониманием назначения и возможностей данных фреймворков.

Экскурс в историю

PhoneGap появился примерно в 2009 году в рамках стартапа под названием Nitobi. Этот фреймворк имеет открытый исходный код и обеспечивает доступ к собственной среде разработки через встроенный в нативное приложение компонент Android-платформы Web View. Цель PhoneGap – обеспечить условия для создания мобильного приложения, пользуясь чистыми веб-технологиями, такими как HTML5, CSS и JavaScript. Одновременно с этим у разработчика должна была оставаться возможность использования (при необходимости) нативного кода.

В 2011 году компания Adobe выкупила Nitobi вместе с правами на бренд PhoneGap. С тех пор PhoneGap стал называться Cordova. Проект был передан в руки  Apache Software Foundation .

Новое название, новое развитие

В чем разница между Cordova и PhoneGap? Adobe приводит такую аналогию: для PhoneGap Cordova - это как  Blink  для Chrome. По сути PhoneGap - это Cordova плюс надстройка от Adobe.

Сначала различия между Cordova и PhoneGap были минимальными. Но компания Adobe, как всегда, добавила в экосистему PhoneGap свои собственные сервисы. Отсюда и возник сервис PhoneGap Build.

Итак, когда вы приступаете к разработке нового гибридного приложения, у вас есть выбор: собственно Cordova, или же PhoneGap (что, в принципе, тоже будет Cordova, но с привязками к сервисам Adobe).

Примечание: в Ionic используется Cordova в чистом виде, а вот PhoneGap не используется совсем (хотя такая возможность существует).

Скрытый потенциал

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

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

Поэтому когда кто-то говорит о том, что Cordova не может делать то, что могут делать другие нативные приложения, это ошибочное суждение. Единственным ограничением может быть отсутствие необходимых плагинов, а также ваша заинтересованность (или возможность) в создании тех плагинов, которые нужны вам для конкретного приложения.

Отчасти - технология, отчасти - мечта

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

Adobe всегда делает акцент на том, что основная цель Cordova - это сделать себя неактуальной. То есть, функции API из состава Cordova могут быть реализованы разработчиками браузеров с помощью своих собственных кодов. И Cordova останется не у дел.

Возьмем, к примеру, Geolocation API. Функция GPS на мобильном устройстве стала популярной благодаря iPhone, а мобильные браузеры геолокацию начали поддерживать некоторое время спустя. У Cordova для этого был своего рода "мост" в виде navigator.geolocation JavaScript API. Затем данная функция превратилась в стандартную и для мобильных браузеров. Когда это возможно, Cordova использует нативное браузерное решение, а когда невозможно - предоставляет своеобразный "мост".

Сегодня то же самое явление можно проследить на примере navigator.camera API. Это очень простой API для получения изображения с камеры устройства. Можно ожидать, что в будущем данная функция станет для браузеров стандартной.

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

Является ли Cordova универсальным решением?

Лично я с таким мнением не согласен. Конечно, мы должны улучшать функциональность браузера, внедряя новые API. Но мы также должны дать возможность разработчикам создавать кастомные и совершенно уникальные гибридные приложения. А для этого в составе Cordova нам нужно больше стандартных плагинов из разряда "native-to-browser" и большее количество API.

В этом разница между реально существующим navigator.camera.getPicture() API и теоретически существующим navigator.camera.getPhotos(start, count, size)API. С первым можно лишь снять одно единственное фото: жестко запрограммированный UI не позволит управлять процессом съемки. Второй API не имеет таких жестких ограничений, он лишь направляет поток данных с нативного слоя в ваш JavaScript.

К счастью, у Cordova есть очень качественный API для плагинов. Нам нужно больше хороших плагинов, которые будут предоставлять необходимые данные из нативного слоя. Тем самым ограничения UI перестанут быть проблемой. Дефолтные плагины очень простые, они не совсем подходят, если вы хотите создать что-то по-настоящему "кастомное" (вроде приложения Instagram).

И здесь открывается широкое поле деятельности для Ionic.

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

Выводы

Итак, подведем итог всему вышесказанному. Cordova - это поддерживаемая сообществом разработчиков версия PhoneGap. Компания Adobe создала для этой версии свою экосистему и выпустила ее на рынок. В качестве инструментария Ionic использует Cordova, а не PhoneGap.

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

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

И еще. Cordova - замечательная вещь, нам, в Ionic, она очень нравится!

Комментарии