WeChat アプレットが位置情報の許可を取得し、ユーザーが許可を拒否し、許可するようにユーザーをリダイレクトします。
問題を解く:
WeChat アプレットは位置情報のアクセス許可を取得します。ユーザーは [許可] をクリックして地図上のポイントを直接選択するか、ユーザーが承認を拒否し、再承認のための設定ページにユーザーを案内します。コードが必要な場合は、直接ページの下。
呼び出し方法:
1.uni.getSetting
ユーザーの現在の設定を取得するために使用します
2.uni.authorize
事前にユーザーへの承認リクエストを開始するために使用します。呼び出しが行われると、ポップアップ ウィンドウがすぐにユーザーに、アプレットによる特定の機能の使用またはユーザー データの一部の取得を許可するかどうかを尋ねますが、対応するインターフェイスは実際には呼び出されません。ユーザーが以前に承認に同意していた場合、ポップアップ ウィンドウは表示されず、成功が直接返されます。ユーザーが以前に認証を拒否したことがある場合、このインターフェイスは直接失敗コールバックに入りuni.getSetting
ますuni.openSetting
。
3.uni.openSetting
クライアント アプレット設定インターフェイスを呼び出し、ユーザーが設定した操作結果を返すために使用します。
4. を使用してuni.chooseLocation
地図を開き、場所を選択します
解決策:
設定情報の取得に使用uni.getSetting
- ユーザー権限リスト:
ユーザーが許可されている場合は、直接呼び出してuni.chooseLocation
地図を開いて場所を選択します。
まだ承認されていない場合は、を使用してuni.authorize
承認を開始します
ユーザーが「許可」をクリックすると、位置情報の選択関数を呼び出して位置を選択します。
ユーザーが「拒否」をクリックした場合、またはユーザーが以前に「認証の拒否」をクリックしたことがある場合は、ユーザー設定モーダル ボックスを開きます。
uni.openSetting
クライアント アプレット設定インターフェイスを呼び出すために使用します
ユーザーは設定で [許可] をクリックし、位置情報の選択機能を呼び出しました。
ユーザーが設定で [許可されない] をクリックすると、認証拒否メッセージが表示されます。
完全なコード:
ページタグ
<!-- 点击按钮获取地图位置信息 -->
<view @click="getSetting">{
{ address }}</view>
<!-- 为保持页面modal弹框UI样式一致,使用第三方uView组件 -->
<u-modal v-model="isShowOpen" :content="content" @confirm="openSetting" :show-cancel-button="true"></u-modal>
方法:
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)
},
})
},
}
}