关于通过高德js-api获取定位在iPhone和Android手机上不同的表现

开发了一个工单系统,其中有几处需要上传手机的当前经纬度,代码不复杂,直接引用了高德lbs服务的js-api接口,前端代码参考:


                

发布到企业微信中作为一个应用,在手机上进行测试到这一块代码的地方,iPhone测试没问题,会弹出隐私提示,确认后获取当前经纬度成功:

关于通过高德js-api获取定位在iPhone和Android手机上不同的表现_第1张图片 iPhone-LBS-隐私提示 关于通过高德js-api获取定位在iPhone和Android手机上不同的表现_第2张图片 iPhone-LBS-GeoLoc结果

 

在Android手机(测试型号:小米5)上测试,结果出现了geolocation permission denied提示,百度一下发现不是个例,包括高德-LBS文档上也有说明:

关于通过高德js-api获取定位在iPhone和Android手机上不同的表现_第3张图片 Android-LBS-结果

C)getCurrentPosition返回的message原因解析:
......
Geolocation permission denied:用户禁用了定位权限,需要用户开启设备和浏览器的定位权限,并在浏览器弹窗中点击“允许使用定位”选项。   
Geolocation permission denied:浏览器禁止了非安全域的定位请求,比如Chrome、IOS10已陆续禁止,这时候需要升级站点到HTTPS。注意Chrome不会禁止localhost等域名HTTP协议下的定位;   

【检查应用权限设置】检查小米5的企业微信的定位权限:为打开状态;索性把企业微信的全部权限都打开,测试,结果仍然:Geolocation permission denied;

【将企业微信的定位权限先关闭-再打开】测试结果仍然:Geolocation permission denied;

【重启小米5手机】测试结果仍然:Geolocation permission denied;

【优化高德LBS代码】按照高德LBS的文档,可以加入远程定位。加入如下代码后,定位速度貌似加快了,但在Android手机上结果仍然失败,提示信息不变:



                        //使用远程定位,见 remogeo.js
                        var remoGeo = new RemoGeoLocation();

                        //替换方法
                        navigator.geolocation.getCurrentPosition = function() {
                            return remoGeo.getCurrentPosition.apply(remoGeo, arguments);
                        };

                        //替换方法
                        navigator.geolocation.watchPosition = function() {
                            return remoGeo.watchPosition.apply(remoGeo, arguments);
                        };

【配置HTTPS】测试到这里,只能从这一行文字“浏览器禁止了非安全域的定位请求”下手解决了,将tomcat配置https:

    
        
            
        
    

将微信应用的工作台应用主页修改为https://...:8443/...,因为是自签名,在PC网页上还好,提示“不安全网页”,在“高级”中选择继续浏览,是可以正常访问的。在企业微信中就让人很无语了,直接就是一个提示:

关于通过高德js-api获取定位在iPhone和Android手机上不同的表现_第4张图片 企业微信-自签名HTTPS

企业微信至于么,我是企业微信的管理员呢~

【阿里CA证书】自签名行不通,看来只好通过公开的CA证书机构了,阿里CA证书的费用不便宜哦,广告度首个链接点进去,一年的费用5000起:

关于通过高德js-api获取定位在iPhone和Android手机上不同的表现_第5张图片

【还有什么划算的解决方案】到此为止了,看来Android手机还是不好用哦~ 买起来便宜、用起来贵,国内Android生态链对企业可不便宜。

【临时替代方案】在没有跟企业微信集成的情况下,系统可以在浏览器中打开登录并定位,在Android手机上目前采用此替代方案,暂且使用了~~

你可能感兴趣的:(LBS,workflow)