uni-app运行到iOS真机,打包真机安装后获取定位不弹授权提醒

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

uni-app运行到iOS真机,打包真机安装后获取定位不弹授权提醒

操作步骤:

  • 云打包后,安装到ios真机上,获取定位不弹授权提醒,也没有报错信息

预期结果:

  • 可正常弹出定位授权提醒

实际结果:

  • 未正常弹出定位授权提醒

bug描述:

  • 云打包后,安装到ios真机上,uni.getLocation, 获取定位不弹授权提醒,也没有报错信息

| 信息类别       | 信息内容             |
|----------------|----------------------|
| 产品分类       | uniapp/App           |
| PC开发环境     | Mac                  |
| PC系统版本号   | macOS 10.15.7        |
| HBuilderX类型  | Alpha                |
| HBuilderX版本  | 4.31                 |
| 手机系统       | iOS                  |
| 手机系统版本号 | iOS 15               |
| 手机厂商       | 苹果                 |
| 手机机型       | iPhone 11 Pro Max    |
| 页面类型       | vue                  |
| vue版本        | vue2                 |
| 打包方式       | 云端                 |
| 项目创建方式   | HBuilderX            |

31 回复

我看你反馈了两次,在开发期间真机是否正常? 简单代码提供下,新建工程选择 hello uniapp 运行其中的 demo 是否正常? ios 真机测试了几台设备,都失败还是部分失败,安卓真机结果如何?


在hbuilderx 4.28–alpha,开发环境是好的,打包之后ios安装后获取不到定位授权,在升级到4.31.2024102414-alpha之后,开发环境也获取不到授权了,目前是ios所有机型都获取不到

android机型没有问题,只有ios有问题。 这个问题应该是不代码的问题,因为这个功能已经稳定运行有一年多的时间了,只是在最近更新中才出现此问题

你好,我更新到 4.32.2024110103-alpha 最新版本,开发环境可以获取到定位了,但是打包之后安装还是不行

回复 2***@qq.com: 是提交云端打包吗?确认是选择的“传统打包”模式,然后重新提交云端打包。

回复 DCloud_App_Array: 是云打包,传统模式

提供下appid,我们查下云端打包日志。

回复 DCloud_App_Array: UNI4422303

回复 2***@qq.com: 后台日志显示你的项目是cli项目,cli版本是3.3.0-alpha。 请将cli版本更新到与HBuilderX版本一致(4.32)

回复 DCloud_App_Array: 项目升级到vue3后,依赖也更新到最新版本了,云打包后,安装后还是申请不到定位权限。目前依赖版本:3.0.0-alpha-4030220241101001

回复 2***@qq.com: 使用此项目打自定义基座是否可以正常定位?

回复 DCloud_App_Array: 真机调试可以,模拟器也可以,就云打包之后,安装不可以

回复 2***@qq.com: 发下正式包的下载地址,我们排查看下

回复 DCloud_App_Array: 你好,有结果了吗

回复 2***@qq.com: 给ipa安装包的下载链接地址

回复 DCloud_App_Array: 这个可以吗?

回复 DCloud_App_Array: 你好,麻烦问一下有结果了吗,反馈已经一周过去了

回复 开发者者: 之前给的链接已经过期无法下载了,请重新提交云端打包再发一个下载链接地址

回复 开发者者: 从打包日志看已经将地图模块及定位权限描述都包含了,应该不会有问题。请提供应用的测试账号及密码,以及操作步骤。我们安装应用测试验证一下。

回复 DCloud_App_Array: 你好,这个涉及到公司的信息,我私发你im上了,im名称(开发者者)

回复 DCloud_App_Array: 你好,请问一下,有结果了吗

遇到了同样的问题,目前已解决。猜测可能是cli的编译器和编辑器或者云打包的版本不兼容导致的。 通过执行 npx @dcloudio/uvm@latest 然后删除node_modules和dist 再重新安装所有依赖可以解决(升级后项目可能会有其他依赖冲突需要解决)
目前可以正常使用的版本: @dcloudio:3.0.0-4020920240930001 HBuilder X:4.29

上午建了一个新的空项目,单独测试定位,也还是获取不到定位授权

回复 开发者者: 你是用cli建的项目还是用编辑器创建的? cli项目可以用我上面提到的那个版本。编辑器直接创建的项目我这边目前没出现过问题

捕获一下uni.getLocation的异常信息,看是不是:undefined is not an object (evaluating ‘id().invokeSync’)

用这个,把地图的key换成你的,看看页面上显示的是什么

非常感谢你的留言,官方云打包环境已更新,问题已修复

在使用uni-app开发应用时,如果应用在iOS真机上运行且打包安装后获取定位信息时没有弹出授权提醒,这通常是因为应用没有正确请求定位权限或者在Info.plist文件中没有配置相应的权限描述。以下是一些可能的解决方案和相关代码案例:

1. 确保在代码中请求定位权限

在uni-app中,你可以使用uni.getLocation方法来请求定位权限。这个方法会触发iOS系统的权限请求对话框(如果权限尚未被授权)。

uni.getLocation({
    type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
    success: function (res) {
        console.log('当前位置:', res.latitude, res.longitude);
    },
    fail: function (err) {
        console.error('获取位置失败:', err);
    }
});

2. 配置Info.plist文件

在iOS项目中,Info.plist文件用于声明应用所需的权限。对于定位权限,你需要添加以下键和值:

  • NSLocationWhenInUseUsageDescription:当应用在前台时请求定位权限的描述。
  • NSLocationAlwaysAndWhenInUseUsageDescription(可选):如果应用需要在后台也持续获取定位,需要这个描述。

例如,你可以在Xcode中打开你的iOS项目,然后找到Info.plist文件,添加以下条目:

<key>NSLocationWhenInUseUsageDescription</key>
<string>我们需要您的位置信息以提供基于位置的服务</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>我们需要在后台持续获取您的位置信息以提供更好的体验</string>

3. 检查应用是否有定位权限

在请求定位之前,你还可以检查应用是否已经获得了定位权限,以避免不必要的权限请求对话框。

uni.getSetting({
    success: function(res) {
        if (!res.authSetting['scope.userLocation']) {
            // 用户未授权定位权限,可以引导用户去设置页面授权
            uni.authorize({
                scope: 'scope.userLocation',
                success: function() {
                    // 用户同意授权
                    uni.getLocation(...);
                },
                fail: function() {
                    // 用户拒绝授权
                    console.error('用户拒绝授权定位');
                }
            });
        } else {
            // 用户已授权,直接获取定位
            uni.getLocation(...);
        }
    }
});

确保你的代码正确请求了定位权限,并且在Info.plist文件中正确配置了权限描述,这样可以有效避免在iOS真机上运行uni-app应用时出现不弹授权提醒的问题。

回到顶部