公司项目是使用cordova + vue搭建的,在项目里有个使用腾讯地图显示当前位置的功能,在本地开发环境及安卓平台都没有问题,但是最近发现在iOS平台上无法使用,直接白屏,于是开始着手解决这个问题。
开始只是以为是不是只是在iOS上显示比较慢,但是发现等了两分钟都没有反应,这就不对劲了,于是我想到可能是webview的问题,因为在本地开发环境没有问题,说明在网页中可以使用,在Android上正常,说明Android的webview上也没有问题,所以问题出在iOS的定位上,通过排查,发现iOS上根本没有打印出定位信息,那么问题就出在navigator.geolocation.getCurrentPosition无法定位的问题上。
到MDN上看api文档,上面写iOS由于安全问题需要在https环境下访问,于是又找到了腾讯地图啊JavaScript api文档上找到了这个https://mapapi.qq.com/web/mapComponents/geoLocation/v/geolocation.min.js,看了下里面的代码,原理就是在dom上增加一个iframe加载腾讯地图封装的一个获取定位的方法,而这个地址是https协议的,所以就实现了获取定位。
但是后面一想,这么做的话不够优雅,而且用起来也比较麻烦,有没有更好的方法?有!
去翻了下cordova-plugin-geolocation的文档,还真让我给找到了
文档上明晃晃的写着原因呢!到这里就明了了,直接在cordova的config.xml中加上NSLocationWhenInUseUsageDescription就好了。
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
<string>获取当前位置</string>
</edit-config>
这就成了!其实就是缺少使用定位的描述,所以被iOS给拒绝定位了。