Plugin Development Guide
A Cordova plugin bridges a bit of functionality between the WebView powering a Cordova application and the native platform the Cordova application is running on. Plugins are composed of a single JavaScript interface used across all platforms, and native implementations following platform-specific Plugin interfaces that the JavaScript calls into. All of the core Cordova APIs are implemented using this architecture.
This guide steps the process of writing a simple Echo Plugin that passes a string from JavaScript and sends it into the native environment for the supported platforms. The native code then returns the same string back to the callbacks inside the plugin's JavaScript.
This guide provides enough overview on which you can build to write more complex plugins.
JavaScript
The entry point for any plugin is JavaScript. The reason developers use Cordova is so they can use and write JavaScript, not Objective-C, not Java, not C#. The JavaScript interface for your plugin is the front-facing and arguably most important part of your Cordova plugin.
You can structure your plugin's JavaScript however you like. The one
thing you must use to communicate between the Cordova JavaScript
and native environments is the cordova.exec
function. Here is an example:
cordova.exec(function(winParam) {}, function(error) {}, "service",
"action", ["firstArgument", "secondArgument", 42,
false]);
The parameters are detailed below:
-
function(winParam) {}
: Success function callback. Assuming yourexec
call completes successfully, this function is invoked (optionally with any parameters you pass back to it). -
function(error) {}
: Error function callback. If the operation does not complete successfully, this function is invoked (optionally with an error parameter). -
"service"
: The service name to call into on the native side. This is mapped to a native class, about which more information is available in the native guides listed below. -
"action"
: The action name to call into. This is picked up by the native class receiving theexec
call, and, depending on the platform, essentially maps to a class's method. The native guides listed below provide details. -
[/* arguments */]
: Arguments to pass into the native environment.
Echo Plugin JavaScript Example
window.echo = function(str, callback) {
cordova.exec(callback, function(err) {
callback('Nothing to echo.');
}, "Echo", "echo", [str]);
};
Let's dive into this. The plugin attaches itself to window
,
specifically to the echo
function. Plugin users would then use it as
follows:
window.echo("echome", function(echoValue) {
alert(echoValue == "echome"); // should alert true.
});
First, let's take a look at the last three arguments to the exec
function. We will be calling the Echo
"service", requesting the echo
"action", and passing an array of arguments containing the echo string,
which is the first parameter into the window.echo
function.
The success callback passed into exec
is simply a reference to the
callback function that window.echo
takes. We do a bit more for the
error callback: if the native side fires off the error callback, we
simply invoke the success callback and pass into it a "default"
string.
Plugin Specification
Cordova has a plugin specification available to enable automated
installation of the plugin for Android, iOS, BlackBerry 10 and Windows
Phone platforms. By structuring your plugin in a particular way and
adding a plugin.xml
manifest file, you can enable users to install
your plugin via the command-line tooling.
Native
Once you define JavaScript for your plugin, you need to complement it with at least one native implementation. Details to do so for each platform are listed below. These guides continue to build on the simple Echo Plugin example discussed above.
The Tizen platform currently does not support plugins.
Publishing plugins
Once you developed your plugin, you might want to publish it and share it with the community. You can publish your plugin to the cordova registry (based on npmjs) or to any other npmjs based registry. Users will be able to install it automatically using either plugman or cordova-cli.
To publish a plugin you need to use the plugman tool and go through the following steps:
$ plugman adduser # that is if you don't have an account yet
$ plugman publish /path/to/your/plugin
That is it!
Other registry-based commands are available and plugman --help
will give you a list of what commands are available and how to use them.