Google Maps SDK调用GMSPanoramaService请求街景无回调排查
未收到
GMSPanoramaService回调的常见排查方向 GMSPanoramaService实例被提前回收
这是这类场景最常见的触发原因。你当前在异步块内局部创建的panoramaService没有被强引用持有,块代码执行完成后,这个局部变量就会因为超出作用域被ARC释放。GMSPanoramaService不会对自身发出的网络请求做强关联,实例被回收后,已经发出的查询请求会被直接丢弃,完全不会触发后续回调。正确的处理方式是将panoramaService设置为所属类的成员属性,保证从请求发出到回调返回的全流程中实例都不会被提前释放。- 网络请求被静默拦截
地图瓦片、导航路线、展示类街景的请求走独立的网络通道,不代表街景元数据查询的网络链路完全通畅。如果App的网络权限被关闭、设备网络通过VPN/本地防火墙拦截了Google Maps元数据接口的域名,请求会被系统直接掐断,既不触发成功回调,也不会抛出可捕获的错误。 - 调试断点因编译器优化无法命中
如果项目Build Settings中的Swift编译优化等级被设置为非None的调试模式,会导致闭包内的符号被优化,断点无法正确关联到实际执行的代码位置,出现“没有触发回调”的误判。可以临时将编译优化等级调整为None,重新编译运行验证。 - 坐标超出默认查询半径触发SDK已知bug
requestPanoramaNearCoordinate的默认搜索半径为100米,如果传入的start坐标距离最近的可用街景全景点超过100米,部分旧版本Google Maps iOS SDK不会按照文档约定返回“未找到全景”的错误,而是直接中断请求、不触发任何回调。可以优先使用已经能正常加载街景的坐标点做测试,验证回调是否能正常触发。 - API密钥权限范围不匹配
虽然地图上可以正常展示街景全景,但展示类组件和GMSPanoramaService的元数据查询属于两个独立的API权限模块。如果API密钥只开通了街景展示组件的调用权限、没有开通街景元数据查询的权限,服务端会直接静默拒绝请求,不返回任何错误信息。
内容的提问来源于stack exchange,提问作者Reinhard Männer
相关产品推荐
相关产品推荐

