uni-app IOS端使用地图时高德地图无法获取cityCode

uni-app IOS端使用地图时高德地图无法获取cityCode

操作步骤:

  • uni.getLocation在Android端address中包含cityCode,ios端没有

预期结果:

  • uni.getLocation在Android端address中包含cityCode,ios端没有

实际结果:

  • uni.getLocation在Android端address中包含cityCode,ios端没有

bug描述:

  • uni.getLocation在Android端address中包含cityCode,ios端没有

| 开发环境         | 版本号   | 项目创建方式 |
|------------------|----------|--------------|
| PC开发环境       | Windows  | HBuilderX    |
|                  | 21H2     |              |
| 手机系统         | 版本号   |              |
|                  | iOS      | iOS 15       |
|                  |          |              |
|                  |          |              |
| 页面类型         | vue版本  |              |
|                  | vue2     |              |
| 打包方式         |          | 云端         |
|                  |          |              |
|                  |          |              |
|                  |          |              |

更多关于uni-app IOS端使用地图时高德地图无法获取cityCode的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

配置地图key没有

更多关于uni-app IOS端使用地图时高德地图无法获取cityCode的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您好,已经配置过了,而且是我们德正式环境发现的,Android没有问题

看来这个问题应该不是bug,是uniapp这边没有办法返回,目前个人也没有找到解决方法

uni-app 中使用高德地图时,如果在 iOS 端无法获取 cityCode,可能是由于以下几个原因导致的。你可以根据以下步骤进行排查和解决问题:


1. 检查高德地图 SDK 的初始化

确保在 uni-app 项目中正确初始化了高德地图 SDK,并且使用的是最新版本的高德地图 SDK。

  • manifest.json 中配置高德地图的 AppKey,确保 iOS 和 Android 的配置都正确。
  • 示例配置:
    "app-plus": {
      "distribute": {
        "ios": {
          "maps": {
            "amap": {
              "appkey_ios": "你的高德地图 iOS AppKey"
            }
          }
        },
        "android": {
          "maps": {
            "amap": {
              "appkey_android": "你的高德地图 Android AppKey"
            }
          }
        }
      }
    }
    

2. 检查权限配置

确保在 iOS 项目中正确配置了定位权限。

  • manifest.json 中配置定位权限:
    "app-plus": {
      "distribute": {
        "ios": {
          "UIBackgroundModes": ["location"],
          "NSLocationWhenInUseUsageDescription": "需要获取您的地理位置",
          "NSLocationAlwaysUsageDescription": "需要获取您的地理位置"
        }
      }
    }
    
  • 在 Xcode 中检查 Info.plist 文件,确保已添加以下权限:
    • NSLocationWhenInUseUsageDescription
    • NSLocationAlwaysUsageDescription

3. 检查定位功能是否开启

确保设备已开启定位功能,并且应用已获取到定位权限。

  • 在 iOS 设备的设置中,检查是否已允许应用访问定位服务。
  • 在代码中调用 uni.getLocation 测试是否能正常获取位置信息。

4. 检查高德地图 API 的调用

确保在调用高德地图 API 时,参数和逻辑正确。

  • 示例代码:
    uni.getLocation({
      type: 'gcj02',
      success: (res) => {
        const latitude = res.latitude;
        const longitude = res.longitude;
        // 调用高德地图的反地理编码 API 获取 cityCode
        uni.request({
          url: `https://restapi.amap.com/v3/geocode/regeo?key=你的高德地图AppKey&location=${longitude},${latitude}`,
          success: (res) => {
            const cityCode = res.data.regeocode.addressComponent.citycode;
            console.log('cityCode:', cityCode);
          },
          fail: (err) => {
            console.error('获取cityCode失败:', err);
          }
        });
      },
      fail: (err) => {
        console.error('获取位置失败:', err);
      }
    });
    

5. 检查网络请求是否正常

确保网络请求能够正常发送并返回数据。

  • 使用 uni.request 测试高德地图的反地理编码 API 是否能够正常返回数据。
  • 检查返回的 JSON 数据中是否包含 citycode 字段。

6. 调试和日志

通过调试和日志输出排查问题。

  • uni.getLocationuni.request 的成功和失败回调中添加日志输出,检查每一步的执行情况。
  • 如果返回的数据中没有 citycode,检查返回的 JSON 数据结构,确认是否有其他字段可以替代。

7. 使用高德地图的 JavaScript API

如果原生 SDK 存在问题,可以尝试使用高德地图的 JavaScript API 来实现相关功能。

  • uni-app 中引入高德地图的 JavaScript API:
    <script src="https://webapi.amap.com/maps?v=2.0&key=你的高德地图AppKey"></script>
回到顶部