1. 在使用uni.chooseAddress的时候,需要手机对小程序进行位置授权,第一次点击的事件会触发下面这个对话框:
如果点击取消之后,后续再点击触发uni.chooseAddress都会自动进入fail方法,进不到success。
解决:
在fail方法里面使用uni.showModel,引导用户手动给应用授权,uni.openSetting需要事件驱动,保证同步性。
1 fail(res) { 2 console.log('fail:',res) 3 uni.showModal({ 4 title:'温馨提示', 5 content:'您需要授权后,才能使用微信地址作为收货地址,是否重新授权', 6 success(res) { 7 if(res.confirm){ 8 uni.openSetting({ 9 success(res) { 10 if(res.authSetting['scope.address'] === true){ 11 uni.chooseAddress({ 12 success(res) { 13 console.log('success:',res) 14 }, 15 fail(err) { 16 console.log('fail:',err) 17 } 18 }) 19 } 20 }, 21 fail(err) { 22 console.log('设置fail:',err) 23 } 24 }) 25 console.log('用户点击确认') 26 } else if(res.cancel) { 27 console.log('用户点击取消') 28 } 29 } 30 }) 31 }
2. 授权成功后,进入微信的地址列表,没有选择任何地址就返回,还是会触发fail回调,显示我们fail方法里面的uni.showModel的内容。
原因:
在微信地址列表点击取消,会同时执行cancel和fail,cancel 回调是早期的设计,所有取消操作都归入 fail 回调,errMsg 为 "fail cancel"。
解决:
将得到的err信息判断一下就好了