小程序检测更新
// app.js
App({
onLaunch: function () {
this.appUpDate()
},
appUpDate () {
let self = this
const updateManager = wx.getUpdateManager()
//1. 检查小程序是否有新版本发布
updateManager.onCheckForUpdate(function(res) {
// 请求完新版本信息的回调
if (res.hasUpdate) {
//检测到新版本,需要更新,给出提示
wx.showModal({
title: '更新提示',
content: '检测到新版本,是否下载新版本并重启小程序?',
confirmColor: '#f4af23',
success: function(res) {
if (res.confirm) {
//2. 用户确定下载更新小程序,小程序下载及更新静默进行
self.downLoadAndUpdate(updateManager)
}
}
})
}
})
},
downLoadAndUpdate: function (updateManager){
let that = this
wx.showLoading({title: '下载更新包...'});
//静默下载更新小程序新版本
updateManager.onUpdateReady(function () {
wx.hideLoading()
//新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
})
updateManager.onUpdateFailed(function () {
wx.hideLoading()
// 新的版本下载失败
that.showModal('版本下载失败~,请您删除当前小程序,重新搜索打开哟~')
})
}
})
封装全局请求
/**
* 封装请求
* @param data
* @returns {Promise}
*/
request(data) {
// 备份数据 用于用于登录失效 无感登录重新发送请求数据
let spareData = JSON.parse(JSON.stringify(data))
let that = this
let cookie = wx.getStorageSync('cookie')
return new Promise((resolve, reject) => {
data.url = this.requestUrl + data.url
data.header = {...data.header}
/**
* 登录接口不带cookie 如果带了后端不会返回
*/
if (data.url.indexOf('/management/platform/user/login?code') === -1){
data.header.cookie = cookie
}
wx.request({
...data,
success(res) {
if (res.statusCode === 200) {
that.globalData.noLogin = false
resolve(res)
} else {
if (res.data.errorCode === 400002) {
that.clearUserData()
// 需要过滤的接口 获取课程列表
let filterUrl = '/course/query/by/class/user?schoolTermId'
if (filterUrl.indexOf(data.url.split(that.requestUrl)[1].split('=')[0]) !== -1) {
reject(res)
return
}
/**
* 未登录 跳转登录页面
*/
if (!that.globalData.needAuth) {
that.loginIn(() => {
that.globalData.needAuth = true
that.request(spareData).then((res2) => {
that.globalData.needAuth = false
resolve(res2)
}).catch(() => {
reject()
})
})
} else {
let pages = getCurrentPages();
let currPage = {};
if (pages.length) {
currPage = pages[pages.length - 1];
}
/**
*获取当前页面的路由
* 过滤不必要跳转的路由
*/
let route = currPage.route
let filterRouters = ['pages/personal/personal', 'pages/onload/onload']
if (filterRouters.indexOf(route) === -1) {
reject()
if (!that.globalData.noLogin){
wx.navigateTo({
url: '/pages/login/login'
})
}
that.globalData.noLogin = true
}else {
reject()
}
}
}else {
that.showModal(res.data.message || res.data.errorMessage)
reject(res)
}
}
},
fail(res) {
that.showModal('请求失败,原因可能是服务器异常或本地网络异常')
reject()
}
})
})
},
- 以上代码可根据业务场景进行修改(我的业务场景就是这样的)
/**
* 封装授权
* @param power
* @param choose
* @param modalContent
* @param callback
*/
authorizeFunc(power, choose,params, modalContent, callback) {
/**
* power需要授予 scope.invoiceTitle
* choose 原生方法 chooseInvoiceTitle
*/
let that = this;
//查看是否授权
wx.getSetting({
success(res) {
if (res.authSetting[power]) {
console.log(123)
// 进入选择
wx[choose]({
...params,
success(res) {
callback(res)
},
fail(){
callback(res)
}
})
} else {
// 没有授权 直接弹出授权
wx[choose]({
...params,
success(res) {
callback(res)
},
// 授权失败 场景1:已授权但未选择就退出,场景2:未授权
fail() {
// 再次判断有没有授权
wx.getSetting({
success(res) {
if (!res.authSetting[power]) {
// 打开设置
wx.showModal({
title: '提示',
confirmColor: '#f4af23',
content: modalContent,
success(res) {
if (res.confirm) {
wx.openSetting({
success(res) {
if (res.authSetting[power]) {
that.authorizeFunc(power, choose,params, modalContent, callback)
}
}
})
}
}
})
}
}
})
}
})
}
}
})
},
- 以上代码支持大部分授权 (获取手机号等特殊授权请另行写代码,有的变量没写上只需要在对应的地方定义一个默认值即可)
确定不来Q群交流一下? 867364698