L'applet WeChat obtient l'autorisation de localisation et l'utilisateur refuse l'autorisation, puis redirige l'utilisateur pour autoriser
Résoudre le problème:
L'applet WeChat obtient les autorisations de localisation. L'utilisateur clique sur Autoriser puis sélectionne directement un point sur la carte, ou l'utilisateur refuse l'autorisation et le guide vers la page des paramètres pour une nouvelle autorisation. Si le code est requis, glissez directement vers le bas de page.
Méthode d'appel :
1. Utiliser pour uni.getSetting
obtenir les paramètres actuels de l'utilisateur
2. Utilisez-le pour uni.authorize
lancer des demandes d'autorisation auprès des utilisateurs à l'avance. Une fois l'appel effectué, une fenêtre contextuelle demandera immédiatement à l'utilisateur s'il accepte d'autoriser l'applet à utiliser une certaine fonction ou à obtenir certaines données de l'utilisateur, mais l'interface correspondante ne sera pas réellement appelée. Si l'utilisateur a préalablement accepté l'autorisation, aucune fenêtre pop-up n'apparaîtra et le succès sera renvoyé directement. Si l'utilisateur a précédemment refusé l'autorisation, cette interface entrera directement le rappel d'échec. Elle est généralement utilisée uni.getSetting
avecuni.openSetting
3. Utilisez pour uni.openSetting
appeler l'interface de configuration de l'applet client et renvoyer les résultats de l'opération définis par l'utilisateur.
4.Utilisez pour uni.chooseLocation
ouvrir la carte et sélectionner l'emplacement
Solutions:
Utiliser uni.getSetting
pour obtenir des informations sur les paramètres et la liste des autorisations des utilisateurs :
Si l'utilisateur est autorisé, appelez directement pour uni.chooseLocation
ouvrir la carte et sélectionner l'emplacement ;
S'il n'a pas encore été autorisé, utilisez pour uni.authorize
lancer l'autorisation
Si l'utilisateur clique sur Autoriser, appelez la fonction de sélection des informations sur l'emplacement pour sélectionner l'emplacement.
Si l'utilisateur clique sur Refuser ou s'il a déjà cliqué sur Refuser l'autorisation, ouvrez la boîte modale des paramètres utilisateur.
Utiliser pour uni.openSetting
appeler l'interface de configuration de l'applet client
L'utilisateur clique sur Autoriser dans les paramètres et appelle la fonction de sélection des informations de localisation.
Lorsque l'utilisateur clique sur Non autorisé dans les paramètres, le message de refus d'autorisation s'affiche.
Code complet :
Balises de page
<!-- 点击按钮获取地图位置信息 -->
<view @click="getSetting">{
{ address }}</view>
<!-- 为保持页面modal弹框UI样式一致,使用第三方uView组件 -->
<u-modal v-model="isShowOpen" :content="content" @confirm="openSetting" :show-cancel-button="true"></u-modal>
méthode:
export default{
data(){
address: '点击添加地址(必填)',
isShowOpen:false,//是否打开设置
content:'检测到您没打开获取位置功能权限,是否去设置打开?',
},
methods:{
// 1.获取设置信息-用户权限列表
getSetting() {
const that = this;
uni.getSetting({
success: res => {
console.log('用户权限列表:', res.authSetting)
if (res.authSetting['scope.userLocation']) {
console.log('已授权userLocation')
// 选择位置信息
that.chooseLocation();
} else {
console.log('用户未授权userLocation')
//2.用户第一次进来发起授权
uni.authorize({
scope: 'scope.userLocation',
success: (res1) => {
console.log("允许授权", res1);
// 3.如果用户点击了允许,调用选择位置信息函数选择位置
that.chooseLocation();
},
fail: (err1) => {
console.log("拒绝授权", err1);
// 3.如果用户点击了拒绝或者用户之前点击过拒绝授权,打开用户设置模态框
that.isShowOpen = true;
},
})
}
}
})
},
// 4.打开设置
openSetting(){
const that = this;
uni.openSetting({
success: (res) => {
console.log("打开设置成功", res);
if (res.authSetting['scope.userLocation']) {
console.log('成功授权userLocation')
// 5.用户在设置中点击了允许,调用选择位置信息函数
that.chooseLocation();
} else {
console.log('用户未授权userLocation')
// 5.用户在设置中点击了不允许,展示拒绝授权信息
uni.showToast({
title: '你拒绝了授权,无法操作内容',
icon: 'none',
duration: 3000,
})
}
},
fail: (err) => {
console.log("打开设置失败", err)
}
})
},
// 选择位置信息
chooseLocation() {
uni.chooseLocation({
success: (res) => {
console.log("选择位置信息", res)
this.address = res.address + res.name
this.lat = res.latitude
this.lng = res.longitude
},
fail(err) {
console.log("选择位置信息失败或者点击了取消按钮", err)
},
})
},
}
}