H5获取用户位置信息,以及相关的坑


h5如何获取用户定位信息

为了安全稳定一些,使用百度地图

第一步: 创建应用

登录百度开发者平台,创建应用

在这里插入图片描述
第二步

输入应用名称,选择浏览器端,完成之后,提交返回我的应用,会看到和上面一张图一样的,有一个AK,

在这里插入图片描述第三步:在项目中创建Bmap.js

export default {
    init: function (){
    	const AK = "你的AK";
    	const BMap_URL = "https://api.map.baidu.com/api?v=2.0&ak="+ AK +"&s=1&callback=onBMapCallback";
    	return new Promise((resolve, reject) => {
    	// 如果已加载直接返回
    	if(typeof BMap !== "undefined") {
    		resolve(BMap);
    		return true;
    	}
    	// 百度地图异步加载回调处理
    	window.onBMapCallback = function () {
    		resolve(BMap);
    	};
    	const getCurrentCityName = function () {
    		return new Promise(function (resolve, reject) {
    		let myCity = new BMap.LocalCity()
   			myCity.get(function (result) {
    			resolve(result.name)
    		})
    	})
    }
    // 插入script脚本
    let scriptNode = document.createElement("script");
    	scriptNode.setAttribute("type", "text/javascript");
    	scriptNode.setAttribute("src", BMap_URL);
    	document.body.appendChild(scriptNode);
    });
  }
}

第四步:在需要的文件中引入,在monted中调用 getCurrentCity

import getUserLocation from "@/utils/Bmap.js"
  //开启定位
    const getCurrentCity = ()=>{
            getUserLocation.init().then(BMap=>{
                const geolocation=new BMap.Geolocation();
                geolocation.getCurrentPosition(
                function getinfo(position){
                    console.log(position)//这里就会获取到用户的经纬度信息
                }
                );
            })
    }

效果图
效果图

问题1:用户拒绝之后依然可以拿到位置信息

上面写完的时候,当用户拒绝,我们依然可以获取到定位,但是信息不是很准确
但是我们可以更加刚才获取到的信息的position.accuracy这个值进行判断
如果用户拒绝了position.accuracy这个值为null,如果不拒绝是有值的,亲测可用哈哈哈

  //开启定位
    const getCurrentCity = ()=>{
            getUserLocation.init().then(BMap=>{
                const geolocation=new BMap.Geolocation();
                geolocation.getCurrentPosition(
                function getinfo(position){
                   if(position.accuracy){
                    //具体操作
                    }else{
                        Toast("用户拒绝获取定位");
                    }
                }
                );
            })
    }

问题2:app缓存用户信息,两次之后不在调起位置授权弹窗

关于这个问题,百度官方给的回答也是没有办法的,因为ios 会缓存用户授权信息,所以两次之后就不会在吊起这个授权弹窗,
但是安卓会每次吊起

在这里插入图片描述
在这里插入图片描述
http://www.skyfox.org/html5-geolocation-safari-user-permission-prompt.html
这篇文章的解决方案是:
(设置)Settings -> (通用)Genera -> (重置) Reset-> (重置定位于隐私)Reset Location & Privacy.
(设置)Settings ->( 隐私)Privacy 开启 Location Services.

但是我测试不好使,只能卸载重装

问题2转自 Lvan-Zhang

根据经纬度获取citycode等信息

//vue.config 中定义接口BdMap===http://api.map.baidu.com
	           Api.get('/BdMap/reverse_geocoding/v3',{
                            ak:'你的ak ',
                            output:'json',
                            coordtype:'wgs84ll',
                            location:lat+','+lng
                        }).then(res=>{
                            console.log(res.result.cityCode;,'-----');
                        })

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Uniapp是一款跨平台的应用开发工具,可同时支持微信小程序、支付宝小程序、H5、App等多个平台。对于H5平台获取用户信息,我们可以通过uni.login()方法来获取用户信息。 uni.login()方法会向服务器发起请求,获取用户的唯一标识和会话密钥。我们可以通过这些参数来获取用户信息,具体步骤如下: 1. 在uni.login()方法的成功回调函数里,获取用户的code。示例代码: ``` uni.login({ provider: 'weixin', success: function (loginRes) { console.log(loginRes.code); } }); ``` 2. 在服务器端根据code获取用户的唯一标识和会话密钥。一般我们可以通过微信公众平台提供的接口来实现。 3. 在H5端使用uni.request()方法向服务器请求获取用户信息。示例代码: ``` uni.request({ url: 'https://yourserver.com/getUserInfo', method: 'POST', data: { code: loginRes.code, // 其他参数 }, success: function (res) { console.log(res.data); } }); ``` 4. 在服务器端返回用户信息后,在请求的成功回调函数里对用户信息进行处理。根据需要可以将用户信息存储在本地或者发送给后端处理。 以上就是通过uniapp H5获取用户信息的基本流程。需要注意的是,在实际开发中需要进行安全验证和错误处理,确保系统的安全性和可靠性。 ### 回答2: uniapp是一款跨平台的开发框架,可实现在不同的平台中构建多种应用程序。在其中,可以通过H5页面获取用户信息并对其进行管理和操作。以下是实现方法: 1.在app.vue中添加代码: ``` onLaunch: function () { uni.login({ success: res => { uni.getUserInfo({ provider: 'weixin', success: function (infoRes) { console.log(infoRes.userInfo) } }) } }) }, ``` 2.打开微信开发者工具中的详情->本地设置->勾选不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书,允许在本地运行调试。 3.在项目根目录下的vue.config.js文件中添加配置: ``` devServer: { disableHostCheck: true, port: 8080, }, ``` 以上是获取用户信息的简单方法,可以应用于不同的H5页面。平台不同所需要的配置会有所不同,需要根据具体的开发需求进行调整。通过以上操作我们就能在uniapp h5页面中获取用户信息并进行功能的应用了。 ### 回答3: Uniapp是一款便捷的开发框架,旨在帮助开发人员快速地开发跨平台的应用程序。在Uniapp框架中,我们可以使用H5端来获取用户信息。 首先,我们必须在H5端获得用户授权,以便可以获取用户的基本信息。要获得用户授权,我们需要执行以下步骤: 1. 创建一个按钮或其他触发授权的元素,并为其添加事件监听器。 2. 在点击事件监听器中,我们需要调用微信的授权API来获取用户信息。具体地,我们可以使用`uni.getUserInfo()`方法来获取。 3. 在获取用户信息后,我们可以将其保存到本地缓存中,以便在后续的操作中使用。 下面是一个简单的示例代码: ```javascript <template> <button @click="getUserInfo">获取用户信息</button> </template> <script> export default { methods: { getUserInfo() { uni.getUserInfo({ success: function(res) { uni.setStorageSync('userInfo', res.userInfo) } }) } } } </script> ``` 在上面的代码中,我们创建了一个按钮,当用户点击按钮时,会调用`getUserInfo`方法来获取用户信息。在`getUserInfo`方法中,我们使用`uni.getUserInfo()`方法来获取用户信息获取成功后,将用户信息保存在本地缓存中。 此外,我们还可以使用`uni.login()`方法来获取用户的登录凭证(code),并将其发送到后端服务器,以便进行用户认证。根据后端服务器的要求,我们还可以发送用户信息等其他参数。 总之,Uniapp框架提供了很多方便的API来帮助我们获取用户信息,让我们开发应用程序更加高效、便捷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值