
uniapp关于使用plus.device.getInfo获取imei的值的经验分享
自从新版本的hbuilder x逐渐废弃plus.device.imei的时候,我这边也开始使用plus.device.getInfo,但是使用的过程中发现获取不到imei的值,后面才发现我使用的方法不对,不能像使用 plus.device.imei 的时候直接给变量赋值 然后下文在使用。
不明白的或者看不懂的,直接把我下面的案例代码,拿去执行一下 就就会明白了,imei是怎样获取的
下面直接上一个案例
//开始复制
plus.device.getInfo({
success:function(e){
//这里获取到imei 剩下的逻辑也写在这里面
var imei=e.imei;
//里面写接下来的逻辑
console.log('imei='+imei);//这里是能获取imei的
}
})
//不能在外面再来使用imei 一般是获取不到值的
console.log(imei);//这里的imei是空的 是获取不到的 因为和上面的方法是同时执行的 所以这个时候的imei并没有值
//结束
自从新版本的hbuilder x逐渐废弃plus.device.imei的时候,我这边也开始使用plus.device.getInfo,但是使用的过程中发现获取不到imei的值,后面才发现我使用的方法不对,不能像使用 plus.device.imei 的时候直接给变量赋值 然后下文在使用。
不明白的或者看不懂的,直接把我下面的案例代码,拿去执行一下 就就会明白了,imei是怎样获取的
下面直接上一个案例
//开始复制
plus.device.getInfo({
success:function(e){
//这里获取到imei 剩下的逻辑也写在这里面
var imei=e.imei;
//里面写接下来的逻辑
console.log('imei='+imei);//这里是能获取imei的
}
})
//不能在外面再来使用imei 一般是获取不到值的
console.log(imei);//这里的imei是空的 是获取不到的 因为和上面的方法是同时执行的 所以这个时候的imei并没有值
//结束
收起阅读 »
人人商城打包APP说明
插件支持功能
1、支付宝原生支付,微信原生支付
2、分享微信,微博,QQ
3、微信App验证功能,上架苹果市场时必须用到。
4、退出App
5、清理App缓存
6、状态栏颜色随网页内导航条变化
需要准备
1、人人商城网站系统
2、初雪云高级版本App制作网址:https://www.chuxueyun.com/deal/5/cateid-30.html
3、人人电商的插件下载:https://www.lanzous.com/i5ciy5e
4、需先申请微信开放平台权限,支付权限,登录权限,分享权限申请,申请地址:https://open.weixin.qq.com/
5、申请QQ互联权限,申请地址:https://connect.qq.com/index.html
6、申请支付宝支付权限,申请地址:https://b.alipay.com/index2.htm
注意
1:支付配置
安装后端插件:http://t.cn/AiYF6JQX
下载人人商城的插件,解压替换到对应的ewei_shopv2目录内。
注意
请先在人人商城后台配置好支付设置,如下图:
2:微信登录修改
ewei_shopv2\core\model\member.php 文件checkMemberSNS方法里,大概位置在886行
$token = trim($_GPC['token']);
改成
$token = trim($_GPC['access_token']);
$appid和$secret的数值改成自己的微信开放平台的appid和秘钥即可,大概位置在889行
ewei_shopv2\core\mobile\account\index.php文件中sns()方法里将, 大概位置在189行

if ($_W['ispost'] && !empty($sns) && !empty($_GPC['openid']))
改成
if (!empty($sns) && !empty($_GPC['openid'])) {
3.配置平台的UA
设置User Agant
打开App制作平台点击基础配置–>User Agant配置,UA类型选择:自定义 自定义UA填写CK 2.0一定要大写。(中间有个空格)
第三方配置:微信配置填写微信开放平台对应的值,一定要是开放平台,网址https://open.weixin.qq.com
第三方配置:QQ配置填写QQ开放平台对应的值,一定要是开放平台,网址http://open.qq.com QQ安卓登录与分享权限,要求上架应用宝后才可以使用
APP内对应的支付,第三方登录,分享功能全部打开。
高级配置:打开新窗口,请开启
如果被拒,请查看:链接(http://webapp.chuxueyun.com/1174652)
插件支持功能
1、支付宝原生支付,微信原生支付
2、分享微信,微博,QQ
3、微信App验证功能,上架苹果市场时必须用到。
4、退出App
5、清理App缓存
6、状态栏颜色随网页内导航条变化
需要准备
1、人人商城网站系统
2、初雪云高级版本App制作网址:https://www.chuxueyun.com/deal/5/cateid-30.html
3、人人电商的插件下载:https://www.lanzous.com/i5ciy5e
4、需先申请微信开放平台权限,支付权限,登录权限,分享权限申请,申请地址:https://open.weixin.qq.com/
5、申请QQ互联权限,申请地址:https://connect.qq.com/index.html
6、申请支付宝支付权限,申请地址:https://b.alipay.com/index2.htm
注意
1:支付配置
安装后端插件:http://t.cn/AiYF6JQX
下载人人商城的插件,解压替换到对应的ewei_shopv2目录内。
注意
请先在人人商城后台配置好支付设置,如下图:
2:微信登录修改
ewei_shopv2\core\model\member.php 文件checkMemberSNS方法里,大概位置在886行
$token = trim($_GPC['token']);
改成
$token = trim($_GPC['access_token']);
$appid和$secret的数值改成自己的微信开放平台的appid和秘钥即可,大概位置在889行
ewei_shopv2\core\mobile\account\index.php文件中sns()方法里将, 大概位置在189行
if ($_W['ispost'] && !empty($sns) && !empty($_GPC['openid']))
改成
if (!empty($sns) && !empty($_GPC['openid'])) {
3.配置平台的UA
设置User Agant
打开App制作平台点击基础配置–>User Agant配置,UA类型选择:自定义 自定义UA填写CK 2.0一定要大写。(中间有个空格)
第三方配置:微信配置填写微信开放平台对应的值,一定要是开放平台,网址https://open.weixin.qq.com
第三方配置:QQ配置填写QQ开放平台对应的值,一定要是开放平台,网址http://open.qq.com QQ安卓登录与分享权限,要求上架应用宝后才可以使用
APP内对应的支付,第三方登录,分享功能全部打开。
高级配置:打开新窗口,请开启
如果被拒,请查看:链接(http://webapp.chuxueyun.com/1174652)
收起阅读 »
vue 动态加载百度地图库(局部)
map.js文件
export default {
init: function (){
//console.log("初始化百度地图脚本...");
const AK = "AK";
const BMap_URL = "https://api.map.baidu.com/api?v=2.0&ak="+ AK +"&s=1&callback=onBMapCallback";
return new Promise((resolve, reject) => {
// 如果已加载直接返回
if(typeof BMap !== "undefined") {
resolve(BMap);
return true;
}
// 百度地图异步加载回调处理
window.onBMapCallback = function () {
// console.log("百度地图脚本初始化成功...");
resolve(BMap);
};
// 插入script脚本
let scriptNode = document.createElement("script");
scriptNode.setAttribute("type", "text/javascript");
scriptNode.setAttribute("src", BMap_URL);
document.body.appendChild(scriptNode);
});
}
}
vue文件
import BaiduMap from './map.js';
BaiduMap.init().then((BMap) => {
this.loadScript('http://unpkg.com/inmap/dist/inmap.min.js',()=>{
this.init();
});
});
map.js文件
export default {
init: function (){
//console.log("初始化百度地图脚本...");
const AK = "AK";
const BMap_URL = "https://api.map.baidu.com/api?v=2.0&ak="+ AK +"&s=1&callback=onBMapCallback";
return new Promise((resolve, reject) => {
// 如果已加载直接返回
if(typeof BMap !== "undefined") {
resolve(BMap);
return true;
}
// 百度地图异步加载回调处理
window.onBMapCallback = function () {
// console.log("百度地图脚本初始化成功...");
resolve(BMap);
};
// 插入script脚本
let scriptNode = document.createElement("script");
scriptNode.setAttribute("type", "text/javascript");
scriptNode.setAttribute("src", BMap_URL);
document.body.appendChild(scriptNode);
});
}
}
vue文件
import BaiduMap from './map.js';
BaiduMap.init().then((BMap) => {
this.loadScript('http://unpkg.com/inmap/dist/inmap.min.js',()=>{
this.init();
});
});
收起阅读 »

android ios 权限检查与动态申请提示
ios 就这个个性,应用第一次用权限时,比如 相机 权限,检查的话是不存在的!就算打开 应用的权限页面 也没用,因为里面没有 相机 权限...,算了,不多说了,怀疑自己个儿抑郁了....直接发代码了,在逻辑上很可能不完善,还望懂行的道友...
/**
* 获取系统权限
* @param {Object} permission 权限标识
* CAMERA: (String 类型 )访问摄像头权限 用于调用摄像头(plus.camera.* plus.barcode.*)
* CONTACTS: (String 类型 )访问系统联系人权限 用于访问(读、写)系统通讯录(plus.gallery.*)
* GALLERY: (String 类型 )访问系统相册权限 用于访问(读、写)系统相册(plus.gallery.*)
* LOCATION: (String 类型 )定位权限 用于获取当前用户位置信息(plus.geolocation.*)
* NOTIFITION: (String 类型 )消息通知权限 用于接收系统消息通知(plus.push.*)
* RECORD: (String 类型 )录音权限 用于进行本地录音操作(plus.audio.AudioRecorder)
* SHORTCUT: (String 类型 )创建桌面快捷方式权限 用于在系统桌面创建快捷方式图标(plus.navigator.createShortcut)
*
* @param {Object} successCallBack 成功回调
* @param {Object} errorCallBack 失败回调
*/
function getPermission(permissionIdentity, successCallBack, errorCallBack){
//权限标识转换成大写
var permissionIdentity = permissionIdentity.toUpperCase();
//获取检测权限的状态
var checkResult = plus.navigator.checkPermission(permissionIdentity);
//权限状态是否正常
var permissionStatusOk = false;
//权限中文名称
var permissionName = '';
//对应 andorid 的具体权限
var androidPermission = '';
//获取权限中文意思与对应 android 系统的权限字符串
switch (permissionIdentity) {
case 'CAMERA':
permissionName = '摄像头';
androidPermission = 'android.permission.CAMERA';
break;
case 'CONTACTS':
permissionName = '系统联系人';
androidPermission = 'android.permission.READ_CONTACTS'
break;
case 'GALLERY':
permissionName = '系统相册';
androidPermission = 'android.permission.READ_EXTERNAL_STORAGE';
break;
case 'LOCATION':
permissionName = '定位';
androidPermission = 'android.permission.ACCESS_COARSE_LOCATION';
break;
case 'NOTIFITION':
permissionName = '消息通知';
androidPermission = '消息通知';
break;
case 'RECORD':
permissionName = '录音';
androidPermission = 'android.permission.RECORD_AUDIO';
break;
case 'SHORTCUT':
permissionName = '创建桌面快捷方式';
androidPermission = 'com.android.launcher.permission.INSTALL_SHORTCUT';
break;
default:
permissionName = '未知';
androidPermission = '未知';
break;
}
//判断检查权限的结果
switch (checkResult) {
case 'authorized':
//正常的
permissionStatusOk = true
break;
case 'denied':
//表示程序已被用户拒绝使用此权限,如果是拒绝的就再次提示用户打开确认提示框
//如果有该权限但是没有打开不进行操作还是会去申请或手动打开
// console.log('已关闭' + permissionName + '权限')
// errorCallBack('已关闭' + permissionName + '权限');
// return
break;
case 'undetermined':
// 表示程序未确定是否可使用此权限,此时调用对应的API时系统会弹出提示框让用户确认
// this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)
// errorCallBack('未确定' + permissionName + '权限');
// return
break;
case 'unknown':
errorCallBack('无法查询' + permissionName + '权限');
return
break;
default:
errorCallBack('不支持' + permissionName + '权限');
return
break;
}
//如果权限是正常的执行成功回调
if (permissionStatusOk) {
successCallBack()
} else {
//如果不正常,如果是 andorid 系统,就动态申请权限
if (plus.os.name == 'Android') {
//动态申请权限
plus.android.requestPermissions([androidPermission], function(e) {
if (e.deniedAlways.length > 0) {
//权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
errorCallBack(permissionName + ' 权限被永久拒绝,请到设置权限里找到应用手动开启权限,否则将不能使用此功能。')
// console.log('Always Denied!!! ' + e.deniedAlways.toString());
}
if (e.deniedPresent.length > 0) {
//权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
errorCallBack('拒绝开启 ' + permissionName + ' 权限,将不能使用此功能!')
// console.log('Present Denied!!! ' + e.deniedPresent.toString());
}
if (e.granted.length > 0) {
//权限被允许
//调用依赖获取定位权限的代码
successCallBack()
// console.log('Granted!!! ' + e.granted.toString());
}
}, function(e) {
errorCallBack('请求 ' + permissionName + ' 权限失败,' + +JSON.stringify(e))
// console.log('Request Permissions error:' + JSON.stringify(e));
})
} else if (plus.os.name == 'iOS') {
//ios ,第一次使用目的权限时,应用的权限列表里是不存在的,所以先默认执行一下成功回调,打开要使用的操作,比如 plus.camera
//这时系统会提示是否打开相应的权限,如果拒绝也没关系,因为应用的权限列表里已经存在该权限了,下次再调用相应权限时,就会
//走 else 里的流程,会给用户提示,并且跳转到应该的权限页面,让用户手动打开。
if (checkResult == 'undetermined') {
//调用依赖获取定位权限的代码
successCallBack(true)
} else {
//如果是 ios 系统,ios 没有动态申请操作,所以提示用户去设置页面手动打开
mui.confirm(permissionName + ' 权限没有开启,是否去开启?', '提醒', ['取消', '确认'], function(e) {
//取消
if (e.index == 0) {
errorCallBack('拒绝开启 ' + permissionName + ' 权限,将不能使用此功能!')
} else if (e.index == 1) {
//确认,打开当前应用权限设置页面
var UIApplication = plus.ios.import('UIApplication');
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import('NSURL');
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString('app-settings:');
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2)
}
}, 'div')
}
}
}
}
代码使用示例:
//先动态申请权限
getPermission('CAMERA', function() {
/拍照/
that._takePhoto()
}, function(msg) {
mui.alert(msg, '提醒', '确定', function() {}, 'div')
})
传参传注释里的大写。
涛声依旧吧,先这么着,有问题大家伙讨论。
ios 就这个个性,应用第一次用权限时,比如 相机 权限,检查的话是不存在的!就算打开 应用的权限页面 也没用,因为里面没有 相机 权限...,算了,不多说了,怀疑自己个儿抑郁了....直接发代码了,在逻辑上很可能不完善,还望懂行的道友...
/**
* 获取系统权限
* @param {Object} permission 权限标识
* CAMERA: (String 类型 )访问摄像头权限 用于调用摄像头(plus.camera.* plus.barcode.*)
* CONTACTS: (String 类型 )访问系统联系人权限 用于访问(读、写)系统通讯录(plus.gallery.*)
* GALLERY: (String 类型 )访问系统相册权限 用于访问(读、写)系统相册(plus.gallery.*)
* LOCATION: (String 类型 )定位权限 用于获取当前用户位置信息(plus.geolocation.*)
* NOTIFITION: (String 类型 )消息通知权限 用于接收系统消息通知(plus.push.*)
* RECORD: (String 类型 )录音权限 用于进行本地录音操作(plus.audio.AudioRecorder)
* SHORTCUT: (String 类型 )创建桌面快捷方式权限 用于在系统桌面创建快捷方式图标(plus.navigator.createShortcut)
*
* @param {Object} successCallBack 成功回调
* @param {Object} errorCallBack 失败回调
*/
function getPermission(permissionIdentity, successCallBack, errorCallBack){
//权限标识转换成大写
var permissionIdentity = permissionIdentity.toUpperCase();
//获取检测权限的状态
var checkResult = plus.navigator.checkPermission(permissionIdentity);
//权限状态是否正常
var permissionStatusOk = false;
//权限中文名称
var permissionName = '';
//对应 andorid 的具体权限
var androidPermission = '';
//获取权限中文意思与对应 android 系统的权限字符串
switch (permissionIdentity) {
case 'CAMERA':
permissionName = '摄像头';
androidPermission = 'android.permission.CAMERA';
break;
case 'CONTACTS':
permissionName = '系统联系人';
androidPermission = 'android.permission.READ_CONTACTS'
break;
case 'GALLERY':
permissionName = '系统相册';
androidPermission = 'android.permission.READ_EXTERNAL_STORAGE';
break;
case 'LOCATION':
permissionName = '定位';
androidPermission = 'android.permission.ACCESS_COARSE_LOCATION';
break;
case 'NOTIFITION':
permissionName = '消息通知';
androidPermission = '消息通知';
break;
case 'RECORD':
permissionName = '录音';
androidPermission = 'android.permission.RECORD_AUDIO';
break;
case 'SHORTCUT':
permissionName = '创建桌面快捷方式';
androidPermission = 'com.android.launcher.permission.INSTALL_SHORTCUT';
break;
default:
permissionName = '未知';
androidPermission = '未知';
break;
}
//判断检查权限的结果
switch (checkResult) {
case 'authorized':
//正常的
permissionStatusOk = true
break;
case 'denied':
//表示程序已被用户拒绝使用此权限,如果是拒绝的就再次提示用户打开确认提示框
//如果有该权限但是没有打开不进行操作还是会去申请或手动打开
// console.log('已关闭' + permissionName + '权限')
// errorCallBack('已关闭' + permissionName + '权限');
// return
break;
case 'undetermined':
// 表示程序未确定是否可使用此权限,此时调用对应的API时系统会弹出提示框让用户确认
// this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)
// errorCallBack('未确定' + permissionName + '权限');
// return
break;
case 'unknown':
errorCallBack('无法查询' + permissionName + '权限');
return
break;
default:
errorCallBack('不支持' + permissionName + '权限');
return
break;
}
//如果权限是正常的执行成功回调
if (permissionStatusOk) {
successCallBack()
} else {
//如果不正常,如果是 andorid 系统,就动态申请权限
if (plus.os.name == 'Android') {
//动态申请权限
plus.android.requestPermissions([androidPermission], function(e) {
if (e.deniedAlways.length > 0) {
//权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
errorCallBack(permissionName + ' 权限被永久拒绝,请到设置权限里找到应用手动开启权限,否则将不能使用此功能。')
// console.log('Always Denied!!! ' + e.deniedAlways.toString());
}
if (e.deniedPresent.length > 0) {
//权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
errorCallBack('拒绝开启 ' + permissionName + ' 权限,将不能使用此功能!')
// console.log('Present Denied!!! ' + e.deniedPresent.toString());
}
if (e.granted.length > 0) {
//权限被允许
//调用依赖获取定位权限的代码
successCallBack()
// console.log('Granted!!! ' + e.granted.toString());
}
}, function(e) {
errorCallBack('请求 ' + permissionName + ' 权限失败,' + +JSON.stringify(e))
// console.log('Request Permissions error:' + JSON.stringify(e));
})
} else if (plus.os.name == 'iOS') {
//ios ,第一次使用目的权限时,应用的权限列表里是不存在的,所以先默认执行一下成功回调,打开要使用的操作,比如 plus.camera
//这时系统会提示是否打开相应的权限,如果拒绝也没关系,因为应用的权限列表里已经存在该权限了,下次再调用相应权限时,就会
//走 else 里的流程,会给用户提示,并且跳转到应该的权限页面,让用户手动打开。
if (checkResult == 'undetermined') {
//调用依赖获取定位权限的代码
successCallBack(true)
} else {
//如果是 ios 系统,ios 没有动态申请操作,所以提示用户去设置页面手动打开
mui.confirm(permissionName + ' 权限没有开启,是否去开启?', '提醒', ['取消', '确认'], function(e) {
//取消
if (e.index == 0) {
errorCallBack('拒绝开启 ' + permissionName + ' 权限,将不能使用此功能!')
} else if (e.index == 1) {
//确认,打开当前应用权限设置页面
var UIApplication = plus.ios.import('UIApplication');
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import('NSURL');
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString('app-settings:');
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2)
}
}, 'div')
}
}
}
}
代码使用示例:
//先动态申请权限
getPermission('CAMERA', function() {
/拍照/
that._takePhoto()
}, function(msg) {
mui.alert(msg, '提醒', '确定', function() {}, 'div')
})
传参传注释里的大写。
涛声依旧吧,先这么着,有问题大家伙讨论。

nui-app h5微信分享的jweixin demo
第一步:npm install jweixin-module --save
第二步:在main.js里或者具体的页面这样写
import jswx from 'jweixin-module/out/index.js'
let wx_config = “后台返回的config”
jswx.config(
{
debug:false,
appId:wx_config.appId, // 必填,公众号的唯一标识
timestamp:wx_config.timestamp , // 必填,生成签名的时间戳
nonceStr: wx_config.nonceStr, // 必填,生成签名的随机串
signature: wx_config.signature,// 必填,签名
jsApiList:wx_config.jsApiList // 必填,需要使用的JS接口列表
}
);
jswx.ready(()=>{
//分享给朋友
jswx.onMenuShareTimeline({
title: 'xxxx', // 分享标题
link: 'https://www.xxx.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https:///www.xxx.com/icon.png', // 分享图标
success: function () {
// 用户点击了分享后执行的回调函数
},
});
//分享朋友圈
jswx.onMenuShareAppMessage({
title: 'xxxx', // 分享标题
desc: 'xxxx', // 分享描述
link: 'https://www.xxx.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https:///www.xxx.com/icon.png', // 分享图标
success: function () {
uni.showToast({
title: '分享成功',
duration: 2000
});
}
});
})
//以上
亲测可用,再有问题就是后台的锅了,怼他们。。。。。还有一个,如果一切正常报:invalid Signature ,那有可能是后台需要获取你前端当前页面的href,否则一直会报这个错,你获取window.location.href给它,如果是tp5的话,应该是
$url = ‘当前链接(前端获取分享那页的链接:window.location.href,传过来这里)’//这步非常重要,官方文档都没有的
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
生成签名的这个位置
最终效果
第一步:npm install jweixin-module --save
第二步:在main.js里或者具体的页面这样写
import jswx from 'jweixin-module/out/index.js'
let wx_config = “后台返回的config”
jswx.config(
{
debug:false,
appId:wx_config.appId, // 必填,公众号的唯一标识
timestamp:wx_config.timestamp , // 必填,生成签名的时间戳
nonceStr: wx_config.nonceStr, // 必填,生成签名的随机串
signature: wx_config.signature,// 必填,签名
jsApiList:wx_config.jsApiList // 必填,需要使用的JS接口列表
}
);
jswx.ready(()=>{
//分享给朋友
jswx.onMenuShareTimeline({
title: 'xxxx', // 分享标题
link: 'https://www.xxx.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https:///www.xxx.com/icon.png', // 分享图标
success: function () {
// 用户点击了分享后执行的回调函数
},
});
//分享朋友圈
jswx.onMenuShareAppMessage({
title: 'xxxx', // 分享标题
desc: 'xxxx', // 分享描述
link: 'https://www.xxx.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https:///www.xxx.com/icon.png', // 分享图标
success: function () {
uni.showToast({
title: '分享成功',
duration: 2000
});
}
});
})
//以上
亲测可用,再有问题就是后台的锅了,怼他们。。。。。还有一个,如果一切正常报:invalid Signature ,那有可能是后台需要获取你前端当前页面的href,否则一直会报这个错,你获取window.location.href给它,如果是tp5的话,应该是
$url = ‘当前链接(前端获取分享那页的链接:window.location.href,传过来这里)’//这步非常重要,官方文档都没有的
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
生成签名的这个位置
最终效果
收起阅读 »
公告:uni-app V3版本公测;小米商店/应用宝隐私问题公告;关于Apple发布的App Updates for HTML5 Apps 的说明
关于Apple发布的 App Updates for HTML5 Apps 的说明
详见:https://ask.dcloud.net.cn/article/36654
重磅:uni-app V3版本公测,App端性能、功能大幅提升
更快的启动速度、更多vue语法支持、更方便的开发体验,详见:https://ask.dcloud.net.cn/article/36599
小米应用商店/应用宝隐私管理问题公告
- 小米应用商店,打包时选择小米渠道包即可。详见:https://ask.dcloud.net.cn/article/36602
- 应用宝,升级到HBuilderX2.4.3+重新打包即可。详见:https://ask.dcloud.net.cn/article/36549
微信小程序2.9.3基础库,input事件失效
微信基础库2.9.3版本在微信开发者工具模拟器端,存在input事件失效
的Bug,真机运行没问题。
该Bug影响uni-app
在微信开发者工具模拟器端的运行测试(同样真机运行没问题),具体表现有:
input
事件不触发- 表单双向数据绑定失效
该问题目前微信官方已受理(详见微信社区),目前建议开发者临时手动降低基础库版本为2.9.2
,uni-app
今天也会发布紧急更新版,将微信基础库版本策略由默认最新
修改为2.9.2
,临时解决微信平台的Bug。
阿里小程序IDE官方内嵌uni-app,为开发者提供多端开发服务
详见:https://ask.dcloud.net.cn/article/36485
老版iOS基座过期无法安装的公告
老版HBuilder及HBuilderX 2.3.3.20190923以下的版本,由于iOS企业证书过期,会导致真机运行时默认基座无法安装到iOS设备。需升级新版HBuilderX,详见:https://ask.dcloud.net.cn/article/36523
HBuilderX(alpha)云端打包提交AppStore报WARNING ITMS-90703的公告
详见:https://ask.dcloud.net.cn/article/36588
uni-app 2.3 新版使用注意
uni-app升级,可能会导致老版代码无法正常运行。这并非DCloud所愿,引发这类问题的原因包括:
- 三方平台升级,比如iOS13升级导致很多问题,还引发微信等sdk升级的连锁反应
- 因为性能问题。为了让应用性能更高,重构了某些实现,废弃了影响性能的写法。比如废弃非自定义组件模式。
最近新版升级注意详见下:- 2.3.4起,tabbar改为纯原生方式实现,无法再通过plus.webview获取tabbar。并且App端高度从之前的56px调整为50px,目前是为了和H5端统一(H5一直是50px)。如需调节回原来的56px,可以在pages.json里配置高度(后期其他端也会支持高度设置,如果不想各端一致,可以使用条件编译)。之前版本iOS上tabbar页面在内存不足时会白屏,也一同解决了
- 2.3.4起,内置了bindingx,无需再手动import npm库。直接uni.requireNativePlugin('bindingx')即可使用。
- 2.3.4起,微信的新版分享登录支付SDK升级,要求配置通用链接,否则会打包失败,详见https://ask.dcloud.net.cn/article/36445
- 5+App或uni-app的web-view组件在iOS上默认改为WKWebview后,会产生跨域导致的联网失败问题、本地跨目录Http请求失败问题、js原生加密失效、拍照等大内存占用操作白屏等问题,详见:https://ask.dcloud.net.cn/article/36348
- uni-app H5平台 新增 icon 组件,导致 uni-icon 不显示的问题,详见:https://ask.dcloud.net.cn/article/36404
- 升级后运行到小程序平台,提示 tongji.dcloud.io 不在安全域名名单的问题:这是因为新增了uni统计,一份报表看全端数据,详见 https://tongji.dcloud.io。在小程序端,使用uni统计需在安全域名名单中新增 tongji.dcloud.io 。如不需要uni统计,可在manifest中关闭。开通和关闭详见:https://ask.dcloud.net.cn/article/36303
- 新版默认为自定义组件模式,而老版如果manifest不指定则是非自定义组件模式。如果新版无法编译老项目大多因为这个原因。详见:https://ask.dcloud.net.cn/article/36385
- 2.3.4起,Android平台Webview窗口先隐藏(hide)再添加(append)到父窗口后仍然会显示的Bug,导致mui中tabbar-webview显示有问题。2.3.8版本已修复。
iOS13适配
iOS13适配工作已完成,请升级新版2.3.5。
- 关于iOS13上uni-app页面无法滚动的问题,详见https://ask.dcloud.net.cn/article/36410
- 微信等三方SDK伴随iOS13都升级了,在HBuilderX 2.3.4中已经升级完毕,iOS平台提交云端打包需要配置通用链接(Universal Link),否则会打包失败,详见https://ask.dcloud.net.cn/article/36445。
- 2.2.5版-2.3.3版,iOS上带tab的页面在手机内存不足时可能出现白屏,在HBuilderX 2.3.4 中已修复。
iOS13引发了Appstore审核的2个政策变化,需注意
- iOS上架时遇到蓝牙权限NSBluetoothAlwaysUsageDescription问题的说明
详见:https://ask.dcloud.net.cn/article/36396 - Appstore审核反馈废弃UIWebview APIs的说明
详见:https://ask.dcloud.net.cn/article/36348
uni-app 2.3 重要更新如下:
- 新增了uni统计,一份报表看全端数据,详见 https://tongji.dcloud.io。
在小程序端,使用uni统计需在安全域名名单中新增 tongji.dcloud.io 。如不需要uni统计,可在manifest中关闭。开通和关闭详见:https://ask.dcloud.net.cn/article/36303 - 新增 wxs
- nvue支持vuex
- App平台 适配 iOS13
- App平台 优化 页面背景样式生效时机,解决深色背景等特定场景下,页面切换时闪白的问题
- App平台 优化 Android上使用tab的应用降低内存占用,转场动画和页面滚动更平顺
- App平台 修复 个推SDK引起的蓝牙权限影响Appstore审核的问题以及隐私政策引发Google Play Store下架问题
- App平台 支持原生凸起的tabbar
- App平台 支持打包时原生混淆加密nvue文件
- App平台 适配 MIUI11,解决toast背景为白色,导致前景色无法看清的问题
关于2019年11月1日起,uni-app不再支持非自定义组件模式的公告:
详见:https://ask.dcloud.net.cn/article/36385
DCloud帮Vue官网提供免费Vue视频教程:
详见:https://ask.dcloud.net.cn/article/36363
vue conf大会上DCloud CTO崔红保的演讲
uni-app的性能为什么高于微信原生开发和其他小程序框架?来看这个视频讲解框架底层的原理:
https://v.qq.com/x/page/r0886mn8v6l.html
关于Apple发布的 App Updates for HTML5 Apps 的说明
详见:https://ask.dcloud.net.cn/article/36654
重磅:uni-app V3版本公测,App端性能、功能大幅提升
更快的启动速度、更多vue语法支持、更方便的开发体验,详见:https://ask.dcloud.net.cn/article/36599
小米应用商店/应用宝隐私管理问题公告
- 小米应用商店,打包时选择小米渠道包即可。详见:https://ask.dcloud.net.cn/article/36602
- 应用宝,升级到HBuilderX2.4.3+重新打包即可。详见:https://ask.dcloud.net.cn/article/36549
微信小程序2.9.3基础库,input事件失效
微信基础库2.9.3版本在微信开发者工具模拟器端,存在input事件失效
的Bug,真机运行没问题。
该Bug影响uni-app
在微信开发者工具模拟器端的运行测试(同样真机运行没问题),具体表现有:
input
事件不触发- 表单双向数据绑定失效
该问题目前微信官方已受理(详见微信社区),目前建议开发者临时手动降低基础库版本为2.9.2
,uni-app
今天也会发布紧急更新版,将微信基础库版本策略由默认最新
修改为2.9.2
,临时解决微信平台的Bug。
阿里小程序IDE官方内嵌uni-app,为开发者提供多端开发服务
详见:https://ask.dcloud.net.cn/article/36485
老版iOS基座过期无法安装的公告
老版HBuilder及HBuilderX 2.3.3.20190923以下的版本,由于iOS企业证书过期,会导致真机运行时默认基座无法安装到iOS设备。需升级新版HBuilderX,详见:https://ask.dcloud.net.cn/article/36523
HBuilderX(alpha)云端打包提交AppStore报WARNING ITMS-90703的公告
详见:https://ask.dcloud.net.cn/article/36588
uni-app 2.3 新版使用注意
uni-app升级,可能会导致老版代码无法正常运行。这并非DCloud所愿,引发这类问题的原因包括:
- 三方平台升级,比如iOS13升级导致很多问题,还引发微信等sdk升级的连锁反应
- 因为性能问题。为了让应用性能更高,重构了某些实现,废弃了影响性能的写法。比如废弃非自定义组件模式。
最近新版升级注意详见下:- 2.3.4起,tabbar改为纯原生方式实现,无法再通过plus.webview获取tabbar。并且App端高度从之前的56px调整为50px,目前是为了和H5端统一(H5一直是50px)。如需调节回原来的56px,可以在pages.json里配置高度(后期其他端也会支持高度设置,如果不想各端一致,可以使用条件编译)。之前版本iOS上tabbar页面在内存不足时会白屏,也一同解决了
- 2.3.4起,内置了bindingx,无需再手动import npm库。直接uni.requireNativePlugin('bindingx')即可使用。
- 2.3.4起,微信的新版分享登录支付SDK升级,要求配置通用链接,否则会打包失败,详见https://ask.dcloud.net.cn/article/36445
- 5+App或uni-app的web-view组件在iOS上默认改为WKWebview后,会产生跨域导致的联网失败问题、本地跨目录Http请求失败问题、js原生加密失效、拍照等大内存占用操作白屏等问题,详见:https://ask.dcloud.net.cn/article/36348
- uni-app H5平台 新增 icon 组件,导致 uni-icon 不显示的问题,详见:https://ask.dcloud.net.cn/article/36404
- 升级后运行到小程序平台,提示 tongji.dcloud.io 不在安全域名名单的问题:这是因为新增了uni统计,一份报表看全端数据,详见 https://tongji.dcloud.io。在小程序端,使用uni统计需在安全域名名单中新增 tongji.dcloud.io 。如不需要uni统计,可在manifest中关闭。开通和关闭详见:https://ask.dcloud.net.cn/article/36303
- 新版默认为自定义组件模式,而老版如果manifest不指定则是非自定义组件模式。如果新版无法编译老项目大多因为这个原因。详见:https://ask.dcloud.net.cn/article/36385
- 2.3.4起,Android平台Webview窗口先隐藏(hide)再添加(append)到父窗口后仍然会显示的Bug,导致mui中tabbar-webview显示有问题。2.3.8版本已修复。
iOS13适配
iOS13适配工作已完成,请升级新版2.3.5。
- 关于iOS13上uni-app页面无法滚动的问题,详见https://ask.dcloud.net.cn/article/36410
- 微信等三方SDK伴随iOS13都升级了,在HBuilderX 2.3.4中已经升级完毕,iOS平台提交云端打包需要配置通用链接(Universal Link),否则会打包失败,详见https://ask.dcloud.net.cn/article/36445。
- 2.2.5版-2.3.3版,iOS上带tab的页面在手机内存不足时可能出现白屏,在HBuilderX 2.3.4 中已修复。
iOS13引发了Appstore审核的2个政策变化,需注意
- iOS上架时遇到蓝牙权限NSBluetoothAlwaysUsageDescription问题的说明
详见:https://ask.dcloud.net.cn/article/36396 - Appstore审核反馈废弃UIWebview APIs的说明
详见:https://ask.dcloud.net.cn/article/36348
uni-app 2.3 重要更新如下:
- 新增了uni统计,一份报表看全端数据,详见 https://tongji.dcloud.io。
在小程序端,使用uni统计需在安全域名名单中新增 tongji.dcloud.io 。如不需要uni统计,可在manifest中关闭。开通和关闭详见:https://ask.dcloud.net.cn/article/36303 - 新增 wxs
- nvue支持vuex
- App平台 适配 iOS13
- App平台 优化 页面背景样式生效时机,解决深色背景等特定场景下,页面切换时闪白的问题
- App平台 优化 Android上使用tab的应用降低内存占用,转场动画和页面滚动更平顺
- App平台 修复 个推SDK引起的蓝牙权限影响Appstore审核的问题以及隐私政策引发Google Play Store下架问题
- App平台 支持原生凸起的tabbar
- App平台 支持打包时原生混淆加密nvue文件
- App平台 适配 MIUI11,解决toast背景为白色,导致前景色无法看清的问题
关于2019年11月1日起,uni-app不再支持非自定义组件模式的公告:
详见:https://ask.dcloud.net.cn/article/36385
DCloud帮Vue官网提供免费Vue视频教程:
详见:https://ask.dcloud.net.cn/article/36363
vue conf大会上DCloud CTO崔红保的演讲
uni-app的性能为什么高于微信原生开发和其他小程序框架?来看这个视频讲解框架底层的原理:
https://v.qq.com/x/page/r0886mn8v6l.html

uni-app微信小程序运行
uni-app微信小程序运行
新手可能使用uni-app开发时,想在微信开发者工具预览,经常会遇到各种问题,在此写一个操作步骤
新手可能遇到过这个的问题
操作步骤
运行微信开发者工具前需要一些配置
创建uni-app项目这里步骤忽略了。。。,默认你们已经创建好了uni-app项目了
步骤一
步骤二
步骤三
步骤四
步骤五
这样就代表运行成功了,赶快去试试吧
uni-app微信小程序运行
新手可能使用uni-app开发时,想在微信开发者工具预览,经常会遇到各种问题,在此写一个操作步骤
新手可能遇到过这个的问题
操作步骤
运行微信开发者工具前需要一些配置
创建uni-app项目这里步骤忽略了。。。,默认你们已经创建好了uni-app项目了
步骤一
步骤二
步骤三
步骤四
步骤五
这样就代表运行成功了,赶快去试试吧
收起阅读 »
Windows申请iOS证书p12及描述文件mobileprovision
使用自己证书打包iOS时需要上传两个iOS证书文件p12及描述文件mobileprovision
以申请一份iOS发布证书为例,iOS发布证书用于上架!
一、申请iOS发布证书(p12文件)
Windows申请iOS证书需要用到Appuploader这个软件
如果还没安装Appuploader先安装好
1.1、登录软件后,点击证书进入,点击右下角+ADD选择,下拉选择发布证书
证书名称:不要中文、随意设置
邮箱:随意
密码:证书的密码、比如设置123这样,不用很复杂,记好、打包时要用、很重要
应用id:这里不用选
点击ok创建。
1.2、创建成功后,找到刚创建的发布证书(iOS Distribution这个类型的就是发布证书,如果之前创建过请看过期时间就知道哪个是新创建的了),点击p12 文件,下载保存.p12证书文件到电脑。
二、创建iOS发布描述文件(.mobileprovision文件)
2.1、返回Appuploader首页,选择描述文件。
2.2、点击+ ADD,对应选择发布版profile
应用id:选择对应的id(又称套装id,appid,BundleID,包名)
证书:选中全部就行
Devices:设备这里不像选开发版profile时会出现,发布版不用选。
输入名称:不要中文,随意,123之类的就行,注意不要跟之前申请过的名称一样),点击ok创建。
2.3、选择刚创建的发布版描述文件(iOS Distribution这个类型的就是发布描述文件,找刚创建的输入的名称),点击Download下载,保存到电脑
得到了p12及描述文件mobileprovision上传打包即可!
AppID:填写申请描述文件时选择的应用id
profile文件,选择上传配置文件.mobileprovision
私钥证书,上传.p12文件
私钥密码,输入创建p12设置的密码。
然后点击打包。
使用自己证书打包iOS时需要上传两个iOS证书文件p12及描述文件mobileprovision
以申请一份iOS发布证书为例,iOS发布证书用于上架!
一、申请iOS发布证书(p12文件)
Windows申请iOS证书需要用到Appuploader这个软件
如果还没安装Appuploader先安装好
1.1、登录软件后,点击证书进入,点击右下角+ADD选择,下拉选择发布证书
证书名称:不要中文、随意设置
邮箱:随意
密码:证书的密码、比如设置123这样,不用很复杂,记好、打包时要用、很重要
应用id:这里不用选
点击ok创建。
1.2、创建成功后,找到刚创建的发布证书(iOS Distribution这个类型的就是发布证书,如果之前创建过请看过期时间就知道哪个是新创建的了),点击p12 文件,下载保存.p12证书文件到电脑。
二、创建iOS发布描述文件(.mobileprovision文件)
2.1、返回Appuploader首页,选择描述文件。
2.2、点击+ ADD,对应选择发布版profile
应用id:选择对应的id(又称套装id,appid,BundleID,包名)
证书:选中全部就行
Devices:设备这里不像选开发版profile时会出现,发布版不用选。
输入名称:不要中文,随意,123之类的就行,注意不要跟之前申请过的名称一样),点击ok创建。
2.3、选择刚创建的发布版描述文件(iOS Distribution这个类型的就是发布描述文件,找刚创建的输入的名称),点击Download下载,保存到电脑
得到了p12及描述文件mobileprovision上传打包即可!
AppID:填写申请描述文件时选择的应用id
profile文件,选择上传配置文件.mobileprovision
私钥证书,上传.p12文件
私钥密码,输入创建p12设置的密码。
然后点击打包。

在mui.confirm 弹出框中调用mui.back()方法栈溢出问题
文中使用vue.js+mui,重写返回方法,返回上一页前执行方法。
监听 参数变化,true时调用返回方法。
主要代码:
//重写返回方法
var oldback = mui.back;
mui.back = function() {
rockVue.savaBeforBack();
};
var rockVue = new Vue({
el: '#rockdeep',
data: {
issave : false,
},
methods : function(){
savaBeforBack : function(){
var self = this;
mui.confirm('有数据未保存,是否保存', '提示', ['取消', '确认'], function(e) {
if(e.index) {
self.issave = true;
} else {
self.issave = true;
}
}, 'div');
},
},
watch : {
issave : function(val){
if(val){
oldback();
}
},
}
})
文中使用vue.js+mui,重写返回方法,返回上一页前执行方法。
监听 参数变化,true时调用返回方法。
主要代码:
//重写返回方法
var oldback = mui.back;
mui.back = function() {
rockVue.savaBeforBack();
};
var rockVue = new Vue({
el: '#rockdeep',
data: {
issave : false,
},
methods : function(){
savaBeforBack : function(){
var self = this;
mui.confirm('有数据未保存,是否保存', '提示', ['取消', '确认'], function(e) {
if(e.index) {
self.issave = true;
} else {
self.issave = true;
}
}, 'div');
},
},
watch : {
issave : function(val){
if(val){
oldback();
}
},
}
})
收起阅读 »

金华地区,工作室、个人接单 uniapp html5plus、网站、原生app外包接单
金华地区,工作室、个人兼职接单 uniapp h5+、网站、原生app外包接单
案例:http://withtime.net
QQ:261732321
金华地区,工作室、个人兼职接单 uniapp h5+、网站、原生app外包接单
案例:http://withtime.net
QQ:261732321

uniApp 安卓多环境打包基础配置
uniApp安卓多环境配置
- Build.gradle
- AndroidMainfest.xml
- libs
- assets
Build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "com.testapp.uniappandroid"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
flavorDimensions ""
ndk {
abiFilters 'x86','armeabi-v7a' //使用uniapp时必须同时选择二者或选其一
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//使用uniapp时,需复制下面代码
/*代码开始*/
aaptOptions {
additionalParameters '--auto-add-overlay'
//noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
productFlavors {
first {
applicationId "com.demo.first"
manifestPlaceholders = [
APP_ICON:"@drawable/icon",
APP_NAME:"First"
]
}
second {
applicationId "com.demo.second"
manifestPlaceholders = [
APP_ICON:"@drawable/icon",
APP_NAME:"Second"
]
}
}
applicationVariants.all {variant ->
variant.outputs.all {output ->
output.outputFileName = "${variant.name}.apk"
}
}
/*代码结束*/
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
/*uniApp依赖库*/
implementation fileTree(include: ['*.aar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
/*uniapp所需库-----------------------开始*/
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.alibaba.android:bindingx-core:1.0.3'
implementation 'com.alibaba.android:bindingx_weex_plugin:1.0.3'
implementation 'com.squareup.okhttp:okhttp:2.3.0'
implementation 'com.squareup.okhttp:okhttp-ws:2.3.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
/*uniapp所需库-----------------------结束*/
// 基座需要,必须添加
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testapp.uniappandroid">
<application
android:name="io.dcloud.application.DCloudApplication"
android:allowClearUserData="true"
android:icon="${APP_ICON}"
android:label="${APP_NAME}"
android:largeHeap="true"
>
<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|keyboard|navigation"
android:label="${APP_NAME}"
android:launchMode="singleTask"
android:hardwareAccelerated="true"
android:screenOrientation="user"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3 libs
lib.5plus.base-release.aar
uniapp-release.aar
4 assets
apps/
data/
uniApp安卓多环境配置
- Build.gradle
- AndroidMainfest.xml
- libs
- assets
Build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "com.testapp.uniappandroid"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
flavorDimensions ""
ndk {
abiFilters 'x86','armeabi-v7a' //使用uniapp时必须同时选择二者或选其一
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//使用uniapp时,需复制下面代码
/*代码开始*/
aaptOptions {
additionalParameters '--auto-add-overlay'
//noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
productFlavors {
first {
applicationId "com.demo.first"
manifestPlaceholders = [
APP_ICON:"@drawable/icon",
APP_NAME:"First"
]
}
second {
applicationId "com.demo.second"
manifestPlaceholders = [
APP_ICON:"@drawable/icon",
APP_NAME:"Second"
]
}
}
applicationVariants.all {variant ->
variant.outputs.all {output ->
output.outputFileName = "${variant.name}.apk"
}
}
/*代码结束*/
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
/*uniApp依赖库*/
implementation fileTree(include: ['*.aar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
/*uniapp所需库-----------------------开始*/
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.alibaba.android:bindingx-core:1.0.3'
implementation 'com.alibaba.android:bindingx_weex_plugin:1.0.3'
implementation 'com.squareup.okhttp:okhttp:2.3.0'
implementation 'com.squareup.okhttp:okhttp-ws:2.3.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
/*uniapp所需库-----------------------结束*/
// 基座需要,必须添加
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testapp.uniappandroid">
<application
android:name="io.dcloud.application.DCloudApplication"
android:allowClearUserData="true"
android:icon="${APP_ICON}"
android:label="${APP_NAME}"
android:largeHeap="true"
>
<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|keyboard|navigation"
android:label="${APP_NAME}"
android:launchMode="singleTask"
android:hardwareAccelerated="true"
android:screenOrientation="user"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3 libs
lib.5plus.base-release.aar
uniapp-release.aar
4 assets
apps/
data/
收起阅读 »

西安急聘 混合APP开发者
西安招聘多端APP开发者,要求会Hbuildx,uniapp,mui,联系QQ:103249 TEL:17899105917
西安招聘多端APP开发者,要求会Hbuildx,uniapp,mui,联系QQ:103249 TEL:17899105917