查看: 10229|回复: 79

[咨询求助] ios10下 网页百度地图定位失败

[复制链接]
cui_vip 发表于 2016-9-19 10:12:53 | 显示全部楼层 |阅读模式
ios10下 网页百度地图定位失败 H5 https
cuijian1129 发表于 2016-11-10 20:06:39 | 显示全部楼层
过去这么久看来大家疑问比较多,我再梳理一下。
首先结论:
JSAPI目前支持IOS10的定位,不论开发者采用的是HTTP还是HTTPS的方式调用都可以支持,所以对于开发者来说不用修改任何代码。
对于Chrome 50 +的浏览器,JSAPI目前不支持H5定位,但是JSAPI的定位接口会采用其他定位逻辑返回定位结果,精度为城市级别。
对于Chrome H5定位的问题,因为谷歌的限制很严格,目前认为除了开发者升级自己的服务为HTTPS外没有其他解决方案。但是因为用户在不翻墙的情况下,使用chrome调用H5定位接口都会失败,所以目前Chrome的问题对于非翻墙用户和之前基本无差别。
事件起因和过程方式:
因为处于隐私安全的考虑,谷歌和苹果开始强制其浏览器在进行H5定位时必须在HTTPS请求的页面上进行。但是因为Chrome之前的H5定位服务被墙,所以Chrome的升级并没有引起察觉。在Iphone发布了IOS10后,开始正式限制了HTTPS。造成我们原有的定位接口无法进行H5定位。同时,因为JSAPI代码逻辑和IOS10限制的原因,导致即使开发者采用HTTPS的方式引用JSAPI也无法进行H5定位。
我们这边的解决方案的设计为让开发者们不改动任何代码的情况下能够正常进行IOS10 的 H5定位,因此对于JSAPI的定位逻辑进行了修改,H5定位的相关逻辑单独写到一个html文件中,当识别用户的设备UA为IOS10+时,使用iframe异步HTTPS加载改html文件,完成H5定位逻辑,并推送回定位结果。对于非IOS10设备,还是采用原来的定位逻辑不变。

经过测试,验证上述方案在IOS10的微信、Safari等浏览器中都能生效。
但是同时发现该方案在Chrome 50+的浏览器中依然不能生效。通过阅读Google的文档发现他们限定了iframe加载的方式
image001.png

之后又进行了其他方案尝试都未成功,最终判断目前对于Chrome的问题只能是开发者本身的服务升级为HTTPS。

最近一阵收到了大家的反馈,如果是在safari不能定位,那么请自查一下代码,看看是不是用的H5原生的定位。
还有一部分人反应在ios10 webview和微信公众号的情况下还是不能正确定位。目前怀疑是这种使用条件的限制较为严格。需要全站HTTPS。
当然具体的原因我也会再调研一下,目前如果有同学全站HTTPS的情况下,定位还是失败,请不要犹豫。赶快帖子下留言联系我。。



cuijian1129 发表于 2016-9-20 20:03:37 | 显示全部楼层
xiedingqi 发表于 2016-9-20 18:32
同样是 IOS10  百度地图定位失败  研究了很久 无解  请尽快解决  辛苦了 前辈们
...

各位,我们现在已经有个ios10的处理策略,同时验证了chrome50+版本也限制了定位请求必须在https下,而且chrome的限制更加严格。使用ios10的策略在chrome上依然行不通。
看来谷歌干的比苹果更绝。。。。
为了给大家及时止损,我现在放出一个临时方法供大家使用,所有使用此方法的同学请回贴写好邮箱并注明已使用,我再更新正式方法后群发邮件给大家。
临时止损方法(此方法为临时方法,不对服务质量做保证):
1.不再调用原api的定位相关方法(BMap.Geolocation()等)
2.在代码合适的位置添加如下代码
  1. var timeout= 5000;
  2. var maximumAge = 60000;
  3. var iframe = document.createElement('iframe');
  4. iframe.height = 0;
  5. iframe.width = 0;
  6. iframe.style.borderWidth = 0;
  7. iframe.src="https://api.map.baidu.com/res/staticPages/location.html?timeout=" + timeout + "&maximumAge=" + maximumAge;
  8. document.body.appendChild(iframe);
  9. window.addEventListener('message', function(e) {
  10.     var result = JSON.parse(e.data);
  11.     if (!!result.code) {
  12.        // 定位失败
  13.         console.log(result);
  14.     } else {
  15.         // 定位成功
  16.         console.log(result)
  17.     }
  18. }, false);
复制代码

timeout和maximumAge为配置项可以自己修改。对于定位成功和失败返回的数据格式大家可以自行查看location.html的代码。

再次声明!!此方法为临时方法!!不对服务质量做保证!!如果使用请在下面留下邮箱!

对于IOS10更新给大家带来的不便深表歉意!我们确实应该提前做准备,这个问题的正式解决方案我们也会在这两天尽快给出
回复 支持 1 反对 0

使用道具 举报

cuijian1129 发表于 2016-9-21 17:39:04 | 显示全部楼层
已经上线了,大家用原来的接口试一下吧 有问题留言
回复 支持 0 反对 1

使用道具 举报

cuijian1129 发表于 2016-9-22 10:35:19 | 显示全部楼层
还是有定位问题的各位亲,请仔细检查一下自己的定位服务是否调用的是我们的api,还是说直接用的h5接口。。直接用H5接口肯定是失败的。。
回复 支持 0 反对 1

使用道具 举报

cuijian1129 发表于 2016-9-22 10:23:22 | 显示全部楼层
各位,我测试用的就是官网的定位demo,可以微信扫码直接试试,我自己的6s升级的ios10确实测试没问题了
http://developer.baidu.com/map/jsdemo/demo/i8_1.htm 1474511022.png
回复 支持 1 反对 0

使用道具 举报

xiedingqi 发表于 2016-9-21 18:11:38 | 显示全部楼层
貌似还不行  APP 和 微信都测试了
回复 支持 0 反对 1

使用道具 举报

梦中编程 发表于 2016-9-19 14:11:15 | 显示全部楼层
同问,这个问题是什么原因,怎么解决?
回复 支持 0 反对 1

使用道具 举报

cuijian1129 发表于 2016-11-22 10:31:55 | 显示全部楼层

没太明白你说的调用百度地图导航是什么意思。。
回复 支持 1 反对 0

使用道具 举报

cuijian1129 发表于 2016-9-20 10:54:51 | 显示全部楼层
各位,昨天晚上我们也调试了一下,发现现在确实即使采用https方式请求我们的api依然会定位失败,同时ios10和chrome最新版本都有这个问题。我们正在紧急修复这个问题
回复 支持 1 反对 0

使用道具 举报

cuijian1129 发表于 2016-9-19 12:07:22 | 显示全部楼层
你现在用的是https么?
 楼主| cui_vip 发表于 2016-9-19 13:36:17 | 显示全部楼层
cuijian1129 发表于 2016-9-19 12:07
你现在用的是https么?

木有 我用的是http
 楼主| cui_vip 发表于 2016-9-19 15:21:48 | 显示全部楼层
梦中编程 发表于 2016-9-19 14:11
同问,这个问题是什么原因,怎么解决?

已经解决了 很曲折 忙活了将近5个小时
cuijian1129 发表于 2016-9-19 18:18:26 | 显示全部楼层
不论你们自己的页面是否是https,
只要用https的方式请求我们的api应该就可以解决问题了
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=你的密钥&s=1"></script>
摩Sports98 发表于 2016-9-19 20:58:50 | 显示全部楼层
cuijian1129 发表于 2016-9-19 18:18
不论你们自己的页面是否是https,
只要用https的方式请求我们的api应该就可以解决问题了
...

目前使用感觉依然有很多问题。IOS9下获取正常,IOS10下获取不正常。FF获取正常,chorme下获取不正常。

这个有DEBUG模式么,将一些信息log出来给开发者看看
摩Sports98 发表于 2016-9-19 21:30:03 | 显示全部楼层
本帖最后由 摩Sports98 于 2016-9-19 21:34 编辑
cuijian1129 发表于 2016-9-19 18:18
不论你们自己的页面是否是https,
只要用https的方式请求我们的api应该就可以解决问题了
...

英文不行,还请帮忙看看是否跟这个有关系


https://w3c.github.io/webappsec-secure-contexts/#legacy-example


郁闷了。我的版本是53
Geolocation API removed from unsecured origins in Chrome 50
sd2134 发表于 2016-9-19 22:18:54 | 显示全部楼层
本帖最后由 sd2134 于 2016-9-19 22:41 编辑
cuijian1129 发表于 2016-9-19 18:18
不论你们自己的页面是否是https,
只要用https的方式请求我们的api应该就可以解决问题了
...

使用你给出的方式,依旧不行。只有ios10这样,安卓正常,iso9正常。(l另外这论坛怎么还传不了图!Server (IO) Error)


godkatrina4 发表于 2016-9-20 14:17:37 | 显示全部楼层
cuijian1129 发表于 2016-9-20 10:54
各位,昨天晚上我们也调试了一下,发现现在确实即使采用https方式请求我们的api依然会定位失败,同时ios10 ...

在微信里你们也试试
 楼主| cui_vip 发表于 2016-9-20 15:32:07 | 显示全部楼层
cuijian1129 发表于 2016-9-20 10:54
各位,昨天晚上我们也调试了一下,发现现在确实即使采用https方式请求我们的api依然会定位失败,同时ios10 ...

不是采用https请求你们的api就能解决问题的,而是要让第三方应用支持https访问
非https被限制获取位置信息 这是ios10的一个新变化
QQ图片20160920153108.png
cskleo 发表于 2016-9-20 15:46:56 | 显示全部楼层
cuijian1129 发表于 2016-9-20 10:54
各位,昨天晚上我们也调试了一下,发现现在确实即使采用https方式请求我们的api依然会定位失败,同时ios10 ...

你好  如果解决了 请及时发布信息通知我们  就在这边发帖就行
W—LH—B 发表于 2016-9-20 16:35:08 | 显示全部楼层
Mark一下,最近深受IOS10毒害,希望尽快解决
xiedingqi 发表于 2016-9-20 18:32:10 | 显示全部楼层
同样是 IOS10  百度地图定位失败  研究了很久 无解  请尽快解决  辛苦了 前辈们 QQ图片20160920183036.jpg QQ图片20160920183118.png
trueloveskybd 发表于 2016-9-21 11:47:36 | 显示全部楼层
百度加油啊!~~~

1.jpg
cuijian1129 发表于 2016-9-21 16:55:18 | 显示全部楼层
各位,你们有谁尝试了腾讯的方法了么?我发现腾讯的也仅仅在ios10的微信中能定位,在safari中还是不成。你们的情况一样么?
cuijian1129 发表于 2016-9-21 20:04:45 | 显示全部楼层
xiedingqi 发表于 2016-9-21 18:11
貌似还不行  APP 和 微信都测试了

开启一下系统设置的定位权限。我自己的ios10已经没问题了。
xiedingqi 发表于 2016-9-21 21:16:27 | 显示全部楼层
cuijian1129 发表于 2016-9-21 20:04
开启一下系统设置的定位权限。我自己的ios10已经没问题了。

真的不行 请私聊
trueloveskybd 发表于 2016-9-22 09:29:43 | 显示全部楼层
cuijian1129 发表于 2016-9-21 17:39
已经上线了,大家用原来的接口试一下吧 有问题留言

不行啊,还是提示无法获取,代码还是之前的没变(之前是可以顺利获取的)  能发段你说的成功的H5案例代码吗?如果我们适用下来可以,那么是真的可以
trueloveskybd 发表于 2016-9-22 09:31:49 | 显示全部楼层
cuijian1129 发表于 2016-9-21 16:55
各位,你们有谁尝试了腾讯的方法了么?我发现腾讯的也仅仅在ios10的微信中能定位,在safari中还是不成。你 ...

腾讯的代码可以的,我在safari中也可以。 只是之前部署的是百度的定位API,现在改用腾讯的要改很多地方,只能希望百度赶快改好。 我也受影响。
cuijian1129 发表于 2016-9-22 10:48:49 | 显示全部楼层
如果自己不能排查原因的,可以直接把qq贴出来,然后给我看下线上地址。刚才和一位开发者沟通后发现它调用的是H5原生接口,不是我们的接口。
trueloveskybd 发表于 2016-9-22 14:11:21 | 显示全部楼层
本帖最后由 trueloveskybd 于 2016-9-22 14:14 编辑

可以了!
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxxxx"></script>
这里不用https

还有居然不用BMap.Convertor.translate调整实际位置了,以前需要这个,现在不用了。转换了不知道转到那个坐标去了。

点评

去掉BMap.Convertor.translate,安卓版会受到影响吗?  发表于 2016-9-22 16:06
jormen_chen 发表于 2016-9-22 16:08:27 | 显示全部楼层
trueloveskybd 发表于 2016-9-22 14:11
可以了!

这里不用https

现在是去掉BMap.Convertor.translate,就可以了吗,会不会影响安卓版的使用
cuijian1129 发表于 2016-9-22 19:20:25 | 显示全部楼层
按说应该一直就不用自己转换坐标才对啊。。

小黑屋|手机版|百度地图开放平台 ( 京ICP证030173号 )

GMT+8, 2017-9-21 05:44 , Processed in 0.332134 second(s), 26 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表