美文网首页
Cordova自定义插件的开发

Cordova自定义插件的开发

作者: 东鱼临渊 | 来源:发表于2016-09-10 17:28 被阅读0次

在Cordova项目的开发过程中,一些功能通过Web端的技术很难/无法实现,此时需要借助Cordova插件来调用Native代码实现。Cordova为我们提供了丰富的插件库,实现了诸如获取设备信息,获取通讯录,设置设备状态栏等基本功能。但有时我们仍需实现自定义的插件以满足项目需要,下面以iOS为例介绍其开发过程。

1. 创建Git仓库管理插件

在Github或是其他Git服务器上创建一个仓库:
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接口实现

在plugin.xml中增加接口定义。下面js-module中的内容将www/Demo.js中实现的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>

接下来我们实现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代码实现

在plugin.xml中添加Native相关配置。其中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>

下面实现ESDemo类。greet方法接收JS端传来的greet消息并在屏幕上显示一个提示框。至此我们就可以调用其他的本地代码以实现项目需要。

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. 插件的安装与调试

在Cordova项目目录下运行以下命令来安装插件。安装后就可以在全局调用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

相关文章

网友评论

      本文标题:Cordova自定义插件的开发

      本文链接:https://www.haomeiwen.com/subject/yebyettx.html