本文主要介绍小程序定位相关问题的解决办法
问题
餐饮、出行等行业的支付宝小程序在提供服务时,对用户地理位置信息有较强依赖。与此同时,因用户未开启支付宝app定位而导致的定位失败案例(错误码11)占相当大的比例。
定位失败时,小程序未提供合理的权限打开引导,导致用户体验降低甚至流失:
1.引导错误
用户关闭支付宝APP的定位权限,应该引导到前面所述的系统位置设置界面,而不是引导到小程序右上角三个点的设置界面,以下为一个引导错误的案例:
2.用户操作麻烦
以下为一个转化率不高的引导案例,这种引导的方式有以下弊端:
用户操作麻烦:普通用户很难记住这个设置路径,需要反复在小程序和系统界面之间切换,很费时间;
系统差异:不同的系统(iOS和Android,Android手机的不同型号),操作路径不完全一样,对于开发者适配就非常麻烦,难免有遗漏,而一旦遗漏,由于操作路径错误,则用户就无法完成操作;
原理
定位权限的开启,有三个地方,任何一个地方关闭即可禁止位置信息的获取:平台会优先判断小程序级别的用户授权,若小程序地理位置授权已开启,而支付宝定位或手机系统定位任一权限关闭,则my.getLocation 调用失败,返回错误码11。
手机系统级 |
支付宝APP级 |
小程序级 |
|
|
|
方案
1.使用my.getLocation获取地理位置
my.getLocation({ type: 1, // 获取经纬度和省市区县数据 success: (res) => { console.log(res); my.showToast({content:JSON.stringify(res)}); }, fail: (error) => { console.error('定位失败: ', JSON.stringify(error), error.error); if(error.error == 11){ //错误码为11的时候,表示用户支付宝APP级别的定位权限没有开启,需要进一步的引导 } }, complete: () => {}, });
上述代码在用户没在小程序右上角三个点打开地理位置权限的时候,会自动弹窗引导(不会产生错误码),用户允许后,直接代开右上角三个点的地理位置权限,无需用户手工操作.这个时候,如果支付宝APP级别的定位权限已打开,则直接能获取到地理位置,否则会返回错误码11,进入下一步引导。
2.如果my.getLocation返回错误码11,使用my.showAuthGuide
上述代码会引导用户去开启支付宝APP级别的定位权限,用户操作流程如下:
my.getLocation({ type: 1, // 获取经纬度和省市区县数据 success: (res) => { console.log(res); my.showToast({content:JSON.stringify(res)}); }, fail: (error) => { console.error('定位失败: ', JSON.stringify(error), error.error); if(error.error == 11){ //错误码为11的时候,表示用户支付宝APP级别的定位权限没有开启,使用下面方法引导用户开启 my.showAuthGuide({ authType: "LBS" }); } }, complete: () => {}, });