前端一记-微信小程序获取定位失败原因与解决方案
背景
很多时候做商城类型或者本地服务类型的小程序,需要获取用户当前定位,这个权限已经变得很普遍
场景
代码中写了获取定位,但是没有弹出获取定位的授权框。
定位获取授权框弹出了点击没反应 (新)
获取定位授权成功了,但是没有返回0,且没有报错
解决方案
场景一
原因:其中可能主要原因是用户进入小程序没有确认隐私条款,有的场景就会业务代码执行了,把隐私条款页面调走了,这个时候没有同意隐私就会导致无法弹出小程序所有的功能组。
方案:进入小程序第一件事就是授权,先检查授权情况,没授权的直接跳到授权页面 ,授权的在进入,这样不影响原来的业务
checkPrivacy() {
console.log("可用隐私授权:", wx.canIUse('getPrivacySetting'))
if (!wx.canIUse('getPrivacySetting')) {
return
}
return new Promise((resolve, reject) => {
wx.getPrivacySetting({
success: res => {
console.log("是否需要授权:", res.needAuthorization, "隐私协议的名称为:", res.privacyContractName)
if (res.needAuthorization) {
wx.reLaunch({
url: '/pages/common/privacy',
})
} else{
resolve()
}
}
complete: (res) => {
console.log("是否需要授权:", res)
},
})
});
},
场景二
原因:我遇到的场景是进入到地址选择页面,会自动focus让用户输入他当前地址,后面加上了根据当前定位自动选择先选到一个位置。在之前版本这个是不冲突的,在2024年11月初头,安卓版本就会因为focus后输入法弹窗 导致在授权框上一层,但是显示上又是授权框在上面。点通过、拒绝都没有反应;ios能够正常,模拟器无法模拟出输入法弹窗导致问题很难被发现。
方案:进入页面取消focus,在获取定位失败以后再设置focus,优化用户体验
场景三
原因:存在于所有授权定位都开了,但是单app的定位权限在手机系统限制了,这个拿不到定位或者拿到的是0,也没有进入fail。
方案:这个时候判断lng和lat是不是为空或0,一样进入到fail的逻辑中,为了代码简洁性,可以抽离出一个方法给失败的场景调用
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果