1***@qq.com
1***@qq.com
  • 发布:2022-02-17 08:43
  • 更新:2024-08-13 12:08
  • 阅读:2606

【报Bug】uni.getLocation在iOS上定位异常

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Monterey

HBuilderX类型: 正式

HBuilderX版本号: 3.3.11

手机系统: iOS

手机系统版本号: iOS 12.4

手机厂商: 苹果

手机机型: iphone 6 plus

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
 var that = this;  
                var cllocationManger = plus.ios.import("CLLocationManager");  
                var enable = cllocationManger.locationServicesEnabled();  
                var status = cllocationManger.authorizationStatus();  
                if (enable && status != 2) {  
                    uni.showModal({  
                        title: '提示',  
                        content: '手机系统的定位已经打开',  
                        success: function (res) {  
                            if (res.confirm) {  
                                console.log('用户点击确定');  
                                uni.getLocation({  
                                    type: "gcj02",  
                                    geocode: true,  
                                    altitude: true,  
                                    success(res) {  
                                        console.log("success---------1");  
                                        uni.showModal({  
                                            title: '获取定位成功',  
                                            content: JSON.stringify(res),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    },  
                                    fail(err) {  
                                        uni.showModal({  
                                            title: '获取定位失败',  
                                            content: JSON.stringify(err),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    }  
                                })  
                            } else if (res.cancel) {  
                                console.log('用户点击取消');  
                            }  
                        }  
                    });  
                } else {  
                    console.log("手机系统的定位没有打开");  
                }

操作步骤:
var that = this;  
                var cllocationManger = plus.ios.import("CLLocationManager");  
                var enable = cllocationManger.locationServicesEnabled();  
                var status = cllocationManger.authorizationStatus();  
                if (enable && status != 2) {  
                    uni.showModal({  
                        title: '提示',  
                        content: '手机系统的定位已经打开',  
                        success: function (res) {  
                            if (res.confirm) {  
                                console.log('用户点击确定');  
                                uni.getLocation({  
                                    type: "gcj02",  
                                    geocode: true,  
                                    altitude: true,  
                                    success(res) {  
                                        console.log("success---------1");  
                                        uni.showModal({  
                                            title: '获取定位成功',  
                                            content: JSON.stringify(res),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    },  
                                    fail(err) {  
                                        uni.showModal({  
                                            title: '获取定位失败',  
                                            content: JSON.stringify(err),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    }  
                                })  
                            } else if (res.cancel) {  
                                console.log('用户点击取消');  
                            }  
                        }  
                    });  
                } else {  
                    console.log("手机系统的定位没有打开");  
                }

预期结果:

在iOS真机和模拟器 定位功能正常使用

实际结果:

在iOS真机和模拟器 定位功能不正常,错误提示:{"errMsg":"getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282","errCode":-1502,"code":-1502}

bug描述:

在iOS真机和模拟器中,uni.getLocation始终获取不到位置
错误提示为:“{"errMsg":"getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282","errCode":-1502,"code":-1502}”
源码如下:

var that = this;  
                var cllocationManger = plus.ios.import("CLLocationManager");  
                var enable = cllocationManger.locationServicesEnabled();  
                var status = cllocationManger.authorizationStatus();  
                if (enable && status != 2) {  
                    uni.showModal({  
                        title: '提示',  
                        content: '手机系统的定位已经打开',  
                        success: function (res) {  
                            if (res.confirm) {  
                                console.log('用户点击确定');  
                                uni.getLocation({  
                                    type: "gcj02",  
                                    geocode: true,  
                                    altitude: true,  
                                    success(res) {  
                                        console.log("success---------1");  
                                        uni.showModal({  
                                            title: '获取定位成功',  
                                            content: JSON.stringify(res),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    },  
                                    fail(err) {  
                                        uni.showModal({  
                                            title: '获取定位失败',  
                                            content: JSON.stringify(err),  
                                            success: function (res) {  
                                                if (res.confirm) {  
                                                    console.log('用户点击确定');  
                                                } else if (res.cancel) {  
                                                    console.log('用户点击取消');  
                                                }  
                                            }  
                                        });  
                                    }  
                                })  
                            } else if (res.cancel) {  
                                console.log('用户点击取消');  
                            }  
                        }  
                    });  
                } else {  
                    console.log("手机系统的定位没有打开");  
                }
2022-02-17 08:43 负责人:DCloud_iOS_XHY 分享
已邀请:
BoredApe

BoredApe - 有问题就会有答案。

请在Hello Uni-app中测试是否正常,最好能上传一个能重现问题的测试工程

  • 1***@qq.com (作者)

    换下bundle id 和 amapkey

    2022-02-17 11:34

1***@qq.com

1***@qq.com (作者)

在Hello Uni-app中测试不正常,可运行demo

1***@qq.com

1***@qq.com (作者)

用的SDK-iOS@3.3.10-20220125,SDK3个多G就不发了

DCloud_iOS_XHY

DCloud_iOS_XHY

  • 雨夜敬清秋

    最新版的hbx,标准基座,ios模拟器也无法获取位置,hello-uniapp项目也有问题

    2023-05-17 08:31

1***@qq.com

1***@qq.com

顶一下,解决了吗

e***@qq.com

e***@qq.com

确实。我也存在这个问题。ios 基座 无法获取定位。HBuilderX 4.15 ios版本 17.5.1
提示:

定位获取失败,请打开GPS定位, {"errMsg":"getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282","errCode":-1502,"code":-1502}

uni.getLocation({  
type: "gcj02",  
geocode: true,  
success: function(res) {  
let patt = new RegExp("-");  
let getGps=that.isNumber(res.latitude)&&that.isNumber(res.longitude);  
log(getGps+"getLocation====>"+res.latitude+","+res.longitude);  
if (!getGps) {  
showMsg("定位获取失败,请打开GPS定位");  
} else {  
that.imageText.imagelat = res.latitude;  
that.imageText.imagelng = res.longitude;  
log("getLocation====>"+that.imageText.imagelat+","+that.imageText.imagelng);  
that.openCameraSuccess(); //获取经纬度成功 打开相机  
}  
},  
fail: function(e) {  
**showMsg("定位获取失败,请打开GPS定位",e);**  
},  
});
爽哥哥007

爽哥哥007 - aaa

天杀的还没解决

1***@163.com

1***@163.com

打包时ios的Bundel ID 需要和高德地图后台配置中的安全码Bundel ID 一致,然后把高德的ios key填写到manifest.json的高德定位 appkey_ios中,自定义的真机基座运行需要重新打包生成基座再进行真机运行。云打包就正常云打包就行。

  • 2***@qq.com

    就是说,需要先打包一个自定义基座,然后运行的时候选择这个自定义基座来做真机运行?

    2024-08-26 13:46

8***@qq.com

8***@qq.com

解决了吗?uni.geyLocation 打包H5,在ios公众号中没反应,安卓没问题,能正常获取地址

要回复问题请先登录注册