提交 a921045c 编写于 作者: L linju

21

上级 14d1d150
...@@ -2,3 +2,4 @@ unpackage/ ...@@ -2,3 +2,4 @@ unpackage/
.hbuilderx .hbuilderx
node_modules node_modules
.DS_Store .DS_Store
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/config.json
\ No newline at end of file
...@@ -77,15 +77,15 @@ ...@@ -77,15 +77,15 @@
"oauth" : { "oauth" : {
"apple" : {}, "apple" : {},
"weixin" : { "weixin" : {
"appid" : "wx0411fa6a39d61297", "appid" : "wxffdd8fa6ec4ef2a0",
"appsecret" : "", "appsecret" : "6c9119430d7be0a147bcbbb73ef33acf",
"UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E" "UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E"
}, },
"univerify" : {} "univerify" : {}
}, },
"share" : { "share" : {
"weixin" : { "weixin" : {
"appid" : "wx0411fa6a39d61297", "appid" : "wxffdd8fa6ec4ef2a0",
"UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E", "UniversalLinks" : "https://static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com/uni-universallinks/__UNI__03B096E",
"_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e" "_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e"
} }
......
<template> <template>
<view class="content" > <view class="content" >
<limeClipper :width="options.width" :scale-ratio="2" :is-lock-width="true" :is-lock-height="true" :height="options.height" :image-url="path" <limeClipper :width="options.width" :scale-ratio="2" :is-lock-width="false" :is-lock-height="false" :height="options.height" :image-url="path"
@success="successFn" @cancel="cancel" /> @success="successFn" @cancel="cancel" />
</view> </view>
</template> </template>
......
{
"passwordSecret": "passwordSecret-demo",
"tokenSecret": "tokenSecret-demo",
"tokenExpiresIn": 7200,
"tokenExpiresThreshold": 600,
"passwordErrorLimit": 6,
"bindTokenToDevice": true,
"passwordErrorRetryTime": 3600,
"autoSetInviteCode": false,
"forceInviteCode": false,
"app-plus": {
"tokenExpiresIn": 2592000,
"oauth": {
"weixin": {
"appid": "wx0411fa6a39d61297",
"appsecret": "6c9119430d7be0a147bcbbb73ef33acf"
},
"apple": {
"bundleId": "io.dcloud.game.cat"
}
}
},
"mp-weixin": {
"oauth": {
"weixin": {
"appid": "wx999bf02c8e05dfc9",
"appsecret": "b5f608afd332b2c0ded7e6b98ca4ccd3"
}
}
},
"mp-alipay": {
"oauth": {
"alipay": {
"appid": "alipay appid",
"privateKey": "alipay privateKey"
}
}
},
"service": {
"sms": {
"name": "DCloud",
"codeExpiresIn": 300,
"smsKey": "71a19f38c954f7d768d68a050486bf15",
"smsSecret": "d6c424b702d73baa3b6e1a1452469213"
},
"univerify": {
"appid": "__UNI__BC54A00",
"apiKey": "d1e36bcd497b3795434d900dcfdd44dc",
"apiSecret": "2feb378ff1114362b20ac179b572293e"
}
}
}
...@@ -98,12 +98,15 @@ ...@@ -98,12 +98,15 @@
let oauthService = this.oauthServices.find((service) => service.id == type) let oauthService = this.oauthServices.find((service) => service.id == type)
// #ifdef APP-PLUS // #ifdef APP-PLUS
//uni.showLoading({mask: true}); //uni.showLoading({mask: true});
console.log(type,231);
//请勿直接使用前端获取的unionid或openid直接用于登陆,前端的数据都是不可靠的 //请勿直接使用前端获取的unionid或openid直接用于登陆,前端的数据都是不可靠的
if(type=='weixin'){ if(type=='weixin'){
oauthService.authorize(({code})=>{ oauthService.authorize(({code})=>{
console.log(code); console.log(code);
this.quickLogin({code},type) this.quickLogin({code},type)
},
err=>{
console.log(err);
}) })
} }
......
## 0.1.2(2021-04-07)
- 更新版本对比函数 compare
## 0.1.1(2021-04-07)
- 修复 腾讯云空间下载链接不能下载问题
## 0.1.0(2021-04-07)
- 新增使用uni.showModal提示升级示例
- 修改iOS升级提示方式
## 0.0.7(2021-04-02)
- 修复在iOS上打开弹框报错
## 0.0.6(2021-04-01) ## 0.0.6(2021-04-01)
- 兼容旧版本安卓 - 兼容旧版本安卓
## 0.0.5(2021-04-01) ## 0.0.5(2021-04-01)
......
{ {
"id": "uni-upgrade-center-app", "id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App", "displayName": "升级中心 uni-upgrade-center - App",
"version": "0.0.6", "version": "0.1.2",
"description": "升级中心前台检查更新", "description": "升级中心前台检查更新",
"keywords": [ "keywords": [
"uniCloud", "uniCloud",
......
...@@ -20,6 +20,12 @@ ...@@ -20,6 +20,12 @@
</scroll-view> </scroll-view>
</view> </view>
<view class="footer flex-center"> <view class="footer flex-center">
<template v-if="isiOS">
<button class="content-button" style="border: none;color: #fff;" plain @click="jumpToAppStore">
{{downLoadBtnTextiOS}}
</button>
</template>
<template v-else>
<template v-if="!downloadSuccess"> <template v-if="!downloadSuccess">
<view class="progress-box flex-column" v-if="downloading"> <view class="progress-box flex-column" v-if="downloading">
<progress class="progress" border-radius="35" :percent="downLoadPercent" <progress class="progress" border-radius="35" :percent="downLoadPercent"
...@@ -45,6 +51,7 @@ ...@@ -45,6 +51,7 @@
@click="restart"> @click="restart">
安装完毕,点击重启 安装完毕,点击重启
</button> </button>
</template>
</view> </view>
</view> </view>
...@@ -56,19 +63,50 @@ ...@@ -56,19 +63,50 @@
<script> <script>
const localFilePathKey = '__localFilePath__' const localFilePathKey = '__localFilePath__'
const platform_iOS = 'iOS';
let downloadTask = null; let downloadTask = null;
/** /**
* 对比版本号,如需要,请自行修改判断规则 * 对比版本号,如需要,请自行修改判断规则
* 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
* @param {Object} v1 * @param {Object} v1
* @param {Object} v2 * @param {Object} v2
* v1 > v2 return 1 * v1 > v2 return 1
* v1 < v2 return -1 * v1 < v2 return -1
* v1 == v2 return 0 * v1 == v2 return 0
*/ */
function compare(v1 = 0, v2 = 0) { function compare(v1 = '0', v2 = '0') {
// '1.2.5' > '1.2.4' 类似的版本号可以直接对比 v1 = String(v1).split('.')
return v1 > v2 ? 1 : v1 < v2 ? -1 : 0; v2 = String(v2).split('.')
const minVersionLens = Math.min(v1.length, v2.length);
let result = 0;
for (let i = 0; i < minVersionLens; i++) {
const curV1 = Number(v1[i])
const curV2 = Number(v2[i])
if (curV1 > curV2) {
result = 1
break;
} else if(curV1 < curV2) {
result = -1
break;
}
}
if (result === 0 && (v1.length !== v2.length)) {
const v1BiggerThenv2 = v1.length > v2.length;
const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
for (let i = minVersionLens; i < maxLensVersion.length; i++) {
const curVersion = Number(maxLensVersion[i])
if (curVersion > 0) {
v1BiggerThenv2 ? result = 1 : result = -1
break;
}
}
}
return result;
} }
export default { export default {
...@@ -98,8 +136,9 @@ ...@@ -98,8 +136,9 @@
// 可自定义属性 // 可自定义属性
subTitle: '发现新版本', subTitle: '发现新版本',
downLoadBtnTextiOS: '立即跳转更新',
downLoadBtnText: '立即下载更新', downLoadBtnText: '立即下载更新',
downLoadingText: '安装包下载中,请稍后' downLoadingText: '安装包下载中,请稍后'
} }
}, },
onLoad({ onLoad({
...@@ -141,6 +180,9 @@ ...@@ -141,6 +180,9 @@
computed: { computed: {
isWGT() { isWGT() {
return this.type === 'wgt' return this.type === 'wgt'
},
isiOS() {
return !this.isWGT ? this.platform.includes(platform_iOS) : false;
} }
}, },
methods: { methods: {
...@@ -205,7 +247,6 @@ ...@@ -205,7 +247,6 @@
if (res.statusCode == 200) { if (res.statusCode == 200) {
this.downloadSuccess = true; this.downloadSuccess = true;
this.tempFilePath = res.tempFilePath this.tempFilePath = res.tempFilePath
console.log("res.tempFilePath: ", res.tempFilePath);
// 强制更新,直接安装 // 强制更新,直接安装
if (this.is_mandatory) { if (this.is_mandatory) {
...@@ -317,6 +358,9 @@ ...@@ -317,6 +358,9 @@
return uni.removeSavedFile({ return uni.removeSavedFile({
filePath filePath
}) })
},
jumpToAppStore() {
plus.runtime.openURL(this.url);
} }
} }
} }
......
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
7.`/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可 7.`/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可
8. 升级弹框可自行编写,也可以使用`uni.showModal`,或使用现有的升级弹框样式,如果不满足UI需求请自行替换资源文件。在`utils/check-update.js`中都有实例。
### 更新下载安装`check-update.js` ### 更新下载安装`check-update.js`
*该函数在utils目录下* *该函数在utils目录下*
...@@ -67,8 +69,7 @@ ...@@ -67,8 +69,7 @@
5. `check-version`云函数内部会自动获取 App 平台 5. `check-version`云函数内部会自动获取 App 平台
6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要用的地方导入调用即可 6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要检查更新的地方导入调用即可
## 项目代码说明 ## 项目代码说明
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam // 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam
{ {
"appid": "uni.UNIBC54A00", "appid": "__YOUR_APPID__",
"appVersion": "2.2.0", "appVersion": "2.2.0",
"wgtVersion": "2.2.2" "wgtVersion": "2.2.2"
} }
...@@ -125,13 +125,43 @@ exports.main = async (event, context) => { ...@@ -125,13 +125,43 @@ exports.main = async (event, context) => {
/** /**
* 对比版本号,如需要,请自行修改判断规则 * 对比版本号,如需要,请自行修改判断规则
* 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
* @param {Object} v1 * @param {Object} v1
* @param {Object} v2 * @param {Object} v2
* v1 > v2 return 1 * v1 > v2 return 1
* v1 < v2 return -1 * v1 < v2 return -1
* v1 == v2 return 0 * v1 == v2 return 0
*/ */
function compare(v1 = 0, v2 = 0) { function compare(v1 = '0', v2 = '0') {
// '1.2.5' > '1.2.4' 类似的版本号可以直接对比 v1 = String(v1).split('.')
return v1 > v2 ? 1 : v1 < v2 ? -1 : 0; v2 = String(v2).split('.')
const minVersionLens = Math.min(v1.length, v2.length);
let result = 0;
for (let i = 0; i < minVersionLens; i++) {
const curV1 = Number(v1[i])
const curV2 = Number(v2[i])
if (curV1 > curV2) {
result = 1
break;
} else if(curV1 < curV2) {
result = -1
break;
}
}
if (result === 0 && (v1.length !== v2.length)) {
const v1BiggerThenv2 = v1.length > v2.length;
const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
for (let i = minVersionLens; i < maxLensVersion.length; i++) {
const curVersion = Number(maxLensVersion[i])
if (curVersion > 0) {
v1BiggerThenv2 ? result = 1 : result = -1
break;
}
}
}
return result;
} }
...@@ -3,8 +3,6 @@ const PACKAGE_INFO_KEY = '__package_info__' ...@@ -3,8 +3,6 @@ const PACKAGE_INFO_KEY = '__package_info__'
export default function() { export default function() {
// #ifdef APP-PLUS // #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uniCloud.callFunction({ uniCloud.callFunction({
name: 'check-version', name: 'check-version',
...@@ -13,7 +11,7 @@ export default function() { ...@@ -13,7 +11,7 @@ export default function() {
appVersion: plus.runtime.version, appVersion: plus.runtime.version,
wgtVersion: widgetInfo.version wgtVersion: widgetInfo.version
}, },
success: (e) => { success: async (e) => {
if (!e.result) return; if (!e.result) return;
const { const {
code, code,
...@@ -23,12 +21,21 @@ export default function() { ...@@ -23,12 +21,21 @@ export default function() {
platform, // 安装包平台 platform, // 安装包平台
type // 安装包类型 type // 安装包类型
} = e.result; } = e.result;
// 此处逻辑仅为实例,可自行编写 // 此处逻辑仅为实例,可自行编写
if (code > 0) { if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const {
fileList
} = await uniCloud.getTempFileURL({
fileList: [url]
});
e.result.url = fileList[0].tempFileURL
// 静默更新,只有wgt有 // 静默更新,只有wgt有
if (is_silently) { if (is_silently) {
downloadTask = uni.downloadFile({ uni.downloadFile({
url: this.url, url: e.result.url,
success: res => { success: res => {
if (res.statusCode == 200) { if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效 // 下载好直接安装,下次启动生效
...@@ -41,18 +48,19 @@ export default function() { ...@@ -41,18 +48,19 @@ export default function() {
return; return;
} }
if (type === 'native_app' && platform.includes('iOS')) { /**
// iOS 跳转 AppStore 商店 * 提示升级一
plus.runtime.openURL(url); * 使用 uni.showModal
return; */
} // return updateUseModal(e.result)
/**
* 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格
*/
uni.setStorageSync(PACKAGE_INFO_KEY, e.result) uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
// 跳转更新页面
uni.navigateTo({ uni.navigateTo({
url: '/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=' + url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
PACKAGE_INFO_KEY,
fail: (err) => { fail: (err) => {
console.error('更新弹框跳转失败', err) console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY) uni.removeStorageSync(PACKAGE_INFO_KEY)
...@@ -71,3 +79,79 @@ export default function() { ...@@ -71,3 +79,79 @@ export default function() {
}); });
// #endif // #endif
} }
/**
* 使用 uni.showModal 升级
*/
function updateUseModal(packageInfo) {
const {
title, // 标题
contents, // 升级内容
is_mandatory, // 是否强制更新
url, // 安装包下载地址
platform, // 安装包平台
type // 安装包类型
} = packageInfo;
let isWGT = type === 'wgt'
let isiOS = !isWGT ? platform.includes('iOS') : false;
let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
return uni.showModal({
title,
content: contents,
showCancel: !is_mandatory,
confirmText,
success: res => {
if (res.cancel) return;
// 安装包下载
if (isiOS) {
plus.runtime.openURL(url);
return;
}
uni.showToast({
title: '后台下载中……',
duration: 1000
});
// wgt 和 安卓下载更新
downloadTask = uni.downloadFile({
url,
success: res => {
if (res.statusCode !== 200) {
console.error('下载安装包失败', err);
return;
}
// 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, {
force: false
}, () => {
if (is_mandatory) {
//更新完重启app
plus.runtime.restart();
return;
}
uni.showModal({
title: '安装成功是否重启?',
success: res => {
if (res.confirm) {
//更新完重启app
plus.runtime.restart();
}
}
});
}, err => {
uni.showModal({
title: '更新失败',
content: err
.message,
showCancel: false
});
});
}
});
}
});
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册