APICloud 项目学习小结

1、开发工具

APICloud Studio2

下载地址:https://www.apicloud.com/devtools

支持mac、windows、linux3种操作系统

2、真机调试

在客户端下载AppLoader

地址:https://docs.apicloud.com/Download/download

可以在APICloud官方网站上创建项目,也可以在APICloud Studio2开发工具中创建,如图2-1所示:

2-1

创建/打开项目后连接真机调试,下载AppLoader后,使用ip和端口号连接运行,如图2-2选中项目名称,右键-查看WIFI真机同步IP和端口后,项目右上角会出现如图2-3所示的方框

2-2
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跳转,例:

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标签跳转进入的页面在点击返回时,通常使用

,但在iOS设备上,这句话是返回无效的,修改为

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-1

获取设备类型方法如图8-2所示

8-2

c、在安卓端使用拍照作为上传方式时,执行到ajax的上传方法网络请求时,会直接走error方法,报错,如图8-3所示

8-3

原因:虽然拍照后能获取到base64编码,但图片过大,导致无法上传给后台

解决办法:在api.getPicture方法调用中,限制图片的宽高 targetWidth: 300,targetHeight: 300即可,如图8-4所示

8-4

9)、列表赋值和单条数据点击传值

列表赋值:在APICloud里列表赋值与iOS开发的TableView不同,而是把要循环的html写在循环内,如图9-1,后使用 $("#list_Receive").append(a);赋值或document.getElementById('list_Receive').innerHTML += a;其中list_Receive为存放列表的容器id

9-1

单条数据点击传值:图9-1的第一行代码中的onclick=\"pushtoOrderDe(\'' + orderId + '\')\",即点击传值,传递orderId,当需要传递多个参数时用”,“间隔,点击后代码如图9-2所示,orderId即所需传递至下一页面的参数

9-2

10)、图片点击放大-jQuery缩放效果lightbox插件

在head标签里倒入

 

在所需要放大的div或img标签内添加class="zoomify",并实现

方法

参照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中所示)

你可能感兴趣的:(APICloud 项目学习小结)