v5App FAQ
Q:APP 修改密码提示修改成功,但重新登录密码没修改成功
A:找到文件路径,将 java 文件放入即可ProductPadCommController.zip
例:文件相对路径com/epichust/unimax/appcloud/web/ProductPadCommController.java
则进入路径com/epichust/unimax/appcloud/web
下,将java
文件放入
Q:
1、使用 APICloud 创建新项目,使用 V5App 代码,提示调用模块失败 (模块正常引用情况下)
2、App 新建项目打包或真机调试时 状态栏跟页面顶部重合
3、App 自动更新出现问题
A:需检查在 config.xml 中有没有该行标签<preference name="userAgent" value="APICloud"/>
,如没有需要添加
Q:App 使用 replaceAll()
方法替换空格报错
A:使用 replace(/s+/g,"")
方法替换 replaceAll()
Q:安装 node-sass 报 phyon 错误
A:重新设置淘宝源
$ npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
Q:App 更新问题
近期有项目反应,App 更新会出现大版本更新不上去问题,例如 0.0.100 版本 更新到 0.1.0 版本失败;
A:经问题分析与定位发现,是前台 App 做版本检测的时候没有进行完全校验
问题代码如下
// login.html页面
let reslut = res.data.data.split(":"); // 检测服务器上的App版本 例如 S:0.0.100
if (reslut[0] == "S") {
let serverVersion = Number(reslut[1].replace(/\./g, "")); // 这里做了点号清除,值为 00100
let thisVersion = Number(myVersion.replace(/\./g, "")); // 本地版本 0.1.0 => 010
}
// 上述版本进行比较,会大版本检测失败,导致重复更新安装问题
优化后代码
// login.html页面
// 在methods代码下 新增方法
methods:{
...
/**
* 比较版本号
* version1 > version2 返回 1
* version1 > version2 返回 -1
* version1 = version2 返回 0
*/
compareVersion(version1, version2) {
// 将两个版本号切割成由修订号组成的数组
const arr1 = version1.split(".");
const arr2 = version2.split(".");
// 比较两个数组的长度,得到最大的数组长度 默认为3
const maxLength = Math.max(arr1.length, arr2.length);
// 遍历数组,分别比较同一个位置上的版本号
for (let i = 0; i < maxLength; i++) {
// 从左到右依次比较版本号
const a = arr1[i] || 0;
const b = arr2[i] || 0;
if (Number(a) > Number(b)) {
return 1;
} else if (Number(a) < Number(b)) {
return -1;
}
// 对比结束的时候,就返回 0
if (i === maxLength - 1) {
return 0;
}
}
},
},
// 定位到问题代码 进行更改
let reslut = res.data.data.split(":");
if (reslut[0] == "S") {
let serverVersion = reslut[1];
let thisVersion = myVersion;
if (serverVersion.length != 3 || thisVersion.length != 3) {
window.api.toast({
msg: "版本号出错",
duration: 2000,
location: "middle",
});
}
// 1 为前大于后 -1 后大于前 0 前等于后
let updateControl = this.compareVersion(serverVersion, thisVersion);
if (updateControl === 1) {
...
}else if(updateControl === -1){
...
}
}
在 Mine 页面,checkUpdate()
检查更新方法 做相同修改
Q:ApiCloud 模块 调用 cameraTool 失效替代方法
A:
可以使用 ApiCloud 自带的 window.api.getPicture + UIImageEdit + trans 实现图片拍照加编辑功能
getPicture() {
const UIImageEdit = window.api.require("UIImageEdit");
const trans = window.api.require("trans");
let imgBase64 = "";
let img = "";
window.api.getPicture(
{
sourceType: "camera", // 默认打开相机
encodingType: "jpg", // jpg/png
mediaValue: "pic",
destinationType: "url",
allowEdit: true,
quality: 100, // 拍照质量
saveToPhotoAlbum: false,
},
(res, err) => {
if (res) {
UIImageEdit.open(
{
path: res.data, // 图片路径
savePath:
"fs://test/" +
res.data.split("/")[res.data.split("/").length - 1],
},
(result) => {
let savePath = result.savePath;
trans.decodeImgToBase64(
{
imgPath: savePath,
},
(ret, err) => {
if (ret.status) {
// alert(JSON.stringify(ret));
imgBase64 = "data:image/jpg;base64," + ret.base64Str;
img = ((dataurl, filename) => {
let arr = dataurl.split(",");
let mime = arr[0].match(/:(.*?);/)[1];
let bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
})(
imgBase64,
res.data.split("/")[res.data.split("/").length - 1]
);
this.imags.push({
name: res.data.split("/")[
res.data.split("/").length - 1
],
type: "jpg",
file: img,
image: URL.createObjectURL(img), // 可通过 iframe 标签展示
img:imgBase64 // base64图片 可通过 img 标签展示
});
} else {
alert(JSON.stringify(err));
}
}
);
}
);
} else {
api.alert({
msg: JSON.stringify(err),
});
}
}
);
}