Cordova 插件开发

2017-08-31  本文已影响0人  Alfred的记录本

cordova 插件 (最简单,步骤最少的实现)

1、 JS调用AlfreldPlugin 为暴露出来的名称,myMethod为方法名。

// index.js
Cordova.exec(successFunction, failFunction, "AlfreldPlugin", "myMethod", ["function"]);

2、 config.xml,配置AlfreldPlugin 到 TestPlugin的映射,

<feature name="AlfreldPlugin">
      <param name="ios-package" value="TestPlugin" />
      <param name="onload" value="true" />
</feature>

3、原生实现

//TestPlugin.h
@interface TestPlugin : CDVPlugin
  - (void)myMethod:(CDVInvokedUrlCommand*)command;
@end
  //TestPlugin.m
@implementation TestPlugin
-(void) pluginInitialize {
    return;
}
- (void)myMethod:(CDVInvokedUrlCommand*)command
{
    CDVPluginResult* pluginResult = nil;
    NSString* myarg = [command.arguments objectAtIndex:0];//获取第一个参数
    if (myarg != nil) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"return Data  :) "];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];
    }
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end

cordova 插件 (标准实现)

1、barcodescanner.js 中实现调用,注意BarcodeScanner为config.xml中的BarcodeScanner

cordova.define("phonegap-plugin-barcodescanner.BarcodeScanner", function(require, exports, module) {
        var exec = cordova.require("cordova/exec");
        var scanInProgress = false;
        function BarcodeScanner() {//......};
         //......
         BarcodeScanner.prototype.scan = function (successCallback, errorCallback, config) {
            exec(
                function(result) {
                    scanInProgress = false;
                    successCallback(result);
                },
                function(error) {
                    scanInProgress = false;
                    errorCallback(error);
                },
                'BarcodeScanner',
                'scan',
                config
            );
        };
         //......
        var barcodeScanner = new BarcodeScanner();
        module.exports = barcodeScanner;
});

2、cordova_plugin.js实现对插件的配置,注意:该配置中id为1中define的内容,pluginId为module.exports.metadata的内容,file指向barcodescaner.js,clobbers为调用插件时的引用。

{
        "id": "phonegap-plugin-barcodescanner.BarcodeScanner",
        "file": "plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js",
        "pluginId": "phonegap-plugin-barcodescanner",
        "clobbers": [
            "cordova.plugins.barcodeScanner"
        ]
    },
//...
module.exports.metadata = 
{
    "phonegap-plugin-barcodescanner": "6.0.6",
};

3、config.xml,CDVBarcodeScaner为实际的类名

    <feature name="BarcodeScanner">
        <param name="ios-package" value="CDVBarcodeScanner" />
    </feature>

4、原生实现
5、js调用,注意cordova.plugins.barcodeScanner跟步骤2中的clobbers一致。

cordova.plugins.barcodeScanner.scan(
      function (result) {
          alert("We got a barcode\n" +
                "Result: " + result.text + "\n" +
                "Format: " + result.format + "\n" +
                "Cancelled: " + result.cancelled);
      },
      function (error) {
          alert("Scanning failed: " + error);
      }
   );

插件开发时的注意事项

1、当下面参数设置为 YES 可以设置多次跟js进行交互
- (void)setKeepCallbackAsBool:(BOOL)bKeepCallback;
2、CDVPlugin中可以通过变量viewController获取当前页面所在的viewController

[self.viewController presentViewController:_readerViewController animated:YES completion:nil];
上一篇下一篇

猜你喜欢

热点阅读