上周三凌晨两点,办公室只剩我一个人。咖啡机已经空了三次,我盯着屏幕上的报错日志,心里骂了一句脏话。这次不是简单的接口超时,而是定位服务彻底罢工了。做H5营销活动三年,我遇到过各种奇葩问题,但像这次这种叫geo突变的定位漂移,真是头一回这么头疼。
产品急着要明天上线“附近好店”模块,用户点击按钮,本该直接跳到最近的门店,结果一半人定位到了太平洋彼岸的某个岛上。测试组反馈说安卓10以上系统复现率高达百分之六十,iOS倒是正常,除了那几个特别卡的旧版本。我当时就想,这geo突变 难道是苹果和安卓底层API的某种暗战?
为了查清楚,我翻遍了GitHub,发现一个高赞Issue里提到了GPS信号在城市峡谷效应中的延迟问题。但这解释不了为什么有些用户刷新几次后,定位就突然“跳”到了几公里外,而且这个跳动毫无规律,像极了量子力学里的观察者效应——你不去看它,它就不动;你一看,它乱飞。
后来我发现了一个容易被忽略的细节。很多开发在处理地理位置权限时,习惯性地使用了enableHighAccuracy: true,但这在高楼密集区反而会导致信号在多个基站间反复横跳。我试着把这个参数改回false,并增加了一个前端兜底逻辑:如果连续两次定位结果的误差超过500米,就自动触发IP定位作为备选。
数据出来了。修改后,定位准确率从原来的54%提升到了92%。剩下的8%误差,主要是用户没开WiFi导致基站定位精度下降,这是物理限制,没办法优化。但业务方接受了这个结果,因为核心场景是“附近”,300米内的精度完全够用。
这让我想到,技术往往不是越精准越好,而是要符合业务场景。geo突变 这个现象,本质上是大城市物理环境对无线信号的干扰,我们对抗不了物理规律,只能去适配它。与其追求厘米级定位,不如做一个更智能的容错机制。比如,当定位置信度低于70%时,界面可以提示用户“定位可能不准确”,并展示一个列表让用户手动选择最近的门店,而不是傻等着。
有个做外卖App的前端朋友跟我吐槽,他们最近也在做类似优化。他们发现,晚上8点晚高峰时,由于大量车辆移动干扰,基站信号波动极大,geo突变 的概率比白天高出三倍。他们的解决方案是在高负载时段,强制降级为城市级定位,牺牲一点点精度换取响应速度的稳定。我觉得这个思路挺野,但有效。
现在回想起来,这次排障最大的收获不是学会了怎么调用定位API,而是明白了数据的边界在哪里。我们总喜欢把定位当成一个确定的点,但实际上,它是一个概率云。用户的位置,是一个范围,而不是一个坐标。接受这种不确定性,比纠结于如何消除它更有意义。
写这篇的时候,我又试了试手机上的定位。站在写字楼30楼,信号满格,但App显示的当前位置,偏偏是楼下奶茶店门口。看来,geo突变 这玩意儿,确实是个玄学。不过没关系,只要用户体验没崩,那点漂移,就当是生活给你的随机性彩蛋吧。】