DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2017-08-28 21:21
  • 更新:2022-03-03 15:15
  • 阅读:30452

原生定位 - wap2app教程

分类:wap2app

场景说明

有定位需求的M站,通过手机浏览器访问时,经常因为定位问题导致用户体验下降、甚至用户流失,主要有以下几种情况:

  • 部分手机不支持HTML5定位,因网络原因,非国产手机HTML5定位失败的概率更高
  • 每次打开不同的M站,手机浏览器均会弹框提示定位权限,用户可能会误点击导致定位失败
  • HTML5定位效率较低,重依赖定位的业务,在定位成功之前,无法显示业务数据,导致用户长时间等待

如下截图是大家经常碰见的情况:

wap2app运行在5+引擎环境下,5+引擎可以调用系统原生的定位,定位效率及精度远高于浏览器的HTML5定位,因此建议在有定位需求的页面,将HTML5定位替换升级为5+的原生定位。

升级方案

我们在GitHub上开源了一个plusto项目,该项目可以根据平台实现API的自动转换,比如在5+引擎环境下,将浏览器默认定位升级为5+原生定位,实现一套代码平滑迁移至多个平台。

目前关于定位的替换API已完善,参考plusGeolocation.js文件,该js文件判断在5+引擎环境下,将navigator.geolocation.getCurrentPosition()等方法重写为原生定位的方法,这样开发者就无需修改M站定位相关逻辑,就可以自动更换为原生定位。

目前geolocation/h5toplus.js已实现对如下3个HTML5定位方法的重写替换:

  • navigator.geolocation.getCurrentPosition()
  • navigator.geolocation.watchPosition()
  • navigator.geolocation.clearwatch()

开发者只需按照如下步骤操作,即可将浏览器的HTML5定位升级为原生定位:

  1. 下载plusGeolocation.js(下载地址),并上传到M站的cdn服务器上
  2. 在M站上有定位需求的页面引用plusGeolocation.js,例如:
<script src="http://cdn.example.com/js/plusGeolocation.js" type="text/javascript" charset="utf-8"></script>

Tips1: plusGeolocation.js 是通过重写navigator.geolocation API来升级定位功能的,因此需确保在调用HTML5定位代码之前引用plusGeolocation.js;

Tips2:h5toplus.js文件开头就有运行环境的判断,若不是5+环境,则直接return,不会执行替换定位的他逻辑,因此开发者无需担心影响原有定位业务。

    if(!navigator.userAgent.match(/Html5Plus/i)) {  
        //非5+引擎环境,直接return;  
        return;  
    }
5 关注 分享
lhyh 雪之梦技术驿站 Trust 王老吉 Neil_HL

要回复文章请先登录注册

灰太狼的诱惑

灰太狼的诱惑

这个定位是要有定位权限框还是不要?
2022-03-03 15:15
1***@qq.com

1***@qq.com

回复 天使中的魔鬼 :
请问弹窗的问题您解决了吗?
2020-07-09 15:46
BaseCloud

BaseCloud

封装的H5+原生能力接口,一行代码调用原生能力。

开源仓库地址: https://gitee.com/cloud_finder/Joiny-H5Plus
2019-07-20 11:09
闪亮

闪亮

plusGeolocation.js能在uniapp里面吗?
2019-06-27 14:34
dkdk

dkdk

回复 天使中的魔鬼 :
这个后来怎么解决的,因此上不去ios
2019-02-24 17:48
天使中的魔鬼

天使中的魔鬼

回复 chinahappybeer :
我们这里也是会弹出地理位置提示框。希望官方可以解决下。
2018-12-14 13:06
chinahappybeer

chinahappybeer

回复 天使中的魔鬼 :
用这里的依然会出理 m.dianping.com 需要你的地理位置提示框
2018-12-10 16:17
chinahappybeer

chinahappybeer

[ERROR] : ReferenceError: Can't find variable: _dlGeolocation 这个变量是在哪里定义的。
2018-12-10 16:14
chinahappybeer

chinahappybeer

[ERROR] : ReferenceError: Can't find variable: _dlGeolocation
2018-12-10 16:14
天使中的魔鬼

天使中的魔鬼

已解决这个问题,在需要获取地理位置的页面引入plusGeolocation.js后 参考http://www.html5plus.org/doc/zh_cn/geolocation.html 里面的方法获取相应的地址位置信息即可。
2018-11-15 11:39