天天看点

PhoneGap 12 插件开发指南

插件开发指南

一个插件就是一个注入的软件包,当软件运行的时候,它允许应用程序与本机代码进行通信。插件提供了一种访问那些web应用程序访问不了的设备及平台功能,所有的Cordova API都是通过插件实现的,如条码扫描、NFC进场通信或者定制日历。

插件包含一个能够与特定平台的本地代码通信的接口,这一部分以一个简单echo插件为例进行讲解,它包含一个echo函数,需要从javascript里面接收一个string参数,并返回该string参数给javascript调用者,可以使用该实例建立自己非常复杂的插件。该节讨论了插件的基本结构以及外部的javascript接口。

除了这些指示之外,当要写插件的时候,最好写看看已经存在的插件库。

编译一个插件

应用程序开发者使用 CLI 的 plugin add命令去向项目增加一个插件,该命令的参数是一个包含该插件代码库的URL地址,下面例子是一个实现了Cordova的设备API的插件:

$ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
           

注意,插件代码库的顶层目录中必须包含plugin.xml文件,有许多方式可以去配置该文件,详细参考 PhoneGap 13 插件配置标准 ,设备插件这个简单例子的版本提供了一个模型:

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
            id="org.apache.cordova.device" version="0.2.3">
        <name>Device</name>
        <description>Cordova Device Plugin</description>
        <license>Apache 2.0</license>
        <keywords>cordova,device</keywords>
        <js-module src="www/device.js" name="device">
            <clobbers target="device" />
        </js-module>
        <platform name="ios">
            <config-file target="config.xml" parent="/*">
                <feature name="Device">
                    <param name="ios-package" value="CDVDevice"/>
                </feature>
            </config-file>
            <header-file src="src/ios/CDVDevice.h" />
            <source-file src="src/ios/CDVDevice.m" />
        </platform>
    </plugin>
           

验证插件

可以使用plugman工具去检查插件在每一个平台是是否安装成功,安装plugman的代码为:

$ npm install -g plugman
           

你需要一个有效的app源文件目录,确保index.html home页面引用了插件的javascript接口名称,如果是在同一目录下面:

<script src="myplugin.js"></script>
           

运行下面的代码去测试IOS中的依赖插件是否正确载入:

关于plugman的详细内容,请参考:PhoneGap 09 使用Plugman管理Plugins

javascript接口

javascript提供了一个前置接口,它是插件最重要的组成部分。你可以按你喜欢的方式去组织你的插件,但是你需要调用cordova.call()去与本地平台通信,使用下面打代码形式:

cordova.exec(function(winParam) {},
                 function(error) {},
                 "service",
                 "action",
                 ["firstArgument", "secondArgument", 42, false]);
           

这些参数是怎么工作的,如下解释:

  • function(winParam){}: 成功的回调函数;假定exec()函数调用成功的完成了,该函数会被调用,同时可以传递需要的参数到这个函数;
  • function(error){}:像上面一样,不过是失败的时候的回调函数;
  • service:调用本地平台的服务名称;
  • action:调用本地平台的行为,一般代表的就是插件的函数名称;
  • []: 传递给本地环境的参数数组。

javascript例子

本例子展示了实现javascript接口的一种方式:

window.echo = function(str, callback) {
        cordova.exec(callback, function(err) {
            callback('Nothing to echo.');
        }, "Echo", "echo", [str]);
    };
           

在这个例子中,插件将自己关联到window对象上,作为window对象的echo函数,插件将会像下面一样被调用:

window.echo("echome", function(echoValue) {
        alert(echoValue == "echome"); // should alert true.
    });
           

看传递给cordova.exec函数的最后三个参数,第一个代表调用Echo服务,是一个类名;第二个请求一个echo行为,在前面类下面的一个方法;第三个参数是一个echo的字符串,它是window.echo的第一个参数。

成功的回调函数是一个回调函数的银行;如果失败了,通常都是直接传递成功回调函数一个默认的参数值。

本地接口

一旦你定义了你的javascript接口,你必须至少需要一个本地实现。详细信息可以参考下面的:

  • Amazon Fire OS Plugins
  • PhoneGap 08 Android 插件介绍
  • iOS Plugins
  • BlackBerry 10 Plugins
  • Windows Phone Plugins

Tizen平台暂时不支持插件

发布插件

一旦开发完成你的插件,你可能想要将其发布到社区与别人进行分享。你可以发布你的插件到cordova注册表(基于npmjs*)或者发布到任何基于npmjs的注册表里。其他的开发者可以自动安装这个插件,通过CLI工具或者plugman工具;

为了发布你的插件,需要进行下面的步骤:

$ plugman adduser # that is if you don't have an account yet
$ plugman publish /path/to/your/plugin
           

原文链接:Plugin Development Guide

继续阅读