端开发

1.在移动应用开发过程中,如何来使用APICloud端API接口?

APICloud提供的端API设计思想与标准Javascript保持一致,并在此基础上引入了异步模块的思想,将一组高内聚,低耦合的功能封装在一个模块中,并以Javascript对象的形式开放API给开发者,该对象的使用遵循CMD模块定义规范,API接口调用方式和标准JavaScript对象一致。

其中,api对象是APICloud端API中的核心对象,api对象本身就提供了移动应用开发需要的基础功能,如:layout布局、window管理、frame管理、event通知、动画切换、网络通信、数据存储、设备访问等接口。如调用api.openWin来打开新窗口,调用api.alert来弹出对话框等。其他扩展模块也是通过api.require方法来引入到程序中使用。下面以微信分享模块为例,介绍扩展模块的引入和使用方式:

客户端代码书写:

    var wxObj = api.require('weiXin');
    //注册app至微信
    wxObj.registerApp({param}, callback(ret, err));
    //发送分享至微信
    wxObj.sendRequest({param}, callback(ret, err));

其中:

  1. api对象为APICloud开放的核心Javascript对象,require函数用于引入模块,继而使用该模块下的API;
  2. 'weiXin'字符串是APICloud对微信模块库封装对象的描述;
  3. registerApp和sendRequest函数为微信模块库下开放的API;
  4. {param}为该API需要传入的参数集,标准的JSON对象;
  5. callback(ret, err)为该API的回调函数,正常回调通过ret返回,发生错误时通过err返回,ret以及err均为JSON对象;

该对象API详情可参考相应的API文档。

云端模块绑定:

使用APICloud提供的某个模块后,在云端编译应用时需要绑定该模块,具体操作为:

登录APICloud云服务器:http://www.apicloud.com

选择相应的应用,进入“端开发”下的“模块”选项卡中,在右侧的模块列表中选中weiXin模块即可,如下图:

图片说明

2.怎么把url的图片文件保存到本地?

答:api.download

3.如何定义底部菜单按钮打开内置的html页面,是用open frame,还是什么方法?

答:openFrame openWin 都可以

4.用户的登录信息用什么保存好?cookie、localstorage还是什么?

答:localstorage或者api.setPrefs

5.重新加载页面是要哪个函数啊?

答:重新 open这个window并传入reload参数或者 window.location.reload()

6.APICloud有录视频的功能吗?

答:api.getPicture 配置下参数,sourceType 设为camera,mediaValue 设为 video

7.tabBar跟tabBarMenu,有啥不一样呢?

答:一个是纯粹的tabBar,后者是带弹出菜单的tabBar

8.用APICloud本地存储的数据是一定会同步到云端的吗?

答:本地存储一定不会上传到云端,post可以传回服务器,本地存储里面的不写程序不会自动同步到云

9.actionbutton点击子按钮以后不自动隐藏?

答:actionbutton点击子按钮以后不自动隐藏这个问题会在本周出新版本,把隐藏不隐藏交给开发者自定义

10.有人知道怎么调自己写的模块,怎么放到ide里面去?是不是需要重新生成一个AppLoader?

答:目前需要上传到云端,然后在线编译,选中你的那个自定义模块APICloud Studio目前还么提供本地测试自定义模块的功能,你可以先找一个干净的模块开发工程,把你release出来的模块包中的东西再重新拷到这个工程中,如果能跑起来,不报错,那这个包上传到云端基本就不会有问题了

11.apicloud有没有wifi类的API?

答:iOS设备系统上没开放wifi管理相关的接口,Android是开放的,没有办法统一,所以目前没有提供,如果有需求的话,可以单独为android平台封装该模块

12.当前时间戳是怎么调用的?

答:new Date().getTime();

13.我写了一个城市列表。假如选定了返回,我如何又返回到城市列表呢?

答:用api.execScript,执行之前页面的api.closeWin();

14.使用模块必须到云端先添加模块然后APICloud Studio更新了才能用哪个模块?

答:APICloud Studio真机调试装了apploader的不需要添加模块APICloud Studio是集成了模块的,云端编译只需要添加你需要的模块编译即可

15.reload和open的区别是什么?

答:reload是将当前window所在的网页重新加载一次.open是新开一个window。

16.APICLOUD有什么方法可以关闭当前窗口啊,所有窗口怎么写?

答:可以调用api.closeWin({name:’xxx’})关闭当前窗口或指定窗口,或者调用api.closeToWin({name:'xxx'}),从当前窗口关闭到你想关的那个窗口

17.Location services are not enabled.,iOS调用baiduLocation怎么会出现这个?

答:没有开启手机定位。

18.listview 可以同时设置上拉刷新和下拉刷新吗?

答:可以

19.apicloud中网页的图片有缓存的机制吗?

答:有的,存在沙箱中。

20.apiCloud的UI结构,window跟frame是啥关系?是否一个app一次只能展示一个window,但可以有多个frame?

答:一个app就是一个widget;每个widget允许有多个window,同时只允许一个window位于屏幕上,所以你可以将window看成当前屏幕;每个window下可以有多个frame和frameGroup,frame和frameGroup依附在window上,frameGroup包含一个可以横拖的frame数组。

21.怎么读config.xml呢?

答: NSArray * fetures = [theApp features];iOS上的模块内部这样就读取config.xml,Android下面有继承自UZMoudule的对象下有getFeatureValue函数可用

22.打开已经打开过的window的时候,怎样强制让这个window打开后刷新?

答:强制刷新能力在下一版本中将支持,openFrame或者win时新增参数reload:true,标识强制已经存在的frame或win重新加载。

23.请问一下openWin或者openFrame的时候,传的pageParam参数,在被打开的页面中这么获取?

答:通过api.pageParam获取。

24.头部标题栏把状态栏遮住了怎么办?怎么修改标题栏的颜色?

答:api.setStatusBarStyle({
    style: 'light'
}); 可以设置状态栏样式为浅色,如果你不想iOS中头部和状态栏重合,就不用调用$api.fixIos7Bar()方法,同时在config.xml里面把iOS7StatusBarAppearance配置成false。

25.下拉和上滑都刷新,请问怎么实现?

答:上拉刷新目前没有提供,可以使用监听滚动到底部时实现加载更多。

26.请问拍照的API在哪里?

答:api.getPicture

27.我在窗口打开的时候添加了一个事件侦听,当这个窗口关闭的时候要移除事件侦听吗?

答:被api.closeWin的window不用做任何操作,底层会自动将这个window的所有内存进行回收和释放,包括各种模块的调用占用的资源网络请求占用的资源等等。

28.app启动时可以添加图片或着动画效果吗?

答:在控制台 “端设置” 里,鼠标悬停分辨率就可以出现上传按钮。

29.焦点图模块scrollPicture 怎么在指定位置显示么?

答:open的时候配置他的xywh(视图左上角点坐标和宽高)就行了,还有可以用fixedOn来指定添加到某个窗口上。

30.openWin和openWidget有啥区别啊

答:APICloud以widget来形容一个完整的App,相当于一个单独的App;每个widget由N个window构成,每个window中可以包括N个FRAME。因此openWidget相当于打开一个新的应用,openWin是在这个应用内打开一个占据屏幕UI渲染空间的window。

40.UZUtility.makeRealPath(path,wgtInfo)这个API,是否是将 fs:// 等转换为真实路径?第二个参数:wgtInfo 是什么?

答:可以转,但是对应的是SD卡上的沙箱路径,wgtInfo是模块开发中,继承自UZMODLUE对象下的类,可以直接getWidgetInfo获取

41.api.openWin({name:'index', url:'../index.html', delay:100, pageParam: pageParam});我打开index.html,并传页面参数,请问怎么在index.html获参数?

答:api.pageParam http://docs.apicloud.com/端API/api#a12

42.如果我想插件里主动触发一个JS的事件,而不是JS->JAVA->JS这种回调模式的话,插件里该如何实现呢?比如:我的一个播放视频的插件,需要每个N时间,当前进度告诉JS的事件。

答:UZModule下面有个execScript(final String winName, final String frameName, final String script)函数,可以通过执行JS来实现你的需求。

43.apicloud里调用的全是单击事件 好像没触摸事件? 比如一个按钮 都是onclick 并不是touchstart

答:需要响应onclick的元素,加上tapmode='xxx'属性即可,xxx可以是一个css样式,当该元素touchstart touchmove的时候就会展现xxx样式,tapmode还具有 速点击事件的功能,消除了JS中标准click事件的300毫秒延迟;有tapmode已经很完善了,如果需要,可以自行在代码中监听相应元素的touch事件。

44.怎样实现全局变量的呢?比如用户的名称,在很多页面都有用到。

答:localStorage或者api.setPrefs api.getPrefs 这一对可以实现全局变量。

45.navigationMenu 这个控件是否支持左右滑动?

答:支持,如果按钮太多,一屏显示不完,就可以左右拖动了。

46.initial-scale=0.5, maximum-scale=0.5, user-scalable=0; scaleEnabled: true 安卓下不起效

答:maximum-scale=0.5,minimum-scale=0.5,user-scalable=1,width=device-width,initial-scale=0.5

47.navigationMenu不支持调样式吗 比如我想调下高度

答:目前这个控件的高度是自适应屏幕大小的。

48.scrollPicture 的 fixedOn 是干什么用的? 所指的视图是什么?我想把scrollPicture 嵌入到 Frame 中,跟着Frame 隐藏或者显示或者关闭?要怎么实现?

答:fixedOn的值是frame的名称,默认scrollPicture是添加到主窗口上面的,若指定frame的名称,则会添加到指定的frame上面,也就是你想要的效果了。

49.请问有直接拍照功能吗?

答:有的,api的getPicture方法,sourceType参数传camera就是拍照了。

50.api.openSlidLayout 开启的fixedPane 和 slidPane 是2个win 还是 2个 Frame?

答:两个Pane是两个window,这两个window中你还可以open Frame,frameGroup等。

51.在slidPane main-contain.html 中另外开启了一个Frame_1,在 Frame_1中开启了Frame_1_1 和 Frame_1_2,为什么用 closeFrame 关闭了 Frame_1,Frame_1_1 和 Frame_1_2 还在?难道Frame_1 , Frame_1_1 , Frame_1_2 是平级关系,主窗口都属于slidPane main-contain.html ?

答:在同一个主窗口下打开的frame目前都是平级关系,它们都是添加到主窗口上面的,关闭其中一个frame对其它frame没有影响。

52.为什么tabbar在iOS下点击后直接退出应用? andriod下正常

答:可以设置每屏显示按钮个数,底层会自适应屏幕平均分配按钮间距。

53.frame怎么获取参数

答:目前能够获取的frame属性有宽度、高度、名称和参数,通过api.frameWidth、api.frameHeight、api.frameName和api.pageParam获取。

54.api.openFrame方法中带入的 pageParam 和 api.openWin方法中带入的pageParam 怎么区分?

答:你在主窗口中调用api.pageParam,获取的是openWin传入的参数;而在子窗口中调用api.pageParam,获取的是openFrame传入的参数。

55.在开发自定义第三方模块时,iOS代码中如何调用JS中的函数,在用Obj-c开发原生模块时,如何将socket返回的聊天信息返回给前端JS, 是否通过JS传入的回调函数进行?

答:使用UZModule对象的 sendResultEventWithCallbackId: dataDict: errDict: doDelete:方法,其中的callbackId可以从你的方法的参数中通过cbId参数获取。

56.如何读取Frame的属性

答:判断frame是否存在可以在代码中用一变量标识;目前能够获取的frame属性有宽度、高度和名称,通过api.frameWidth、api.frameHeight和api.frameName获取。

57.如何监听到应用关闭的事件?是否可以把默认的应用关闭确认窗口用自己的替换掉?监听返回键调用closewidget,官方默认的关闭窗口还是会弹出来

答:silent:true 设置这个属性

58.Android云编译失败是什么原因导致的

答:编译失败只有2种原因:1.证书信息不符。2.widget文件夹中含有中文名的文件。

59.监听手机的返回键 或者禁止手机返回键怎么处理

答:

api.addEventListener({
    name: "keyback"
}, function(ret, err){

});

60.应用启动,加载index.html,此时它是不是一个窗口?名字是什么?

答:是,名字是root

61.iOS状态栏覆盖是因为什么原因

答:需要判断iOS版本如果是iOS7以上,需要加上margin-top属性