Cordova自定義插件的開發(fā)

在Cordova項目的開發(fā)過程中智厌,一些功能通過Web端的技術(shù)很難/無法實現(xiàn)挡篓,此時需要借助Cordova插件來調(diào)用Native代碼實現(xiàn)偎蘸。Cordova為我們提供了豐富的插件庫篡殷,實現(xiàn)了諸如獲取設(shè)備信息,獲取通訊錄藻治,設(shè)置設(shè)備狀態(tài)欄等基本功能碘勉。但有時我們?nèi)孕鑼崿F(xiàn)自定義的插件以滿足項目需要,下面以iOS為例介紹其開發(fā)過程桩卵。

1. 創(chuàng)建Git倉庫管理插件

在Github或是其他Git服務(wù)器上創(chuàng)建一個倉庫:
https://github.com/easyfisher/easter-plugin-demo.git

2. 插件定義

在根目錄下添加plugin.xml以定義一個插件验靡。其中id是插件的唯一標識,安裝插件時如果項目中有相同id的會被覆蓋雏节。

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://easter.com/mobile/plugins/1.0"
        id="easter-plugin-demo" version="1.0.0">
    <name>Demo</name>
    <description>Easter Plugin Demo</description>
    <license>Easter</license>
    <keywords>easter,demo</keywords>
</plugin>

3. JS接口實現(xiàn)

在plugin.xml中增加接口定義胜嗓。下面js-module中的內(nèi)容將www/Demo.js中實現(xiàn)的module導出為可全局訪問的變量easter.demoPlugin。

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://easter.com/mobile/plugins/1.0"
        id="easter-plugin-demo" version="1.0.0">
    <name>Demo</name>
    <description>Easter Plugin Demo</description>
    <license>Easter</license>
    <keywords>easter,demo</keywords>

    <js-module src="www/Demo.js" name="Demo">
        <clobbers target="easter.demoPlugin" />
    </js-module>
</plugin>

接下來我們實現(xiàn)www/Demo.js钩乍。其中提供了greeting方法用于向Native代碼傳遞消息辞州。

var exec = require('cordova/exec');

var Demo = {};

Demo.greet = function(message, success, failure) {
  exec(success, failure, "Demo", "greet", [message]);
}

module.exports = Demo;

4.Native代碼實現(xiàn)

在plugin.xml中添加Native相關(guān)配置。其中feature定義了ESDemo類作為消息入口寥粹。

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://easter.com/mobile/plugins/1.0"
        id="easter-plugin-demo" version="1.0.0">
    <name>Demo</name>
    <description>Easter Plugin Demo</description>
    <license>Easter</license>
    <keywords>easter,demo</keywords>

    <js-module src="www/Demo.js" name="Demo">
        <clobbers target="easter.demoPlugin" />
    </js-module>

    <platform name="ios">
        <config-file target="config.xml" parent="/*">
            <feature name="Demo">
                <param name="ios-package" value="ESDemo"/>
            </feature>
        </config-file>

        <header-file src="src/ios/ESDemo.h" />
        <source-file src="src/ios/ESDemo.m" />
    </platform>
</plugin>

下面實現(xiàn)ESDemo類变过。greet方法接收JS端傳來的greet消息并在屏幕上顯示一個提示框。至此我們就可以調(diào)用其他的本地代碼以實現(xiàn)項目需要涝涤。

ESDemo.h

#import <Cordova/CDVPlugin.h>

@interface ESDemo : CDVPlugin

- (void)greet:(CDVInvokedUrlCommand*)command;

@end

ESDemo.m

#import "ESDemo.h"
#import <Cordova/CDVPlugin.h>


@implementation ESDemo

- (void)greet:(CDVInvokedUrlCommand*)command {
    NSString *message = command.arguments[0];
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
    [alertController addAction:okAction];
    
    UIViewController *rootController = [UIApplication sharedApplication].delegate.window.rootViewController;
    [rootController presentViewController:alertController animated:YES completion:nil];
}

@end

5. 插件的安裝與調(diào)試

在Cordova項目目錄下運行以下命令來安裝插件媚狰。安裝后就可以在全局調(diào)用easter.demoPlugin('message')來使用了。

$ cordova plugin add https://github.com/easyfisher/easter-plugin-demo.git

參考文章

Plugin Development Guide
iOS Plugin Development Guide
Android Plugin Development Guide

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阔拳,一起剝皮案震驚了整個濱河市哈雏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖裳瘪,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罪针,居然都是意外死亡彭羹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門泪酱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來派殷,“玉大人,你說我怎么就攤上這事墓阀≌毕В” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵斯撮,是天一觀的道長经伙。 經(jīng)常有香客問我,道長勿锅,這世上最難降的妖魔是什么帕膜? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮溢十,結(jié)果婚禮上垮刹,老公的妹妹穿的比我還像新娘。我一直安慰自己张弛,他們只是感情好荒典,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吞鸭,像睡著了一般寺董。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞒大,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天螃征,我揣著相機與錄音,去河邊找鬼透敌。 笑死盯滚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酗电。 我是一名探鬼主播魄藕,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撵术!你這毒婦竟也來了背率?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寝姿,沒想到半個月后交排,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡饵筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年埃篓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片根资。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡架专,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玄帕,到底是詐尸還是另有隱情部脚,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布裤纹,位于F島的核電站委刘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏服傍。R本人自食惡果不足惜钱雷,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吹零。 院中可真熱鬧罩抗,春花似錦、人聲如沸灿椅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茫蛹。三九已至操刀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婴洼,已是汗流浹背骨坑。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柬采,地道東北人欢唾。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像粉捻,于是被迫代替她去往敵國和親礁遣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容