uni-app hbuilderx 4.24 ios 真机获取定位失败

发布于 1周前 作者 itying888 来自 Uni-App

uni-app hbuilderx 4.24 ios 真机获取定位失败

项目信息 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 正式
HBuilderX版本号 4.24
手机系统 iOS
手机系统版本号 iOS 13.4
手机厂商 苹果
手机机型 se2
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.getLocation({
    type: 'gcj02',  
    altitude: true,  
    async success(res) {  
      console.log(res)  
    },  
    fail(err) {  
      console.log('获取当前位置Error:', err)  
    },  
})

操作步骤:

  • hbuilder x 4.24版本打包自定义基座或者正式包

预期结果:

  • 定位功能正常使用

实际结果:

{
"errMsg": "getLocation:fail getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282"
}

bug描述:

  • 已确定Bundel ID 和 地图key均无问题
  • hbuilder x 4.24版本云端打包出来的ios包以下接口都会有问题: uni.getLocation uni.startLocationUpdate uni.onLocationChange
  • hbuilder x 3.99版本 打包出来就正常
  • 错误提示为:
{
"errMsg": "getLocation:fail getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282"
}

1 回复

针对uni-app在HBuilderX 4.24环境下iOS真机获取定位失败的问题,通常这类问题可能由权限配置、代码实现、系统环境等多个因素导致。以下是一个详细的代码案例和配置步骤,帮助你排查和解决定位失败的问题。

1. 配置manifest.json

首先,确保在manifest.json中正确配置了iOS的定位权限。

{
  "mp-weixin": { // 其他平台配置...
  },
  "app-plus": {
    "distribute": {
      "apple": {
        "permissions": {
          "location": {
            "desc": "你的应用需要访问您的地理位置信息"
          }
        }
      }
    }
  }
}

2. 请求定位权限

在代码中,你需要使用uni-app提供的API来请求用户的定位权限,并获取位置信息。以下是一个简单的示例:

// 引入uni-app的map模块
const mapModule = uni.requireNativePlugin('map');

// 请求定位权限并获取位置信息
function getLocation() {
  uni.authorize({
    scope: 'scope.userLocation',
    success() {
      uni.getLocation({
        type: 'gcj02', // 坐标系
        success(res) {
          console.log('当前位置:', res.latitude, res.longitude);
        },
        fail(err) {
          console.error('获取位置失败:', err);
        }
      });
    },
    fail() {
      console.error('用户拒绝授权获取位置');
      // 可尝试使用原生插件获取位置(若用户已在系统设置中授权)
      mapModule.getLocation({
        success(res) {
          console.log('使用原生插件获取位置:', res.latitude, res.longitude);
        },
        fail(err) {
          console.error('使用原生插件获取位置失败:', err);
        }
      });
    }
  });
}

// 调用函数获取位置
getLocation();

3. 检查iOS系统设置

  • 确保在iOS设备的“设置”->“隐私”->“定位服务”中,你的应用已被授权访问位置信息。
  • 如果应用被设置为“永不”,则需要在系统设置中更改为“使用时允许”或“始终允许”。

4. 调试和日志

  • 使用HBuilderX的“运行”->“真机运行”功能,将应用部署到iOS真机进行调试。
  • 观察控制台输出,检查是否有权限请求失败或定位失败的错误信息。

通过上述步骤和代码示例,你应该能够定位并解决uni-app在iOS真机上获取定位失败的问题。如果问题依旧存在,建议检查iOS设备的系统版本、uni-app和HBuilderX的版本兼容性,以及是否有其他系统或应用层面的限制。

回到顶部