uni-app打包成iOS在真机上运行,使用高德在线定位,偶尔出现一段时间内无法定位

uni-app打包成iOS在真机上运行,使用高德在线定位,偶尔出现一段时间内无法定位

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 win10
HBuilderX 正式
HBuilderX版本 4.45
手机系统 iOS
手机版本号 iOS 18
手机厂商 苹果
手机机型 iphone 15
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

getLocation() {
    uni.getLocation({
        type: 'gcj02', // 使用高德坐标系
        altitude: false,
        isHighAccuracy: false,
        highAccuracyExpireTime: 4500,
        success: function(res) {}
    });
}

操作步骤:

1

预期结果:

1

实际结果:

1

bug描述:

打包成iOS app,使用高德在线定位服务,偶发一段时间内一直获取不到定位,可能过半天或者一天,重新定位又可以,定位权限已打开,定位不到时报错:

{"errMsg":"getLocation:fail Position retrieval timed out.","errCode":3,"code":3}

更多关于uni-app打包成iOS在真机上运行,使用高德在线定位,偶尔出现一段时间内无法定位的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

同一套代码,安卓一直没有问题,苹果会偶先,半年内大概偶现几次。

更多关于uni-app打包成iOS在真机上运行,使用高德在线定位,偶尔出现一段时间内无法定位的实战教程也可以访问 https://www.itying.com/category-93-b0.html


解决没

这个定位超时问题在uni-app iOS端确实比较常见,主要是由于iOS系统对定位服务的特殊限制导致的。以下是关键分析:

  1. 系统限制原因:
  • iOS对后台定位有严格限制,特别是从iOS 13开始
  • 当应用进入后台时,系统可能会暂停定位服务以节省电量
  • 系统定位服务本身存在缓存机制,不会频繁更新
  1. 建议优化方案:
getLocation() {
    uni.getLocation({
        type: 'gcj02',
        altitude: false,
        isHighAccuracy: true, // 改为高精度模式
        highAccuracyExpireTime: 10000, // 适当延长超时时间
        success: (res) => {},
        fail: (err) => {
            // 失败时重试机制
            setTimeout(() => this.getLocation(), 2000)
        }
    });
}
回到顶部