使用 Capacitor 构建的 iOS 应用程序的位置权限

Location Permission on iOS app built with Capacitor

我正在为 iOS 和 Android 构建需要地理定位权限的移动应用程序。使用 Capacitor 构建它,它在 Android 中运行良好。但是在 iOS 上,我的 Mapbox 地图中的“以用户为中心”按钮不起作用,当您尝试单击它时会被划掉并禁用。网上有很多答案,比如 人们解释说你必须向 Info.plist 文件添加三个权限:

我只添加了第二个,因为我只需要在使用该应用程序时访问地理定位。但是仍然无法访问定位服务。我也试过添加几个插件,但这也没有解决问题。以下是 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 上的位置?谢谢

问题是 Android 和 iOS 在我的用例中表现得非常不同。在 Android 构建中,提供位置权限就足够了。有了这些权限,作为我应用程序重要组成部分的 mapbox 地图就能够像通常在 Web 构建中那样使用用户的位置。不需要插件,基本上是一个理想的场景。

在 iOS,mapbox 地图仍然无法直接访问用户的位置。因此,当您单击目标符号按钮以您的位置为中心时,即使具有权限,mapbox 地图也无法完成请求。但是你可以做的是使用@capacitor/geolocation 插件获取坐标(和其他 gps 数据),然后将地图设置为转到你传递给它的特定坐标。

我不确定为什么 Android 和 iOS 在这种情况下表现如此不同。