天天看點

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

繼續閱讀