WeChat アプレットが位置情報の許可を取得し、ユーザーが許可を拒否し、許可するようにユーザーをリダイレクトします。

WeChat アプレットが位置情報の許可を取得し、ユーザーが許可を拒否し、許可するようにユーザーをリダイレクトします。

問題を解く:

WeChat アプレットは位置情報のアクセス許可を取得します。ユーザーは [許可] をクリックして地図上のポイントを直接選択するか、ユーザーが承認を拒否し、再承認のための設定ページにユーザーを案内します。コードが必要な場合は、直接ページの下。

呼び出し方法:

1.uni.getSettingユーザーの現在の設定を取得するために使用します

2.uni.authorize事前にユーザーへの承認リクエストを開始するために使用します。呼び出しが行われると、ポップアップ ウィンドウがすぐにユーザーに、アプレットによる特定の機能の使用またはユーザー データの一部の取得を許可するかどうかを尋ねますが、対応するインターフェイスは実際には呼び出されません。ユーザーが以前に承認に同意していた場合、ポップアップ ウィンドウは表示されず、成功が直接返されます。ユーザーが以前に認証を拒否したことがある場合、このインターフェイスは直接失敗コールバックに入りuni.getSettingますuni.openSetting

3.uni.openSettingクライアント アプレット設定インターフェイスを呼び出し、ユーザーが設定した操作結果を返すために使用します。

4. を使用してuni.chooseLocation地図を開き、場所を選択します

解決策:

設定情報の取得に使用uni.getSetting- ユーザー権限リスト:

ユーザーが許可されている場合は、直接呼び出してuni.chooseLocation地図を開いて場所を選択します。

まだ承認されていない場合は、を使用してuni.authorize承認を開始します

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-lu4uD0ap-1648964361911) (C:\Users\GIGABYTE\AppData\Roaming\Typora\) typora-user-images\ 1648964049110.png)]

ユーザーが「許可」をクリックすると、位置情報の選択関数を呼び出して位置を選択します。

ユーザーが「拒否」をクリックした場合、またはユーザーが以前に「認証の拒否」をクリックしたことがある場合は、ユーザー設定モーダル ボックスを開きます。
ここに画像の説明を挿入します

uni.openSettingクライアント アプレット設定インターフェイスを呼び出すために使用します

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-KPiAGywB-1648964361912) (C:\Users\GIGABYTE\AppData\Roaming\Typora\) typora-user-images\ 1648963973941.png)]

ユーザーは設定で [許可] をクリックし、位置情報の選択機能を呼び出しました。

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-UU9WQNf1-1648964361913) (C:\Users\GIGABYTE\AppData\Roaming\Typora\) typora-user-images\ 1648964288498.png)]

ユーザーが設定で [許可されない] をクリックすると、認証拒否メッセージが表示されます。

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが存在する可能性があります。画像を保存して直接アップロードすることをお勧めします (img-GDBdz7pq-1648964361913) (C:\Users\GIGABYTE\AppData\Roaming\Typora\) typora-user-images\ 1648964258438.png)]

完全なコード:

ページタグ

<!-- 点击按钮获取地图位置信息 -->
<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)
					},
				})
			},
                
            
    }
}

おすすめ

転載: blog.csdn.net/m0_52459016/article/details/123936449