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

Виктор Котов

Виктор Котов

IT-копирайтер

#Мобильная разработка

18 Июн 2013

Время чтения: 5 минут

18 Июн 2013

Когда вы разрабатываете приложение на 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, а нужная функция фреймворком не поддерживается, написание плагина может очень выручить.

Комментарии

Фильтр

Закрыть

Технологии

Индустрии