插件開發指南
一個插件就是一個注入的軟體包,當軟體運作的時候,它允許應用程式與本機代碼進行通信。插件提供了一種通路那些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