美文网首页
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