Поддержка дополнительных возможностей BlackBerry: пишем PhoneGap-плагин

IT-копирайтер
Время чтения: 5 минут
Когда вы разрабатываете приложение на PhoneGap, вы здорово экономите время, создавая ПО сразу для нескольких платформ. Но один из минусов этого фреймворка в том, что не все возможности мобильных ОС им поддерживаются. Частично эту проблему можно решить за счет плагинов PhoneGap, обеспечивающих поддержку определенных функций устройства, доступ к которым самим фреймворком не дается.
Мыслями о том, стоит или не стоит использовать PhoneGap, мы делились в статье о разработке приложений на js «PhoneGap, нативные приложения, гибридные. За чем будущее?», а сегодня поговорим, как написать собственный плагин для устройств BlackBerry.
Коротко о PhoneGap
PhoneGap — это бесплатный фреймворк, который позволяет создавать приложения для различных мобильных платформ: iOS, Android, BlackBerry, WebOS, Symbian, Windows Phone 7 и Bada — практически без изменений кода.
Для разработки используется HTML, JavaScript и CSS. То есть, вы пишете мобильное приложение как обычный сайт или веб-сервис. PhoneGap расширяет API браузера, добавляя возможность взаимодействовать с камерой, компасом, акселерометром, контактами, файлами, геолокацией, медиа, сетью, уведомлениями и хранением данных.
Плюсы PhoneGap
- Вы пишите один код для всех платформ.
- Вам не нужно знать Objective-C, Java или другие языки, потому как используете HTML, JavaScript и CSS.
- Приложения, написанные на PhoneGap, на всех платформах работают одинаково.
Минусы PhoneGap
- PhoneGap поддерживает не все возможности платформ. Поддержку определенной функции вы можете уточнить на сайте разработчика.
- Новые возможности платформ могут появится в PhoneGap не сразу или не появиться вообще.
- Приложения на разных платформах выглядят одинаково, не используют нативные контролы той или иной ОС.
Разработка BlackBerry-плагина для PhoneGap
Плагин PhoneGap — это связующее звено между WebView, в котором выполняется приложение, и нативными возможностями платформы. Плагин предоставляет JavaScript-интерфейс, общий для всех платформ, и для каждой платформы существуют различные реализации.
Здесь можно провести аналогию с интерфейсом и реализацией интерфейса (Java): файл с JavaScript является интерфейсом, в котором объявлены некоторые методы, а сами реализации этого интерфейса различны для различных платформ.
Чтобы создать BlackBerry-плагин, вам нужно:
- создать JavaScript-файл и объявить в нем переменные и функции, которые будут использоваться при непосредственном использовании плагина в PhoneGap
- создать Java-класс наследованный от класса org.apache.cordova.api.Plugin, реализовав метод public PluginResult execute(String action, JSONArray args, String callbackId)
Пример 1. Фрагмент кода JavaScript-файла.
AzcPush.prototype.registerDevice = function (url,port,appId) { cordova.exec(function(winParam) {}, function(error) {}, "AzcPush", "registerDevice", [ url,port,appId]); };
В этом примере объявлена функция registerDevice с тремя аргументами: url, port и appId. Она вызывает функцию cordova.exec.
Рассмотрим параметры подробнее:
- function(winParam) {} — это callback, который вызовется в случае успешного выполнения функции exec;
- function(error) {} — это callback, который вызовется в случае ошибки при выполнении функции exec;
- «AzcPush» — это название класса, к которому будет обращаться cordova;
- «registerDevice» — это название метода в классе AzcPush, который будет вызывать cordova;
- [url, port, appId] — это аргументы, которые будут переданы функции registerDevice.
Объявление плагина в файле plugins.xml:
<plugin name="azcPush" value="org.apache.cordova.plugins.azcpush.AzcPush"/>
Пример 2. Фрагмент кода Java-файла.
public class AzcPush extends Plugin { private final static String ACTION_REGISTER_DEVICE = "registerDevice"; private final static String TAG = "AzcPush: "; private String callbackId = null; public PluginResult execute(String action, JSONArray args, String callbackId) { PluginResult result; if (ACTION_REGISTER_DEVICE.equals(action)) { this.callbackId = callbackId; result = registerDevice(args); } else { result = new PluginResult(PluginResult.Status.INVALID_ACTION, TAG + "Invalid action: " + action); } return result; } private PluginResult registerDevice(JSONArray args) { return new PluginResult(PluginResult.Status.OK, ""); } }
Рассмотрим, как происходит взаимодействие между JavaScript и Java. При обращении из PhoneGap к функции window.plugins.AzcPush.registerDevice(«http://bb.com»,»2050″,»appId»),
происходит вызов функции registerDevice из JavaScript-файла, которая, в свою очередь, вызовет функцию cordova.exec с нужными аргументами. cordova попытается найти плагин с названием «AzcPush» по адресу org.apache.cordova.plugins.azcpush.AzcPush. В Java классе AzcPush вызывается метод execute.
Трудности при разработке BlackBerry-плагина
- Процесс компиляции и сборки проекта, а также подпись приложения происходят в командной строке и требуют некоторого времени, чтобы разобраться.
- При компиляции ошибки проверяются только в Java-файлах. Ошибки в HTML и JavaScript можно увидеть только при запуске приложения.
- Отсутствие удобного инструмента для отладки приложения.
Сложности, безусловно есть, но в некоторых случаях, когда приложение более целесообразно написать на PhoneGap, а нужная функция фреймворком не поддерживается, написание плагина может очень выручить.
Комментарии