微信小程序部分功能需要使用授權(quán)(也就是需要用戶(hù)顯式同意,系統(tǒng)會(huì)阻止開(kāi)發(fā)者任何靜默獲取授權(quán)行為),以存儲(chǔ)相冊(cè)為例,用戶(hù)需要獲得"scope.writePhotosAlbum"權(quán)限
微信系統(tǒng)接口wx.getSetting可以獲取已經(jīng)獲得的權(quán)限列表
wx.getSetting({
success(res) {
if (res.authSetting['scope.writePhotosAlbum']) {
// 已獲得存儲(chǔ)相冊(cè)授權(quán)
}
else {
// 未獲得存儲(chǔ)相冊(cè)授權(quán)
}
}
}
在實(shí)際開(kāi)發(fā)時(shí),我們有時(shí)候并不會(huì)去特意處理權(quán)限,直接調(diào)用接口函數(shù),也是可以成功的
// 不做任何處理,直接調(diào)用存儲(chǔ)相冊(cè)
wx.saveImageToPhotosAlbum({...})
系統(tǒng)會(huì)在第一次需要存儲(chǔ)相冊(cè)權(quán)限時(shí)詢(xún)問(wèn)用戶(hù)是否授權(quán)
這樣做大部分時(shí)候也夠了,但會(huì)有點(diǎn)小瑕疵,如果用戶(hù)用第一次點(diǎn)了“拒絕”,再調(diào)用存儲(chǔ)接口永遠(yuǎn)都不會(huì)拉起授權(quán)提示了,這時(shí)候用戶(hù)只能通過(guò)右上角三個(gè)點(diǎn)打開(kāi)權(quán)限設(shè)置頁(yè),主動(dòng)給予權(quán)限才能順利執(zhí)行
網(wǎng)上很多關(guān)于處理拒絕授權(quán)全流程的文章已經(jīng)過(guò)時(shí)了,其中關(guān)鍵是通過(guò)wx.authorize拉起授權(quán),現(xiàn)在這個(gè)接口是不會(huì)成功的
以上兩則案例在沒(méi)有授權(quán)時(shí),通過(guò)wx.authorize拉起授權(quán)無(wú)法成功拉起授權(quán),進(jìn)入fail后只能通過(guò)modal對(duì)話(huà)框拉起設(shè)置頁(yè)
打開(kāi)設(shè)置頁(yè)是可以避免modal對(duì)話(huà)框的,如果在按鈕的回調(diào)函數(shù)中直接調(diào)用wx.openSetting是可以成功打開(kāi)設(shè)置頁(yè)的。以上代碼增加了wx.authorize回調(diào),在wx.authorize授權(quán)失敗回調(diào)中調(diào)用wx.openSetting,系統(tǒng)會(huì)判定開(kāi)發(fā)者企圖靜默提示權(quán)限,是不被允許的。所以調(diào)用了wx.authorize,反而會(huì)導(dǎo)致我們打開(kāi)wx.openSetting需要經(jīng)過(guò)一個(gè)modal對(duì)話(huà)框過(guò)渡。
那么正確的做法應(yīng)該是:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-490624.html
- 已經(jīng)授權(quán),直接存儲(chǔ);
- 沒(méi)有授權(quán),直接打開(kāi)設(shè)置授權(quán)頁(yè)
wx.getSetting({
success(res) {
if (res.authSetting['scope.writePhotosAlbum']) {
// 已經(jīng)獲得授權(quán),直接存儲(chǔ)
that.saveImg();
}
else {
// 沒(méi)有獲得授權(quán),打開(kāi)設(shè)置頁(yè)
wx.openSetting({
//...
})
}
}
})
等等!打開(kāi)授權(quán)頁(yè)后發(fā)現(xiàn)授權(quán)選項(xiàng)是空的
原因很簡(jiǎn)單,我們沒(méi)有調(diào)用過(guò)任何需要授權(quán)的接口,小程序也不知道我們需要什么授權(quán)(小程序沒(méi)有配置頁(yè)設(shè)置需要的授權(quán)列表),顯然設(shè)置選項(xiàng)不可能把所有可能的授權(quán)都列出來(lái)。
問(wèn)題清楚了以后,完整解決方案如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-490624.html
- 已授權(quán),直接存儲(chǔ)
- 未授權(quán)(第一次運(yùn)行),直接存儲(chǔ),讓系統(tǒng)一次性提示用戶(hù)授權(quán)
- 未授權(quán)(用戶(hù)拒絕),直接打開(kāi)設(shè)置頁(yè)(授權(quán)列表已有授權(quán)記錄),讓用戶(hù)自行選擇授權(quán)
download() {
this.setData({displayLoading: "inline-flex"})
var that = this
wx.getSetting({
success(res) {
if (res.authSetting['scope.writePhotosAlbum']) {
// 已經(jīng)獲得授權(quán),直接存儲(chǔ)
that.saveImg();
}
else if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
// 第一次運(yùn)行,授權(quán)未定義,可以直接保存,系統(tǒng)會(huì)一次性詢(xún)問(wèn)用戶(hù)權(quán)限
that.saveImg();
}
else {
// 用戶(hù)拒絕授權(quán)后,打開(kāi)設(shè)置頁(yè)可以看到授權(quán)提示開(kāi)關(guān)
wx.openSetting({
success(res) { // 用戶(hù)授權(quán)
if (res.authSetting['scope.writePhotosAlbum']) {
that.saveImg();
}
else { // 用戶(hù)拒絕授權(quán)
that.setData({displayLoading: "none"})
wx.showToast({
title: '權(quán)限不足',
})
}
},
fail(res) {
that.setData({displayLoading: "none"})
wx.showToast({
title: '設(shè)置失敗',
})
}
})
}
},
fail(res) {
console.log(res)
that.setData({displayLoading: "none"})
wx.showToast({
title: '設(shè)置失敗',
})
}
})
}
到了這里,關(guān)于微信小程序保存相冊(cè)授權(quán)全過(guò)程:第一次授權(quán)、已授權(quán)、拒絕后再授權(quán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!