IOS6 地理位置 watchPosition 回调失败
Posted
技术标签:
【中文标题】IOS6 地理位置 watchPosition 回调失败【英文标题】:IOS6 geolocation watchPosition Callbacks fail 【发布时间】:2012-09-23 16:11:13 【问题描述】:watchposition
回调在第一对之后没有在 IOS6 中触发。开始时它会触发一次或两次,仅此而已。一旦失败,对watchposition
或getposition
的进一步调用不会触发成功或失败回调。
我正在寻找的解决方法是打开 ios 6 中引入的地图应用程序,然后点击位置箭头来找到自己。尝试此操作后,回调会按预期每隔一秒左右触发一次。
更新:如果您在导航中运行地图,效果会很好
此外,只要您在使用 GPS 接收器的地方之外,它似乎就可以正常运行。
我作为 bug 提交给苹果;其他人也请这样做!
有人知道编写解决方法的方法吗?
我只能收集到地图正在执行初始化例程以打开 API...
我试图监视手表回调并手动触发getpostion
,希望它会重新启动watchpostion
,但没有成功...
更新 2012 年 10 月 16 日:ipad 锁定/睡眠后手表位置出现故障。唤醒时 watchposition() 不会触发。注意到如果 safari 被最小化并被召回,它就会开始触发。
更新 2012 年 11 月 17 日:错误视频和解决方法 http://youtu.be/ygprgHh6LxA - 运行 IOS6.1 Beta2
更新 2012 年 12 月 20 日:IOS6.1 Beta 4 测试 - 仍未解决。
更新 2013 年 3 月 11 日:复制示例
好的,只需几秒钟即可完成复制,这是一个简单的问题。我觉得这不是野生动物园,而是IOS问题。这几乎就像 Google 为 IOS 编写了 bios 以满足 WC3 html 地理位置规范,并在 IOS6 将它们踢下巴士时随身携带。 使用 IOS 设备去这里:
http://uc.myaesc.com/geoloctestorig.htm
点击开始,手表几乎每秒都会返回结果。 然后单击 Google 链接离开此页面。 然后用户浏览器返回按钮返回 点击开始。 Watch 将返回 1 到 3 条记录并挂起。 最小化 safari(主页按钮)然后恢复(safari 图标);停止挂起
就是这样。直到它没有挂起,问题仍然存在。
标记
【问题讨论】:
similar issue SO13129369 这对我们的大量用户来说是个噱头,我们还向苹果提交了错误报告。 只是想知道您的应用曾经是否有离线清单或能够从主屏幕图标全屏运行的 apple-mobile-web-app-capable? 从来没有为网络应用添加过元...仍然是一个问题...等待 ios6.0.1 刚升级到6.0.1,我的应用还是有这个问题 我想知道网络工作者是否可以访问地理位置 【参考方案1】:我的想法:只要位置发生变化,就会调用回调,所以如果没有,你就不会得到回调。在室外,GPS 可以提供更准确的位置,并且它会随着其他定位方法无法察觉的较小运动而变化。
【讨论】:
【参考方案2】:同样的问题。我添加了额外的可选参数但无济于事......尝试了一些事情(更新了隐私设置,尝试了 getPosition 与 watchPosition,在后台运行地图。是的,就在 3 天前,我的代码是完美的,现在,它是垃圾。 .. :-( Apple 的悲惨日子?
【讨论】:
【参考方案3】:对于任何编写基于 Web 的地理定位应用程序的人来说,这个问题似乎是一场真正的灾难,因为 iOS 设备拥有如此高的市场份额。 请大家确保您已通过 bugreport.apple.com 向苹果提交错误报告!
很可能与(我没有足够的声誉在那里发帖)相同的问题:iOS 6 breaks GeoLocation in webapps (apple-mobile-web-app-capable)
我整理了一个测试页,如果你想调查这个问题,你可以使用它:
-
在您的 iPhone 或 iPad 中打开 http://jsbin.com/esasix/16/。
在外面走走,刷新页面并尝试其他测试场景。
注意您的职位是如何报告的。
我自己做了很多测试,结果如下:
进行的测试: 使用这个简单的测试页面进行自己的测试:jsbin.com/esasix/16/ 使用 maps.google.com 移动网络地图进行自己的测试 使用我的应用程序进行自己的测试 来自我的应用程序外部用户的许多日志 使用不同的设备进行测试
我的发现:
在相同的测试情况下,我经常以 5m 的精度定期获得完美的定位,以及由于错误导致的接收不佳。这意味着设备、位置、天气、一天中的时间等在两种情况下都是相同的。
加载页面后有时只返回一个位置。 有时加载页面后会返回几个位置。 有时会返回一些好的位置然后突然停止返回位置(有时会在静止一段时间后发生)并进入不良状态,可能会再次返回位置但通常是错误的位置。 有时会返回许多位置,精度为 65m。 有时返回的许多位置精度不一(通常为 50-300m)。 这些精度差的系列位置有时会接近5m精度的完美系列(进入差状态后?)。 有时,连续多次测试一切正常:-)
这些行为似乎以各种组合出现。
在某些情况下,重新打开 Safari 似乎会重新设置某些内容并重新开始工作。但是,在其中一些情况下,它只工作了一段时间,而在其他情况下,它根本没有效果,因此它可以用作可靠的解决方法(?)。打开内置地图应用程序时会显示相同的行为,有时会有所帮助,有时不会...
已经测试了使用 navigator.geolocation.watchPosition 的代码以及在循环中定期调用 navigator.geolocation.getCurrentPosition 的代码,并且没有任何区别,在这两种情况下都可以看到相同类型的问题。
iOS 版本 6.0 到 6.1.2 似乎会发生 我没有使用 apple-mobile-web-app-capable 元标记。
我发现,有时某个特定的测试情况似乎显示了导致得出结论的特定行为,但随后另一个测试证明该结论是错误的。我还没有找到任何可靠可重现的行为(或解决方案)。
【讨论】:
有人用 iOS 6.1.3 beta 测试过吗? 对于所有对这个错误感兴趣的人,我也在discussions.apple.com/thread/4313850?start=60&tstart=0 报告我的经验(因为我还没有足够的声誉来编写 cmets 并在 SO 上包含照片)跨度> 在 iOS 6.1.3 中未修复。见discussions.apple.com/thread/4313850?start=60&tstart=0以上是关于IOS6 地理位置 watchPosition 回调失败的主要内容,如果未能解决你的问题,请参考以下文章
地理位置 getCurrentPosition() 和 watchPosition() 不适用于不安全的来源