1、开发工具
APICloud Studio2
下载地址:https://www.apicloud.com/devtools
支持mac、windows、linux3种操作系统
2、真机调试
在客户端下载AppLoader
地址:https://docs.apicloud.com/Download/download
可以在APICloud官方网站上创建项目,也可以在APICloud Studio2开发工具中创建,如图2-1所示:
创建/打开项目后连接真机调试,下载AppLoader后,使用ip和端口号连接运行,如图2-2选中项目名称,右键-查看WIFI真机同步IP和端口后,项目右上角会出现如图2-3所示的方框
安装AppLoader进入后,屏幕上有个灰色的小圆圈,点击输入IP和端口号后,小圆圈变浅绿色即连接成功。这个时候就可以运行项目了,项目中常用的快捷键有:
control + i :运行整个项目
control + o:运行当前页面
control + option + B : 代码整理
3、常用知识点
1)、本地存储:用于登录后存储登录名和随机码等
存:$api.setStorage('loginName', ret.body.loginName);
取: var loginName = $api.getStorage('loginName');
2)、传递参数: 用于从A页面跳转到B页面时传值等,pageParam为包含参数的json串,当有参数需要传递时使用openWin方法,没有参数时可以直接使用href跳转,例:<a class="sousuo" href="index.html"></a>
api.openWin({
name: 'index',
url: './index.htm,
pageParam: {
param:"name",
}
});
3)、取值赋值:根据id给某控件赋值或获取某个控件的值
a、value赋值:
document.getElementById('name').innerText=“小明”;
b、value取值:
var username = document.getElementById('name').value;
c、img标签图片赋值:
document.getElementById('image').src = '../image/dh-6.png'
d、div标签网络图片赋值:
document.getElementById("headurl").style.backgroundImage = 'url(' + url + ')';
e、div标签设置背景颜色:
document.getElementById('color').style.backgroundColor = '#0068b7';
4)返回键无效:使用a标签跳转进入的页面在点击返回时,通常使用
<a href="#" class="back" onclick="history.go(-1);"></a>,但在iOS设备上,这句话是返回无效的,修改为<a href="#" class="back" onclick="history.go(-1);return false;"></a>
5)iOS设备上使用openwin方法跳页时,一闪而过会显示黑屏,加上 bgColor: 'white'这句话就没问题了
api.openWin({
name: 'index',
url: './index',
bgColor: 'white',
});
6)安卓物理返回键无效:在安卓设备上运行APICloud平台的项目时,偶尔会发生物理返回无效的问题,解决办法如下,在apireadey里调用该方法就可以了
function andriodBack() {
api.addEventListener({
name: 'keyback'
}, function(ret, err) {
api.historyBack();
});
}
7)、时间戳转换成yyyy-MM-dd 00:00:00方法
//时间戳转时间
function formatDate(unix) {
var now = new Date(parseInt(unix) * 1);
now = now.toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
if (now.indexOf("下午") > 0) {
var temp1 = now.substring(0, now.indexOf("下午")); //2014/7/6
var temp2 = now.substring(now.indexOf("下午") + 2, now.length); // 5:17:43
var temp3 = temp2.substring(0, 1); // 5
var temp4 = parseInt(temp3); // 5
temp4 = 12 + temp4; // 17
var temp5 = temp4 + temp2.substring(1, temp2.length); // 17:17:43
now = temp1 + temp5; // 2014/7/6 17:17:43
now = now.replace("/", "-"); // 2014-7/6 17:17:43
now = now.replace("/", "-"); // 2014-7-6 17:17:43
} else {
var temp1 = now.substring(0, now.indexOf("上午")); //2014/7/6
var temp2 = now.substring(now.indexOf("上午") + 2, now.length); // 5:17:43
var temp3 = temp2.substring(0, 1); // 5
var index = 1;
var temp4 = parseInt(temp3); // 5
if (temp4 == 0) { // 00
temp4 = "0" + temp4;
} else if (temp4 == 1) { // 10 11 12
index = 2;
var tempIndex = temp2.substring(1, 2);
if (tempIndex != ":") {
temp4 = temp4 + "" + tempIndex;
} else { // 01
temp4 = "0" + temp4;
}
} else { // 02 03 ... 09
temp4 = "0" + temp4;
}
var temp5 = temp4 + temp2.substring(index, temp2.length); // 07:17:43
now = temp1 + temp5; // 2014/7/6 07:17:43
now = now.replace("/", "-"); // 2014-7/6 07:17:43
now = now.replace("/", "-"); // 2014-7-6 07:17:43
}
return now;
}
8)、拍照上传
在使用APICloud拍照上传功能时,iOS端没有什么问题,但在安卓端有3个问题需要注意。
a、在iOS端进入相机/相册后,点击取消时,即不执行上传图片的网络请求,但在安卓端,点击取消后仍会执行网络请求,解决办法:在执行网络请求前判断img常量是否为空
if (imgPath == null || imgPath == '' || !imgPath) {
api.hideProgress();
alert('请选择图片');
} else {
//ajax网络请求
}
b、在使用 api.getPicture()方法获取到的ret.base64Data(上传给后台的base64编码),上传时需要做截取,否则后台无法使用,如图8-1所示,iOS从22位开始截取,安卓从23位开始截取
获取设备类型方法如图8-2所示
c、在安卓端使用拍照作为上传方式时,执行到ajax的上传方法网络请求时,会直接走error方法,报错,如图8-3所示
原因:虽然拍照后能获取到base64编码,但图片过大,导致无法上传给后台
解决办法:在api.getPicture方法调用中,限制图片的宽高 targetWidth: 300,targetHeight: 300即可,如图8-4所示
9)、列表赋值和单条数据点击传值
列表赋值:在APICloud里列表赋值与iOS开发的TableView不同,而是把要循环的html写在循环内,如图9-1,后使用 $("#list_Receive").append(a);赋值或document.getElementById('list_Receive').innerHTML += a;其中list_Receive为存放列表的容器id
单条数据点击传值:图9-1的第一行代码中的onclick=\"pushtoOrderDe(\'' + orderId + '\')\",即点击传值,传递orderId,当需要传递多个参数时用”,“间隔,点击后代码如图9-2所示,orderId即所需传递至下一页面的参数
10)、图片点击放大-jQuery缩放效果lightbox插件
在head标签里倒入<script src="../js/zoomify.min.js"></script>,
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<link rel="stylesheet" href="../css/zoomify.min.css">
在所需要放大的div或img标签内添加class="zoomify",并实现
<script>
$(function() {
$('.zoomify').zoomify();
});
</script>方法
参照demo:http://www.dowebok.com/214.html
4、坑集
1、在APICloud上使用ping++模块实现支付功能的过程中现有以下漏洞,
在前期准备工作都完好的前提下,当后台设置的channel=“wx”时(支付渠道),在安卓客户端调用ping++模块的pingpp.createPayment是无效的,并且设备会卡住不动,解决办法:把channel=“wx”改为channel=“wx_wap”,即由微信APP支付改为微信H5支付。但同时这样改完后在iOS客户端调用微信支付时,会导致支付成功后无法回调,故最终的解决办法:
在接口调用中新增设备类别device参数,
当device=“安卓”,后台设置channel=“wx_wap”;
当device=“iOS”,后台设置channel=“wx”;
(获取设备类型代码上图8-2中所示)