眾所周知,現在apicloud開發app也是非常火爆的。
apicloud的優勢:
1. 官方簽約
APICloud作為知名的移動APP開發平臺與您直接簽單,以專業的APP開發技術基礎作為專案如期上線的可靠保障。
2. 保上線
APICloud CTO親自為每個專案進行評估並指派資深專案監理,保質保量準時交付。APICloud承諾最終提交至蘋果及各大安卓市場稽核通過,讓客戶無後顧之憂。
3. 便宜
基於APICloud跨平臺開發技術,一套前端程式碼直接生成蘋果和安卓兩個平臺應用,降低70%傳統開發成本。 APICloud聚合各種常用功能模組和幾乎所有國內第三方雲服務,一鍵接入,免去重複開發成本。 APICloud的引擎技術允許一套程式碼完美適配百餘種螢幕尺寸,幾十個主流手機品牌和各版本Android、iOS系統。
4. 快
APICloud為開發團隊提供海量原生應用功能模組、雲資料庫等功能,實現高效開發,顯著縮短開發週期。
App開發、釋出、運營一站搞定,Android、iOS系統升級一鍵完成。
基於APICloud平臺所編寫的程式碼標準、易讀,交付後便於快速上手運營維護。
這麼多優勢的apicloud現在不學等待何時,學了就能漲工資!!!
開發準備階段
開發app之前,肯定是有設計稿的,建議設計稿為750*1080
這樣的好處顯而易見,前端開發人員只需要量出設計搞得實際尺寸然後/2便可以得到實際px值,可以說非常方便。
用appcloud開發app不同於H5開發,其實不用考慮過多適配問題,可以不用rem,百分比之類的,你所需要的就是api自帶的框架,這裡不詳細介紹,可以自己看文件
給你頁面加上:<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
就可以了。
建議頁面佈局,能用寬度儘量用100%,不能用的可以用到彈性佈局,display:flex;非常方便,然後實在不行就再寫實際的尺寸,高度的話一般按照設計稿來。
下面介紹一下apicloud一些基礎的知識點,我自己開發app用到一些非常常用的方法。
(1)首先每個頁面都需要用到
此事件是在api物件準備完畢後產生,在每個Window或Frame的HTML程式碼中都需要監聽此事件,以確定APICloud擴充套件物件已經準備完畢,可以呼叫了。
apiready = function() {
bMap = api.require("bMap");
}複製程式碼
openWin()
這個方法主要是載入api提供的框架
你要在預設的index裡面配置一下預設的首頁地址
頁面的跳轉頁
api.openWin({
name: 'page1',
url: './page1.html',
pageParam: {
name: 'test'
}
});複製程式碼
closeWin:
關閉 window
若當前正在進行 openWin、closeWin 等帶動畫過渡的 window 操作,呼叫此方法會失效
closeWin({params})複製程式碼
closeToWin:
關閉到指定 window,最上面顯示的 window 到指定 name 的 window 間的所有 window 都會被關閉
若當前正在進行 openWin、closeWin 等帶動畫過渡的 window 操作,呼叫此方法會失效
closeToWin({params})複製程式碼
(2)openFrame這方法相當於開啟頁面的子視窗,子視窗是鑲嵌在父視窗裡面的。
api.openFrame({
name: 'cityselect_frame',
url: 'cityselect_frame.html',
rect: {//位置及大小引數
x:0,
y:50,
w:'auto',
h:'auto'
},
pageParam:{
name:'test'
}
});
複製程式碼
(3)openFrameGroup
開啟frame組
若frame組已存在,則會把該frame組顯示到最前面。frame組開啟後,當前頁面載入完成後,頁面會預載入後面指定個數頁面
openFrameGroup({params}, callback(ret, err))
api.openFrameGroup({
name: 'group1',
rect: {
x: 0,
y: 0,
w: 'auto',
h: 'auto'
},
frames: [{
name: 'frame1',
url: 'frame1.html',
bgColor: '#fff'
},
{
name: 'frame2',
url: 'frame2.html',
bgColor: '#fff'
}]
}, function(ret, err)
{
var index = ret.index;
});
複製程式碼
這個方法相當於頁面呢選單欄,點選選單欄切換中中間內容。
(4)儲存方法
// apicloud儲存全域性資訊
api.setPrefs({
key: 'user_id',
value: ret.id //賦值給user_id
});
// apicloud獲取儲存在全域性裡的值
user_id = api.getPrefs({
sync: true,
key: 'user_id'
});
// apicloud清除儲存資訊
api.removePrefs({
key: 'user_id'
});
// apicloud向下一頁傳參
api.openWin({
name: 'qgxq_head',
url: '../list/qgxq_head.html',
pageParam: {
goods_id: id,
region_id: region_id,
area_id: area_id
}
});
// apicloud獲取上頁引數
var ret = api.pageParam.data;
// jq獲取自定義data值
// <div id="text" value="123" data-name="黑噠噠的盟友"><div>
// JQUERY取值:$("#text").data("name");
api.showProgress({
style: 'default',
animationType: 'fade',
title: '努力載入中...',
text: '先喝杯茶...',
modal: false
});
api.hideProgress();複製程式碼
(5)監聽
/////////////傳送監聽///////////////////////////////////
api.sendEvent({
name: 'login',
extra: {
key1: 1,
}
});
////////////////接受監聽///////////////////////////////
api.addEventListener({
name: 'login'
}, function(ret, err) {
//coding...
// alert(JSON.stringify(ret))
if (ret.value.key1 == 1) {
getData()
}
});
///////////////獲取app快取/////////////////////////
api.getCacheSize(function(ret) {
var size = ret.size;
cache = (size / 1024 / 1024).toFixed(2) + "M";
$("#cache").text(cache);
});
//////////////清除app快取/////////////////////////
function clearhuancun() {
api.showProgress({
style: 'default',
animationType: 'fade',
title: '努力提交中...',
text: '先喝杯茶...',
modal: false
});
api.clearCache(function() {
api.hideProgress();
api.toast({
msg: '清除完成'
});
cache = "0M";
$("#cache").text(cache);
})
} 複製程式碼
(6)下拉重新整理和下拉載入
/////////下拉重新整理//////////
api.setRefreshHeaderInfo({ //呼叫UI元件 顯示頂部下拉重新整理元件,頁面必須設定為彈動。setRefreshHeaderInfo({params}, callback(ret, err))
visible: true, //可選 是否可見
loadingImg: 'widget://image/refesh.png', //上拉下拉的圖片
bgColor: '#fff', //載入資訊的背景顏色
textColor: '#ccc', //載入文字的顏色
textDown: '下拉重新整理...', //下拉時提醒文字
textUp: '鬆開重新整理...', //鬆開時提醒文字
showTime: true //是否顯示更新時間
}, function(ret, err) {
user_id = api.getPrefs({
sync: true,
key: 'user_id'
});
user_rank = api.getPrefs({
sync: true,
key: 'user_rank'
});
api.showProgress({
style: 'default',
animationType: 'fade',
title: '努力載入中...',
text: '先喝杯茶...',
modal: false
});
duqu(user_id, user_rank);
})
//停止重新整理
api.refreshHeaderLoadDone();
////////////上拉載入start/////////
var page = 1;
api.addEventListener({ //上拉載入只能採用繫結自定義事件的辦法來實現,沒有UI元件
name: 'scrolltobottom', //繫結事件Window或者Frame頁面滑動到底部事件,字串型別
extra: {
threshold: 0 //設定距離底部多少距離時觸發,預設值為0,數字型別
}
}, function(ret, err) {
getDataPage();
});
var page = 1; //page在AJAX請求前要遞增page++
api.addEventListener({ //上拉載入只能採用繫結自定義事件的辦法來實現,沒有UI元件
name: 'scrolltobottom', //繫結事件Window或者Frame頁面滑動到底部事件,字串型別
extra: {
threshold: 0 //設定距離底部多少距離時觸發,預設值為0,數字型別
}
}, function(ret, err) {
getDataPage();
});
function getDataPage() {
page++;
api.ajax({
url: url,
method: 'get',
timeout: 30,
dataType: 'json',
returnAll: false,
data: {
values: { //you引數
page: page
},
}
}, function(ret, err) {
if (ret) {
// alert(JSON.stringify(ret))
}
})
}
/////////////上拉載入end////////// 複製程式碼
(7)apicloud提供的ajax請求
url:
- 型別:字串
- 預設值:無
- 描述:請求地址
encode:
- 型別:布林
- 預設值:true
- 描述:(可選項)是否對url進行編碼。預設或傳true時,Android將始終對url編碼,而iOS只有在url不合法(如存在中文字元)的時候才進行編碼。如果url中有特殊字元需要編碼的,建議先在js層進行編碼,然後此引數傳false。
tag:
- 型別:字串
- 預設值:無
- 描述:(可選項)該欄位用於傳給cancelAjax方法來取消請求,如果傳入該欄位,請保證各個ajax的tag欄位唯一
method:
- 型別:字串
- 預設值:get
- 描述:(可選項)非同步請求方法型別
- 取值範圍:
get post put delete head options trace patch 複製程式碼
cache:
- 型別:布林
- 預設值:true
- 描述:(可選項)是否快取,若快取,下次沒網路時請求則會使用快取,僅在get請求有效
timeout:
- 型別:數字
- 預設值:30
- 描述:(可選項)超時時間,單位秒
dataType:
- 型別:字串
- 預設值:json
- 描述:(可選項)返回資料型別。若該欄位傳json,接收到伺服器返回的資料後會嘗試將其轉換成JSON物件,如果無法轉成JSON物件,將返回資料型別錯誤
- 取值範圍:
json //返回資料為 JSON 物件
text //返回資料為字串型別
複製程式碼
charset:
- 型別:字串
- 預設值:utf-8
- 描述:(可選項)當響應頭裡面沒有返回字符集編碼時,使用此編碼來解析資料
headers:
- 型別:JSON 物件
- 預設值:無
- 描述:(可選項)設定請求頭資料。建議裡面的key使用首字母大寫的形式,如 User-Agent
report:
- 型別:布林
- 預設值:false
- 描述:(可選項)是否實時返回上傳檔案進度
returnAll:
- 型別:布林
- 預設值:false
- 描述:(可選項)是否需要返回所有 response 資訊(包括響應頭、訊息體、狀態碼),為 true 時,返回的頭資訊獲取方法(ret.headers),訊息體資訊獲取方法(ret.body),狀態碼獲取方法(ret.statusCode)
data:
- 型別:JSON 物件
- 預設值:無
- 描述:(可選項)POST 資料,method 為 get 時不傳。以下欄位除了 values 和 files 可以同時使用,其它引數都不能同時使用。
- 內部欄位:
{
stream:"", //以二進位制流的方式提交檔案。stream為檔案路徑(字串型別),支援絕對路徑,以及fs://、cache://、box://等檔案路徑協議。可直接使用其他端API返回的結果,如api.getPicture回撥的ret.data等
body:"", //以純文字的方式提交資料,body支援字串及JSON物件。提交JSON物件時,需設定application/json型別的Content-Type頭
values:{}, //以表單方式提交引數(JSON物件), 如 {"field1": "value1", "field1": "value2"} (直接傳JSON對像.)
files:{} //以表單方式提交檔案,支援多檔案上傳(JSON物件),如 {"file": "path"},也支援同一欄位對應多檔案:{"file":["path1","path2"]}。檔案路徑,支援絕對路徑,以及fs://、cache://、box://等檔案路徑協議。可直接使用其他端API返回的結果,如api.getPicture回撥的ret.data等.
}
複製程式碼
certificate:
- 型別:JSON 物件
- 預設值:無
- 描述:(可選項)用於https請求開啟雙向認證的情況下,客戶端配置p12安全證書設定。
- 內部欄位:
{
path:'', //p12證書路徑,支援fs://、widget://、cache://等檔案路徑協議,字串型別
password:'' //證書密碼,字串型別
}複製程式碼
callback(ret, err)
ret:
- 型別:JSON物件或字串
- 描述:通常情況下直接為伺服器返回的資料,在一些情況下則會有所不同,依賴於傳入的dataType、returnAll引數,以及上傳檔案時是否返回上傳進度。
// returnAll引數傳true時,內部欄位為:
{
statusCode: //狀態碼,數字型別
headers: {}, //響應頭,JSON物件
body: '' //訊息體,即伺服器返回的資料。若dataType為json,那麼body為JSON物件,否則為字串
}
複製程式碼
// 上傳檔案時,若report欄位傳true返回上傳進度時,原伺服器返回資料會被放在body欄位裡面,內部欄位為:
{
progress: 100, //上傳進度,0.00-100.00
status: '', //上傳狀態,數字型別。(0:上傳中、1:上傳完成、2:上傳失敗)
body: '' //上傳完成時,伺服器返回的資料。若dataType為json,那麼body為JSON物件,否則為字串
}
複製程式碼
err:
- 型別:JSON 物件
- 內部欄位:
{
statusCode: 400, //網路請求狀態碼,數字型別
code:0, //錯誤碼,數字型別。(0:連線錯誤、1:超時、2:授權錯誤、3:資料型別錯誤)
msg:'' //錯誤描述,字串型別
body: //伺服器返回的原始資料
}複製程式碼
// 表單方式提交資料或檔案
api.ajax({
url: 'http://192.168.1.101:3101/upLoad',
method: 'post',
data: {
values: {
name: 'haha'
},
files: {
file: 'fs://a.gif'
}
}
}, function(ret, err) {
if (ret) {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err) });
}
});
// 提交JSON資料
api.ajax({
url: 'http://192.168.1.101:3101/upLoad',
method: 'post',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
data: {
body: {
name: 'haha'
}
}
}, function(ret, err) {
if (ret) {
api.alert({ msg: JSON.stringify(ret) });
} else {
api.alert({ msg: JSON.stringify(err) });
}
});複製程式碼
(8)對了,還有一個比較實用的方法
getCacheSize
獲取快取佔用空間大小,快取包括下載的快取檔案、拍照臨時檔案以及網頁快取檔案等,計算可能需要花費一些時間
getCacheSize({params}, callback(ret, err))複製程式碼
sync:
- 型別:布林
- 預設值:false
- 描述:執行結果的返回方式。為false時通過callback返回,為true時直接返回。
callback(ret, err)
ret:
- 型別:JSON 物件
- 內部欄位:
{
size: //快取大小,單位為Byte,數字型別。(-1:無儲存裝置、-2:正在準備USB儲存裝置、-3:無法訪問儲存裝置)
}複製程式碼
//非同步返回結果:
api.getCacheSize(function(ret) {
var size = ret.size;
});
//同步返回結果:
var size = api.getCacheSize({
sync: true
});複製程式碼
clearCache
清除快取,包括下載的檔案、拍照臨時檔案、網頁快取檔案等,清除時可能需要消耗一定時間。
clearCache({params}, callback(ret, err))複製程式碼
api.clearCache(function() {
api.toast({
msg: '清除完成'
});
});複製程式碼