美文网首页
ionic项目中自定义Cordova插件

ionic项目中自定义Cordova插件

作者: HiUSB | 来源:发表于2019-11-18 16:20 被阅读0次

    1. 安装插件管理器

    $npm install -g plugman
    

    2. 创建插件

    $plugman create --name testPlugin --plugin_id com.cordova.testPlugin --plugin_version 1.0.0
    
    $plugman create --name 插件名称 --plugin_id 插件id --plugin_version 插件版本号  [--path ] [--variable NAME=VALUE]
    
    参数说明:
    pluginName: 插件名称,eg:testPlugin
    pluginID: 插件id, eg: com.cordova.testPlugin
    version: 版本号, eg: 1.0.0
    variable NAME=VALUE: 扩展参数,如说明或者作者
    

    3. 为插件添加平台

    $cd ./testPlugin
    $plugman platform add --platform_name ios
    

    4. 生成package.json

    $npm init
    

    此时插件目录结构应该是这样的

    testPlugin
    ├── package.json
    ├── plugin.xml
    ├── src
    │   └── ios
    │       └── testPlugin.m
    └── www
        └── testPlugin.js
    

    可以注意一下plugin.xml中的内容

    clobbers中target的值是JS调用Native的接口

    config-file标签中内容会被配置到具体项目的config.xml中,而value中的值testPlugin其实对应的是Native的映射类testPlugin。JS调插件时,其实是通过runtime实例化了一个testPlugin对象,并objc_msgSend方法名,这样testPlugin.m中的方法就被调用了

    source-file表示testPlugin.js的路径

    5. 创建一个ionic项目

    $ionic start IonicDemo blank //创建一个名为IonicDemo的空项目
    

    6. 为项目添加iOS平台

    $cd ./IonicDemo
    $ionic cordova platform add ios //添加iOS平台
    $ionic build --prod //将项目打包成www文件夹
    $ionic cordova prepare ios //拷贝www目录资源到iOS工程下
    

    此时可以用Xcode运行项目了,项目路径 ./IonicDemo/platforms/ios/MyApp.xcworkspace,当然这只是一个空项目,模拟器中也就显示一个空页面。下一步,我们把自定义插件添加进项目中,并让它能被调用!Just do it!

    7. 添加自定义插件到项目中

    $ionic cordova plugin add ../testPlugin 
    

    这里的自定义插件testPlugin路径跟项目IonicDemo在同一层,所以直接../testPlugin即可,当然路径也可以在别的位置,比如Github,那么插件路径则需要作相应的修改!

    8. 在Xcode中打开项目

    此时在项目中能够看到,Staging/www/plugins目录下多了testPlugin.js,它应该是这样的
    plugins
    ├── com.cordova.testPlugin
    │   └── www
    │       └── testPlugin.js
    
    而项目Plugins目录下多了testPlugin.m,它是不完整的,手动添加一个testPlugin.h,它应该是这样的
    #import <Cordova/CDVPlugin.h>
    @interface testPlugin : CDVPlugin
    
    @end
    
    Staging/www/cordova_plugins.js多了一些信息,它应该是这样的
    {
        "id": "com.cordova.testPlugin.testPlugin",
        "file": "plugins/com.cordova.testPlugin/www/testPlugin.js",
        "pluginId": "com.cordova.testPlugin",
        "clobbers": [
            "cordova.plugins.testPlugin"
        ]
    }
    {
        "com.cordova.testPlugin": "1.0.0"
    
    }
    
    Staging/config.xml多了一个标签,它应该是这样的
    <feature name="testPlugin">
        <param name="ios-package" value="testPlugin" />
    </feature>
    
    至于这些信息的意思这里不作解释,有兴趣可以看我写的另一篇《Cordova自定义插件配置》
    

    附:

    Cordova自定义插件配置

    9. 测试插件

    这里我们修改Staging/www/index.html,替换成以下内容

    <!DOCTYPE html>
    <html lang="en" dir="ltr">
    <head>
      <meta charset="UTF-8">
      <title>Ionic App</title>
      <script src="cordova.js"></script>
      <script>
            function success(arg) {
                alert('success callback-->'+arg);
            }
            function error() {
                alert('error callback-->'+arg);
            }
            function test() {
                cordova.plugins.testPlugin.coolMethod("hello ionic!", success, error);
            }
      </script>
    </head>
    <body>
        <button onclick="test()" style="position: fixed; top: 50%; font-size: 30px">测试插件</button>
    </body>
    </html>
    

    在模拟器中运行项目,点击按钮,屏幕中是不是出现一个弹框了!至此,一个自定义插件就完成了!
    它是如何做到的呢?

    第一步:Html中JS调用 cordova.plugins.testPlugin.coolMethod("hello ionic", success, error);并给这个函数传递了三个参数,字符串,成功回调,失败回调

    第二步:cordova.plugins.testPlugin.coolMethod函数调起了Native中testPlugin.m的实例方法- (void)coolMethod:(CDVInvokedUrlCommand*)command,并把字符串传了过去

    第三步:coolMethod方法直接把字符串包装成结果回传给了JS中success,然后success函数被调起!
    这样就完成了JS与Native的互相调用~


    ionic项目常用插件命令

    $ionic cordova plugin list //列出所有已安装的插件
    $ionic cordova  plugin remove helloPlugin //从ionic项目中删除插件
    $ionic cordova plugin add 插件路径 //安装插件到ionic项目,插件路径可以是Git地址
    

    ionic项目常用命令

    $ionic start ProjectName [sidemenu|tabs|blank] //通过模板创建项目
    $ionic serve //浏览器预览 
    $ionic cordova platform add ios/android  //添加平台
    $ionic build ios/android //编译
    $ionic cordova emulate ios/android –lc //模拟器运行
    $ionic cordova run ios/android –lc //真机运行
    $ionic build --prod //打包成www文件夹
    $ionic cordova prepare ios //拷贝www目录资源到ios工程下
    

    附:

    更多模板

    更多命令

    cordova Plugin.xml 详解

    其它问题

    $sudo chmod -R 777 * //如果打开项目遇到权限问题则需要先给项目权限
    

    相关文章

      网友评论

          本文标题:ionic项目中自定义Cordova插件

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