现在app混合开发越来越多,方便,快捷。对于一点小的修改就需要提交到App Store进行审核,还要经历难熬的等待,还不一定给你审核通过。尤其是对于我们公司,每天来自不同地区的不同需求那么多,每次的调整都要几天之后用户才可以使用。那么混合开发就是一种福音了,页面采用html网页,直接加载放在服务器上的html页面,有什么改动就可以直接改html页面。
我们公司采用的是Cordova框架
创建Cordova项目
1.新建一个Cordova项目,官网有详细步骤,在这里就不多说了。Cordova官网
2.在现有的项目中加入Cordova(这是我目前采用的方式)参考
把CordovaLib文件夹拖入我们的项目(里面包含config.xml,Private和Public文件夹),
把www文件添加到项目中,需要注意勾选的是create foler references,(里面有cordova.js,还可以放一些本地html文件)。
备注:对于web开发伙伴,我们需要把cordova.js和cordova_plugins.js这两个文件给他们
开始开发
1.新建一个controller继承CDVViewController
在viewDidLoad中加入一段代码self.startPage = @"index.html";
注意这一句一定要加在[super viewDidLoad];前面,不然加载不了
2.剩下的主要就是写插件了。当需要用到原生底层api就需要自定义插件
比如拍照:
- 1.新建一个插件TakePicture继承CDVPlugin,
在.h文件中增加js调用的方法- (void)photoClick:(CDVInvokedUrlCommand *)command;
注意:新建的插件都要在config.xml声明
<feature name="TakePicture">
<param name="ios-package" value="TakePicture" />
</feature>
- 2.实现插件的方法
PhotoCommandID = command.callbackId;
NSArray *arguments = command.arguments;
if (arguments.count>0) {
upLoadPictureURL = arguments[0];
[self PhotoUPClick];
}
}
command.callbackId是我们把值返回给js要用的id
command.arguments是js传给我们的参数,是数组,双方可以协商传值的顺序
CDVPluginResult * resultJS = nil;
resultJS = [CDVPluginResult resultWithStatus:(CDVCommandStatus_OK) messageAsDictionary:reponseObj];
[self.commandDelegate sendPluginResult:resultJS callbackId:PhotoCommandID];
回传给js的数据可以是很多种类型,字典,数组,字符串,都可以,这些Cordova都提供了。
js调用Cordova的方法
cordova.exec(successBack,failBack,"TakePicture","photoClick",['1','2']);