Статьи

Создайте гибридное мобильное приложение с Android

Мы начнем с базового проекта Android и покажем, как добавить гибридные компоненты, которые можно внедрить в любое существующее приложение для Android! Для видео-версии этого урока прокрутите страницу вниз.

В гибридном приложении есть два основных компонента: нативный код (платформы Java и Android), а также веб-код (HTML / CSS / JavaScript). Мы сосредоточимся на аспектах Android и рассмотрим, что нужно сделать обеим сторонам, чтобы беспрепятственно общаться друг с другом.

Чтобы узнать немного больше о том, что означает Гибрид, посмотрите этот пост в блоге и видео .

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

Давайте начнем!

гибридно-демонстрационной и-1

Android

Как минимум, нам нужна встроенная оболочка для хранения веб-части нашего приложения. Наша демонстрационная версия будет примерно 30/70 веб / нативная, поэтому нам нужно выполнить некоторые настройки и нативную реализацию. Тем не менее, имейте в виду, что вы можете сделать свое приложение любой комбинацией веб / родной — все зависит от вас и вашего варианта использования!

Получить код

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

Настройте проект Android

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

Добавление веб-вида

Откройте файл res / layout / frag_shop.xml в любом редакторе. Введите код ниже в теге RelativeLayout:

<WebView
android:id="@+id/shop_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />

Код прост и создает полноэкранный WebView в своем контейнере. Обратите внимание на определение android: id , которое мы будем использовать для привязки этого элемента пользовательского интерфейса в нашем коде.

гибридно-демонстрационной и 2-

Настройка WebView в коде

Далее мы закончим настройку WebView, отредактировав файл ShopFragment.java . В методе onCreateView вставьте следующий код в Placeholder 1 :

mWebView = (WebView) rootView.findViewById(R.id.shop_webview);

Это связывает переменную класса mWebView с элементом пользовательского интерфейса, который мы только что создали в нашем макете. Теперь, когда мы можем получить доступ к WebView из кода, мы можем загрузить в него URL. Для этого введите следующий код в Placeholder 2 :

mWebView.loadUrl(APIRequest.BASE_URL);

Если вы проверяете APIRequest.BASE_URL , вы заметите веб-URL — это URL-адрес, который будет загружен в наш WebView, но вы также можете проверить его в своем браузере на рабочем столе.

Запустите приложение, чтобы увидеть, что мы имеем до сих пор. Обойдите продукты и перепрыгните, чтобы просмотреть корзину. Вы заметите, что кнопки «Добавить в корзину» не совсем работают, но мы вернемся к этому позже

Web

В этой демонстрации веб-компонент отображает все продукты в интерфейсе с возможностью просмотра. Проект построен на веб-фреймворке Django в Python, а внешний интерфейс построен на HTML / CSS и Javascript. Также есть несколько API, все они созданы для демонстрационных целей, поэтому они максимально упрощены. Имейте в виду, что вы можете использовать веб-фреймворки по вашему выбору, мы просто выбрали Django и стандартный JavaScript.

Получить код

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

Примечание . Веб-код находится в другом хранилище, чем упомянутый ранее нативный код.

Запустите его локально

Если вы хотите запустить веб-код локально, вы, безусловно, можете! Ознакомьтесь с документацией по Django, чтобы узнать немного больше и установить все на своем локальном компьютере.

Мы развернули этот демонстрационный код в Heroku по адресу http://critterretail.herokuapp.com/ . Вы можете изменить URL-адрес, используемый проектом в APIRequest.java, в переменной BASE_URL, если вы хотите указать его для своего собственного экземпляра.

Примечание. Если вы используете сервер локально в эмуляторе Genymotion, обязательно используйте BASE_URL по адресу http://10.0.3.2:8000/.

Соединение Сети и Android

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

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

гибридно-демонстрационной и 3-

На веб-стороне

В веб-коде, если вы откроете critterretail / templates / index.html, вы увидите ссылку в строке 36-37. Это ключ к общению с приложением Android:

<a class="btn btn-success" style="width:100%;"
href="apprequest://addtocart#{{p.productJSON}}">Add to Cart</a>

Когда вы нажимаете на ссылку, происходит перенаправление на URL, который выглядит следующим образом:

apprequest://addtocart#{'productID':4}

JSON визуализируется кодом Python и зависит от того, какая кнопка была нажата, что делает этот запрос динамическим.

Вы заметите, что URL — это не запрос http: //, а apprequest: // , и для этого есть веская причина. Давайте вернемся к коду Android, чтобы собрать все вместе.

На стороне Android

Откройте ShopFragment.java и перейдите к методу onCreateView . Вы найдете невыполненный WebViewClient . Замените Placeholder 3 кодом, показанным ниже:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

// Example request apprequest://addtocart#{'itemID':1}
if (url.startsWith("apprequest://")) {
Uri uri = Uri.parse(url);

// example host == apprequest
String command = uri.getHost();

// example fragment == {'itemID':1}
String jsonString = uri.getFragment();

try {
// parse the fragment and handle the full request
JSONObject json = new JSONObject(jsonString);
handleRequest(command, json);
} catch (JSONException e) {
Crittercism.logHandledException(e);
}

return true;
}
return false;
}

Здесь много чего происходит, но метод, который мы переопределяем, вызывается каждый раз, когда URL собирается загрузить в WebView. Перехватывая это, мы можем искать пользовательские запросы (то есть запросы, которые начинаются с apprequest: // вместо http: // ) и обрабатывать их отдельно.

Прочитав комментарии к коду, вы можете заметить, как анализируется URL-адрес и как создавать свои собственные пользовательские запросы на веб-стороне. Прокрутите вверх, чтобы просмотреть метод handleRequest для изменения или добавления новых команд!

Запустите приложение еще раз и добавьте товар в корзину, и это работает! Веб-приложение в WebView успешно взаимодействует с кодом в собственном представлении.

гибридно-демонстрационной и 4-

Кроссплатформенный мониторинг производительности

Отслеживание проблем достаточно сложно на одной платформе, но как только вы задействуете несколько платформ в одном приложении, будет очень сложно определить узкие места в производительности вашего приложения. К счастью, решение Crittercism App Intelligence обеспечивает понимание как веб-страниц, так и нативных сторон вашего приложения, и оно уже реализовано в демоверсии!

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

Завершение

С помощью этого руководства вы можете взять существующее приложение для Android и добавить в него гибридные компоненты. Благодаря возможности обмениваться данными между веб-сайтами и нативными платформами, вы можете создавать самые разные варианты использования — так что начинайте и начинайте строить!

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