使用 Capacitor 构建的 iOS 应用程序的位置权限
Posted
技术标签:
【中文标题】使用 Capacitor 构建的 iOS 应用程序的位置权限【英文标题】:Location Permission on iOS app built with Capacitor 【发布时间】:2021-09-16 17:28:52 【问题描述】:我正在为需要地理定位权限的 ios 和 android 构建一个移动应用程序。使用 Capacitor 来构建它,它在 Android 中运行良好。但是在 iOS 上,我的 Mapbox 地图中的“用户中心”按钮不起作用,当您尝试单击它时会被划掉并禁用。网上有很多答案,例如this one,人们解释说您必须向 Info.plist 文件添加三个权限:
NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription NSLocationAlwaysAndWhenInUseUsageDescription我只添加了第二个,因为我只需要在使用应用程序时访问地理位置。但是仍然无法访问位置服务。我也尝试添加几个插件,但这也没有解决问题。以下是 package.json 文件中相关项目的列表:
"dependencies":
"@capacitor/core": "^3.0.2",
"@capacitor/ios": "^3.0.2",
"@ionic-native/location-accuracy": "^5.34.0",
"@mapbox/mapbox-gl-geocoder": "^4.7.1",
"@mapbox/mapbox-sdk": "^0.13.0",
"cordova-plugin-request-location-accuracy": "^2.3.0",
"mapbox-gl": "^2.3.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
,
"devDependencies":
"@capacitor/app": "^1.0.2",
"@capacitor/cli": "^3.0.2",
"@capacitor/geolocation": "^1.0.2",
"capacitor-resources": "^2.0.5"
对于正常运行的android构建,我不必导入任何插件或任何东西,我只需添加权限即可。如何让用户使用 Capacitor 将地图以他们在 ios 上的位置为中心?谢谢。
【问题讨论】:
【参考方案1】:问题是 Android 和 iOS 在我的用例中表现得非常不同。在 Android 版本中,提供位置权限就足够了。有了这些权限,作为我应用程序重要组成部分的 mapbox 地图就能够像在 Web 构建中通常那样使用用户的位置。不需要插件,所以基本上是理想的场景。
在 iOS 上,mapbox 地图仍然无法直接访问用户的位置。因此,当您单击目标符号按钮以您的位置为中心时,即使具有权限,mapbox 地图也无法完成请求。但是您可以做的是使用@capacitor/geolocation 插件来获取坐标(和其他gps 数据),然后将地图设置为您传递给它的特定坐标。
我不确定为什么 Android 和 iOS 在这种情况下表现如此不同。
【讨论】:
以上是关于使用 Capacitor 构建的 iOS 应用程序的位置权限的主要内容,如果未能解决你的问题,请参考以下文章
Ionic Capacitor 无法再生成可构建的 iOS 项目,CompileAssetCatalog 错误
您如何在 Ionic w/ Capacitor 中更新 iOS 和 Android 应用程序版本?
Capacitor v3 插件不适用于 android 构建
状态栏使用 Capacitor 覆盖 iOS 上的 webview