uniapp小程序權(quán)限授權(quán)封裝代碼示例
封裝原因
項(xiàng)目中會(huì)出現(xiàn)像用戶(hù)拿地理位置信息或其他權(quán)限的需求,但是我們無(wú)法控制用戶(hù)的操作,如果用戶(hù)按要求給了我們相關(guān)權(quán)限那么項(xiàng)目就可以正常走下去,但是如果用戶(hù)誤觸或者點(diǎn)擊了拒絕,會(huì)導(dǎo)致項(xiàng)目缺少了某些數(shù)據(jù)(例如位置參數(shù))導(dǎo)致無(wú)法繼續(xù)進(jìn)行下去。
而微信小程序除隱私授權(quán)外其他的大部分授權(quán)都是拒絕過(guò)一次后就不會(huì)再?gòu)棿霸?xún)問(wèn)授權(quán)了,這會(huì)導(dǎo)致用戶(hù)拒絕了一次權(quán)限后就不再詢(xún)問(wèn)授權(quán),會(huì)導(dǎo)致用戶(hù)一直使用不了小程序,從而導(dǎo)致使用體驗(yàn)
我們當(dāng)然可以處理權(quán)限拒絕的情況,但是每次都寫(xiě)重復(fù)的代碼不符合我們的預(yù)期(摸魚(yú)ing...),所以將處理邏輯封裝起來(lái),每次需要用時(shí)調(diào)用即可
代碼
/*
獲取用戶(hù)授權(quán)(小程序?qū)S?
@scopeName 授權(quán)名稱(chēng) 參考文檔:https://uniapp.dcloud.net.cn/api/other/authorize.html#scope-%E5%88%97%E8%A1%A8
@tip 提示信息
@cb 回調(diào)函數(shù)
*/
export const getSetting = function (scopeName, tip = '請(qǐng)?jiān)谠O(shè)置中開(kāi)啟授權(quán)', cb) {
uni.getSetting({
success: (res) => {
if (res.authSetting[scopeName]) {
// 已經(jīng)授權(quán),調(diào)用回調(diào)函數(shù)
cb();
} else if (res.authSetting[scopeName] === false) {
// 用戶(hù)已拒絕授權(quán),引導(dǎo)用戶(hù)到設(shè)置頁(yè)面開(kāi)啟
uni.showModal({
title: '您未開(kāi)啟相關(guān)授權(quán)',
content: tip,
success: (res) => {
if (res.confirm) {
uni.openSetting({
success(settingRes) {
if (settingRes.authSetting[scopeName]) {
// 用戶(hù)打開(kāi)了授權(quán),調(diào)用回調(diào)函數(shù)
cb();
}
},
});
}
},
});
} else {
// 首次使用,請(qǐng)求授權(quán)
uni.authorize({
scope: scopeName,
success() {
cb();
},
fail() {
// 首次使用,用戶(hù)拒絕授權(quán),引導(dǎo)用戶(hù)到設(shè)置頁(yè)面開(kāi)啟
uni.showModal({
title: '您未開(kāi)啟相關(guān)授權(quán)',
content: tip,
success: (res) => {
if (res.confirm) {
uni.openSetting({
success(settingRes) {
if (settingRes.authSetting[scopeName]) {
// 用戶(hù)打開(kāi)了授權(quán),調(diào)用回調(diào)函數(shù)
cb();
}
},
});
}
},
});
},
});
}
},
});
};
使用示例
getSetting('scope.userLocation', '請(qǐng)?jiān)谠O(shè)置中開(kāi)啟地理位置授權(quán)', () => {
console.log('地理位置授權(quán)成功');
});總結(jié)
到此這篇關(guān)于uniapp小程序權(quán)限授權(quán)封裝代碼示例的文章就介紹到這了,更多相關(guān)uniapp小程序權(quán)限授權(quán)封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS中函數(shù)科里化的背景與應(yīng)用實(shí)例教程
在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,柯里化是一種將使用多個(gè)參數(shù)的一個(gè)函數(shù)轉(zhuǎn)換成一系列使用一個(gè)參數(shù)的函數(shù)的技術(shù),下面這篇文章主要給大家介紹了JS中函數(shù)科里化的背景與應(yīng)用實(shí)例的相關(guān)資料,需要的朋友可以參考下2022-06-06
JavaScript判斷用戶(hù)名和密碼不能為空的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇JavaScript判斷用戶(hù)名和密碼不能為空的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05
在多個(gè)頁(yè)面使用同一個(gè)HTML片段的代碼
有一個(gè)比較復(fù)雜的HTML片段(A),如果把這個(gè)HTML片段嵌入到其他頁(yè)面中(B,C,D....)。 問(wèn)題的關(guān)鍵是在HTML片段中有大量的JavaScript邏輯需要處理,比如說(shuō)分頁(yè),點(diǎn)擊事件響應(yīng)等。2011-03-03
JS/HTML5游戲常用算法之路徑搜索算法 A*尋路算法完整實(shí)例
這篇文章主要介紹了JS/HTML5游戲常用算法之路徑搜索算法 A*尋路算法,結(jié)合完整實(shí)例形式分析了A*尋路算法的具體實(shí)現(xiàn)技巧,代碼備有詳盡的注釋便于理解,需要的朋友可以參考下2018-12-12
javascript一些不錯(cuò)的函數(shù)腳本代碼
收集一些不多見(jiàn)的好用的自定義函數(shù)代碼 計(jì)算字符長(zhǎng)度的js函數(shù) 去字符中前后的空格的js函數(shù) 圖片自適應(yīng)大小函數(shù)代碼2008-09-09
JS判斷用戶(hù)用的哪個(gè)瀏覽器實(shí)例詳解
這篇文章主要介紹了JS判斷用戶(hù)用的哪個(gè)瀏覽器的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10

